summaryrefslogtreecommitdiff
path: root/cipher/sha512.c
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@iki.fi>2013-12-17 15:35:38 +0200
committerJussi Kivilinna <jussi.kivilinna@iki.fi>2013-12-18 17:00:24 +0200
commitdf629ba53a662427ebd3ddca90c3fe9ddd6511d3 (patch)
tree0e383e4186907a3f607343c4ef39116118bc363f /cipher/sha512.c
parenta5c2bbfe0db515d739ab683297903c77b1eec124 (diff)
downloadlibgcrypt-df629ba53a662427ebd3ddca90c3fe9ddd6511d3.tar.gz
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 <jussi.kivilinna@iki.fi>
Diffstat (limited to 'cipher/sha512.c')
-rw-r--r--cipher/sha512.c9
1 files changed, 2 insertions, 7 deletions
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. */