symm/rijndael-x86ish-aesni.S: Fix conflict in 32-bit register allocation.
[catacomb] / symm / rijndael-x86ish-aesni.S
index 27f09bc..c22d23a 100644 (file)
        .globl  F(rijndael_rcon)
 
 ///--------------------------------------------------------------------------
-/// Local utilities.
-
-// Magic constants for shuffling.
-#define ROTL 0x93
-#define ROT2 0x4e
-#define ROTR 0x39
-
-///--------------------------------------------------------------------------
 /// Main code.
 
        .arch   .aes
@@ -232,16 +224,16 @@ FUNC(rijndael_setup_x86ish_aesni)
        // Fourth word of the cycle, and seven or eight words of key.  Do a
        // byte substitution.
        movd    xmm0, eax
-       pshufd  xmm0, xmm0, ROTL
+       pshufd  xmm0, xmm0, SHUF(2, 1, 0, 3)
        aeskeygenassist xmm1, xmm0, 0
        movd    eax, xmm1
        jmp     2f
 
        // First word of the cycle.  This is the complicated piece.
 1:     movd    xmm0, eax
-       pshufd  xmm0, xmm0, ROTR
+       pshufd  xmm0, xmm0, SHUF(0, 3, 2, 1)
        aeskeygenassist xmm1, xmm0, 0
-       pshufd  xmm1, xmm1, ROTL
+       pshufd  xmm1, xmm1, SHUF(2, 1, 0, 3)
        movd    eax, xmm1
        xor     al, [RCON]
        inc     RCON
@@ -398,10 +390,10 @@ ENDFUNC
        // Arguments come in on the stack, and need to be collected.  We
        // don't have a shortage of registers.
 
-#  define K ecx
+#  define K eax
 #  define SRC edx
 #  define DST edx
-#  define NR eax
+#  define NR ecx
 
        mov     K, [esp + 4]
        mov     SRC, [esp + 8]