diff --git a/ChangeLog b/ChangeLog index 8c70659504e3df645bd1206dbc78f1732c28d38e..524fa2bcfc1cda78ac430230874b415dbb609091 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 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. diff --git a/x86_64/aesni/aes-decrypt-internal.asm b/x86_64/aesni/aes-decrypt-internal.asm index 1dfbcb4cb24e1f40d0aa17b9ab56d7bf06108bfd..412e8d31aee63f6758157d9b8e03d731ce00fe37 100644 --- a/x86_64/aesni/aes-decrypt-internal.asm +++ b/x86_64/aesni/aes-decrypt-internal.asm @@ -44,7 +44,11 @@ define(<CNT>, <%rdx>) 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, @@ -77,12 +81,12 @@ PROLOGUE(_nettle_aes_decrypt) 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 diff --git a/x86_64/aesni/aes-encrypt-internal.asm b/x86_64/aesni/aes-encrypt-internal.asm index ee925fe5898ebbcfb03f0cb461ea1a5f7b43bf7c..07f17b256e76bfd06dfa46c959f13e8516a2d544 100644 --- a/x86_64/aesni/aes-encrypt-internal.asm +++ b/x86_64/aesni/aes-encrypt-internal.asm @@ -44,7 +44,11 @@ define(<CNT>, <%rdx>) 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, @@ -77,12 +81,12 @@ PROLOGUE(_nettle_aes_encrypt) 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