From: Niels Möller Date: Thu, 16 May 2013 08:32:45 +0000 (+0200) Subject: arm/v6: Alignment tweaks to aes code. X-Git-Tag: nettle_3.0_release_20140607~237 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8b1d9263f5f26bf30c1678e9baa533365453f01d;p=thirdparty%2Fnettle.git arm/v6: Alignment tweaks to aes code. --- diff --git a/ChangeLog b/ChangeLog index 6bcf524a..38c26f6d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2013-05-16 Niels Möller + + * arm/v6/aes-encrypt-internal.asm: Use ALIGN macro. Use 16-byte + alignment for loops. + * arm/v6/aes-decrypt-internal.asm: Likewise. Also added a nop + which mysteriously improves benchmark performance on Cortex-A9. + 2013-05-15 Niels Möller * configure.ac (asm_path): Handle armv6 and armv7 differently from diff --git a/arm/v6/aes-decrypt-internal.asm b/arm/v6/aes-decrypt-internal.asm index 22df3aa8..651636cc 100644 --- a/arm/v6/aes-decrypt-internal.asm +++ b/arm/v6/aes-decrypt-internal.asm @@ -50,13 +50,16 @@ define(, ) C lr C size_t length, uint8_t *dst, C uint8_t *src) .text - .align 2 + ALIGN(4) PROLOGUE(_nettle_aes_decrypt) teq LENGTH, #0 beq .Lend ldr SRC, [sp] push {r4,r5,r6,r7,r8,r10,r11,lr} + nop C For some mysterious reason, taking out this nop + C slows this function down on Cortex-A9. + ALIGN(16) .Lblock_loop: mov KEY, CTX AES_LOAD(SRC,KEY,W0) @@ -69,7 +72,7 @@ PROLOGUE(_nettle_aes_decrypt) add TABLE, TABLE, #AES_TABLE0 b .Lentry - .align 2 + ALIGN(16) .Lround_loop: C Transform X -> W AES_DECRYPT_ROUND(X0, X1, X2, X3, W0, W1, W2, W3, KEY) diff --git a/arm/v6/aes-encrypt-internal.asm b/arm/v6/aes-encrypt-internal.asm index 81eb6d04..15cf1bb0 100644 --- a/arm/v6/aes-encrypt-internal.asm +++ b/arm/v6/aes-encrypt-internal.asm @@ -52,13 +52,14 @@ define(, ) C lr C size_t length, uint8_t *dst, C uint8_t *src) .text - .align 2 + ALIGN(4) PROLOGUE(_nettle_aes_encrypt) teq LENGTH, #0 beq .Lend ldr SRC, [sp] push {r4,r5,r6,r7,r8,r10,r11,lr} + ALIGN(16) .Lblock_loop: mov KEY, CTX AES_LOAD(SRC,KEY,W0) @@ -71,7 +72,7 @@ PROLOGUE(_nettle_aes_encrypt) add TABLE, TABLE, #AES_TABLE0 b .Lentry - .align 2 + ALIGN(16) .Lround_loop: C Transform X -> W AES_ENCRYPT_ROUND(X0, X1, X2, X3, W0, W1, W2, W3, KEY)