2015-01-13 Niels Möller <nisse@lysator.liu.se>
+ * x86_64/aesni/aes-encrypt-internal.asm: Use explicit .byte
+ sequences for aes instructions, don't rely on assembler support.
+ * x86_64/aesni/aes-decrypt-internal.asm: Likewise.
+
* aclocal.m4 (NETTLE_CHECK_IFUNC): New macro, checking for ifunc
and settting HAVE_LINK_IFUNC if working.
* configure.ac: Use it.
C Subkey pointer
define(<KEY>, <%rax>)
- .arch bdver2
+dnl aesdec %xmm1, %xmm0
+define(<AESDEC>, <.byte 0x66, 0x0f, 0x38, 0xde, 0xc1>)
+dnl aesdeclast %xmm1, %xmm0
+define(<AESDECLAST>, <.byte 0x66, 0x0f, 0x38, 0xdf, 0xc1>)
+
.file "aes-decrypt-internal.asm"
C _aes_decrypt(unsigned rounds, const uint32_t *keys,
add $16, KEY
movups (KEY), %xmm1
- aesdec %xmm1, %xmm0
+ AESDEC C %xmm1, %xmm0
decl XREG(CNT)
jnz .Lround_loop
movups 16(KEY), %xmm1
- aesdeclast %xmm1, %xmm0
+ AESDECLAST C %xmm1, %xmm0
movups %xmm0, (DST)
add $16, SRC
C Subkey pointer
define(<KEY>, <%rax>)
- .arch bdver2
+dnl aesenc %xmm1, %xmm0
+define(<AESENC>, <.byte 0x66, 0x0f, 0x38, 0xdc, 0xc1>)
+dnl aesenclast %xmm1, %xmm0
+define(<AESENCLAST>, <.byte 0x66, 0x0f, 0x38, 0xdd, 0xc1>)
+
.file "aes-encrypt-internal.asm"
C _aes_encrypt(unsigned rounds, const uint32_t *keys,
add $16, KEY
movups (KEY), %xmm1
- aesenc %xmm1, %xmm0
+ AESENC C %xmm1, %xmm0
decl XREG(CNT)
jnz .Lround_loop
movups 16(KEY), %xmm1
- aesenclast %xmm1, %xmm0
+ AESENCLAST C %xmm1, %xmm0
movups %xmm0, (DST)
add $16, SRC