From 1b3e068662dd9e258b1153f37e5b47fc34d67b28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st> Date: Fri, 25 Nov 2011 15:51:13 +0100 Subject: [PATCH] Updated x86_64 assembler for W64 support. Rev: nettle/ChangeLog:1.242 Rev: nettle/x86_64/aes-decrypt-internal.asm:1.4 Rev: nettle/x86_64/aes-encrypt-internal.asm:1.11 Rev: nettle/x86_64/camellia-crypt-internal.asm:1.3 Rev: nettle/x86_64/memxor.asm:1.4 Rev: nettle/x86_64/serpent-decrypt.asm:1.4 Rev: nettle/x86_64/serpent-encrypt.asm:1.6 Rev: nettle/x86_64/sha1-compress.asm:1.3 --- ChangeLog | 1 + x86_64/aes-decrypt-internal.asm | 2 ++ x86_64/aes-encrypt-internal.asm | 2 ++ x86_64/camellia-crypt-internal.asm | 2 ++ x86_64/memxor.asm | 8 ++++++++ x86_64/serpent-decrypt.asm | 2 ++ x86_64/serpent-encrypt.asm | 2 ++ x86_64/sha1-compress.asm | 2 ++ 8 files changed, 21 insertions(+) diff --git a/ChangeLog b/ChangeLog index 191c94df..d0f7cd36 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,7 @@ From Martin Storsj�: * x86_64/machine.m4 (W64_ENTRY, W64_EXIT): New macros for supporting W64 ABI. + * x86_64: Updated all assembly files to use them. * configure.ac (W64_ABI): New variable, set when compiling for W64 ABI (64-bit M$ windows). diff --git a/x86_64/aes-decrypt-internal.asm b/x86_64/aes-decrypt-internal.asm index 8f0df737..2c94d0f6 100644 --- a/x86_64/aes-decrypt-internal.asm +++ b/x86_64/aes-decrypt-internal.asm @@ -55,6 +55,7 @@ define(<TMP>,<%rbp>) .text ALIGN(4) PROLOGUE(_nettle_aes_decrypt) + W64_ENTRY(5, 0) test PARAM_LENGTH, PARAM_LENGTH jz .Lend @@ -129,5 +130,6 @@ PROLOGUE(_nettle_aes_decrypt) pop %rbp pop %rbx .Lend: + W64_EXIT(5, 0) ret EPILOGUE(_nettle_aes_decrypt) diff --git a/x86_64/aes-encrypt-internal.asm b/x86_64/aes-encrypt-internal.asm index c23feb62..dd516c8c 100644 --- a/x86_64/aes-encrypt-internal.asm +++ b/x86_64/aes-encrypt-internal.asm @@ -55,6 +55,7 @@ define(<TMP>,<%rbp>) .text ALIGN(4) PROLOGUE(_nettle_aes_encrypt) + W64_ENTRY(5, 0) test PARAM_LENGTH, PARAM_LENGTH jz .Lend @@ -129,5 +130,6 @@ PROLOGUE(_nettle_aes_encrypt) pop %rbp pop %rbx .Lend: + W64_EXIT(5, 0) ret EPILOGUE(_nettle_aes_encrypt) diff --git a/x86_64/camellia-crypt-internal.asm b/x86_64/camellia-crypt-internal.asm index e940342b..b7bd93f3 100644 --- a/x86_64/camellia-crypt-internal.asm +++ b/x86_64/camellia-crypt-internal.asm @@ -125,6 +125,7 @@ C xorl XREG(TMP), XREG($1) ALIGN(4) PROLOGUE(_nettle_camellia_crypt) + W64_ENTRY(5, 0) test LENGTH, LENGTH jz .Lend @@ -182,5 +183,6 @@ PROLOGUE(_nettle_camellia_crypt) pop %rbp pop %rbx .Lend: + W64_EXIT(5, 0) ret EPILOGUE(_nettle_camellia_crypt) diff --git a/x86_64/memxor.asm b/x86_64/memxor.asm index 7a5a23b6..117ae70e 100644 --- a/x86_64/memxor.asm +++ b/x86_64/memxor.asm @@ -40,6 +40,7 @@ define(<USE_SSE2>, <no>) ALIGN(4) PROLOGUE(memxor) + W64_ENTRY(3, 0) mov %rdx, %r10 mov %rdi, %rdx jmp .Lmemxor3_entry @@ -50,6 +51,7 @@ EPILOGUE(memxor) ALIGN(4) PROLOGUE(memxor3) + W64_ENTRY(4, 0) C %cl needed for shift count, so move away N mov %rcx, N .Lmemxor3_entry: @@ -200,6 +202,8 @@ C jz .Ldone xor (BP, N), TMP mov TMP, (DST, N) + C ENTRY might have been 3 args, too, but it doesn't matter for the exit + W64_EXIT(4, 0) ret .Lfinal: @@ -214,6 +218,8 @@ C jz .Ldone jnc .Lfinal_loop .Ldone: + C ENTRY might have been 3 args, too, but it doesn't matter for the exit + W64_EXIT(4, 0) ret ifelse(USE_SSE2, yes, < @@ -247,6 +253,8 @@ ifelse(USE_SSE2, yes, < movdqu (BP), %xmm1 pxor %xmm0, %xmm1 movdqa %xmm1, (DST) + C ENTRY might have been 3 args, too, but it doesn't matter for the exit + W64_EXIT(4, 0) ret >) diff --git a/x86_64/serpent-decrypt.asm b/x86_64/serpent-decrypt.asm index b2bca664..5055d715 100644 --- a/x86_64/serpent-decrypt.asm +++ b/x86_64/serpent-decrypt.asm @@ -525,6 +525,7 @@ define(<WLTI>, < ALIGN(4) PROLOGUE(nettle_serpent_decrypt) C save all registers that need to be saved + W64_ENTRY(4, 13) push %rbx push %rbp push %r12 @@ -697,4 +698,5 @@ PROLOGUE(nettle_serpent_decrypt) pop %r12 pop %rbp pop %rbx + W64_EXIT(4, 13) ret diff --git a/x86_64/serpent-encrypt.asm b/x86_64/serpent-encrypt.asm index fe60f7c1..5751b30e 100644 --- a/x86_64/serpent-encrypt.asm +++ b/x86_64/serpent-encrypt.asm @@ -552,6 +552,7 @@ define(<WLT>, < ALIGN(4) PROLOGUE(nettle_serpent_encrypt) C save all registers that need to be saved + W64_ENTRY(4, 13) push %rbx push %rbp push %r12 @@ -732,4 +733,5 @@ C parallell. pop %r12 pop %rbp pop %rbx + W64_EXIT(4, 13) ret diff --git a/x86_64/sha1-compress.asm b/x86_64/sha1-compress.asm index a912ce0a..1abbb698 100644 --- a/x86_64/sha1-compress.asm +++ b/x86_64/sha1-compress.asm @@ -126,6 +126,7 @@ C adding, and then rotating back. ALIGN(4) PROLOGUE(_nettle_sha1_compress) C save all registers that need to be saved + W64_ENTRY(2, 0) sub $68, %rsp C %rsp = W @@ -250,5 +251,6 @@ PROLOGUE(_nettle_sha1_compress) addl SE, 16(STATE) add $68, %rsp + W64_EXIT(2, 0) ret EPILOGUE(_nettle_sha1_compress) -- GitLab