]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
Use explicit .byte sequences when assembling aes instructions.
authorNiels Möller <nisse@lysator.liu.se>
Tue, 13 Jan 2015 09:01:04 +0000 (10:01 +0100)
committerNiels Möller <nisse@lysator.liu.se>
Tue, 13 Jan 2015 09:01:04 +0000 (10:01 +0100)
ChangeLog
x86_64/aesni/aes-decrypt-internal.asm
x86_64/aesni/aes-encrypt-internal.asm

index 8c70659504e3df645bd1206dbc78f1732c28d38e..524fa2bcfc1cda78ac430230874b415dbb609091 100644 (file)
--- 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.
index 1dfbcb4cb24e1f40d0aa17b9ab56d7bf06108bfd..412e8d31aee63f6758157d9b8e03d731ce00fe37 100644 (file)
@@ -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
index ee925fe5898ebbcfb03f0cb461ea1a5f7b43bf7c..07f17b256e76bfd06dfa46c959f13e8516a2d544 100644 (file)
@@ -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