diff options
author | Andy Polyakov <appro@openssl.org> | 2016-05-15 15:37:46 +0200 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2016-05-16 22:21:17 +0200 |
commit | 6133b4edbd12266ef9ccc3cbbfc0d5bb56e0d481 (patch) | |
tree | ffce8ed4fe8d63079e5257eedcc6652d0a96f684 /crypto | |
parent | a7f9e0a45f5f35a5fe318461aa03b4afe944af74 (diff) |
ARMv8 assembly pack: add OPENSSL_cleanse.
Reviewed-by: Richard Levitte <levitte@openssl.org>
Diffstat (limited to 'crypto')
-rwxr-xr-x | crypto/arm64cpuid.pl | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/crypto/arm64cpuid.pl b/crypto/arm64cpuid.pl index b9501ebea8..c0af608142 100755 --- a/crypto/arm64cpuid.pl +++ b/crypto/arm64cpuid.pl @@ -69,6 +69,37 @@ _armv8_pmull_probe: pmull v0.1q, v0.1d, v0.1d ret .size _armv8_pmull_probe,.-_armv8_pmull_probe + +.globl OPENSSL_cleanse +.type OPENSSL_cleanse,%function +.align 5 +OPENSSL_cleanse: + cbz x1,.Lret // len==0? + cmp x1,#15 + b.hi .Lot // len>15 + nop +.Little: + strb wzr,[x0],#1 // store byte-by-byte + subs x1,x1,#1 + b.ne .Little +.Lret: ret + +.align 4 +.Lot: tst x0,#7 + b.eq .Laligned // inp is aligned + strb wzr,[x0],#1 // store byte-by-byte + sub x1,x1,#1 + b .Lot + +.align 4 +.Laligned: + str xzr,[x0],#8 // store word-by-word + sub x1,x1,#8 + tst x1,#-8 + b.ne .Laligned // len>=8 + cbnz x1,.Little // len!=0? + ret +.size OPENSSL_cleanse,.-OPENSSL_cleanse ___ print $code; |