From df629ba53a662427ebd3ddca90c3fe9ddd6511d3 Mon Sep 17 00:00:00 2001 From: Jussi Kivilinna Date: Tue, 17 Dec 2013 15:35:38 +0200 Subject: Improve performance of SHA-512/ARM/NEON implementation * cipher/sha512-armv7-neon.S (RT01q, RT23q, RT45q, RT67q): New. (round_0_63, round_64_79): Remove. (rounds2_0_63, rounds2_64_79): New. (_gcry_sha512_transform_armv7_neon): Add 'nblks' input; Handle multiple input blocks; Use new round macros. * cipher/sha512.c [USE_ARM_NEON_ASM] (_gcry_sha512_transform_armv7_neon): Add 'num_blks'. (transform) [USE_ARM_NEON_ASM]: Pass nblks to assembly. -- Benchmarks on ARM Cortex-A8: C-language: 139.1 c/B Old ARM/NEON: 34.30 c/B New ARM/NEON: 24.46 c/B New vs C: 5.68x New vs Old: 1.40x Signed-off-by: Jussi Kivilinna --- cipher/sha512.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'cipher/sha512.c') diff --git a/cipher/sha512.c b/cipher/sha512.c index 215e8edf..3474694c 100644 --- a/cipher/sha512.c +++ b/cipher/sha512.c @@ -541,7 +541,7 @@ transform_blk (SHA512_STATE *hd, const unsigned char *data) #ifdef USE_ARM_NEON_ASM void _gcry_sha512_transform_armv7_neon (SHA512_STATE *hd, const unsigned char *data, - const u64 k[]); + const u64 k[], size_t num_blks); #endif #ifdef USE_SSSE3 @@ -587,12 +587,7 @@ transform (void *context, const unsigned char *data, size_t nblks) #ifdef USE_ARM_NEON_ASM if (ctx->use_neon) { - do - { - _gcry_sha512_transform_armv7_neon (&ctx->state, data, k); - data += 128; - } - while (--nblks); + _gcry_sha512_transform_armv7_neon (&ctx->state, data, k, nblks); /* _gcry_sha512_transform_armv7_neon does not store sensitive data * to stack. */ -- cgit v1.2.1