diff options
author | Andy Polyakov <appro@openssl.org> | 2018-05-20 12:13:16 +0200 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2018-06-03 21:15:18 +0200 |
commit | 9a708bf982da1d2c9739339d16d7b021da955e00 (patch) | |
tree | df89472c5fd490b136366a612dae57acb7147cbe /crypto/arm64cpuid.pl | |
parent | c1b2569d234c1247d2a7a3338ca4568bc0a489a5 (diff) |
{arm64|x86_64}cpuid.pl: add special 16-byte case to OPENSSL_memcmp.
OPENSSL_memcmp is a must in GCM decrypt and general-purpose loop takes
quite a portion of execution time for short inputs, more than GHASH for
few-byte inputs according to profiler. Special 16-byte case takes it off
top five list in profiler output.
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6312)
Diffstat (limited to 'crypto/arm64cpuid.pl')
-rwxr-xr-x | crypto/arm64cpuid.pl | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/crypto/arm64cpuid.pl b/crypto/arm64cpuid.pl index daa2b17ada..06c8add7a0 100755 --- a/crypto/arm64cpuid.pl +++ b/crypto/arm64cpuid.pl @@ -115,6 +115,19 @@ OPENSSL_cleanse: CRYPTO_memcmp: eor w3,w3,w3 cbz x2,.Lno_data // len==0? + cmp x2,#16 + b.ne .Loop_cmp + ldp x8,x9,[x0] + ldp x10,x11,[x1] + eor x8,x8,x10 + eor x9,x9,x11 + orr x8,x8,x9 + mov x0,#1 + cmp x8,#0 + csel x0,xzr,x0,eq + ret + +.align 4 .Loop_cmp: ldrb w4,[x0],#1 ldrb w5,[x1],#1 |