diff options
author | Andy Polyakov <appro@openssl.org> | 2007-05-14 21:35:25 +0000 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2007-05-14 21:35:25 +0000 |
commit | b2dba9bf1f8f73376b9c1f0904a86996c728b236 (patch) | |
tree | 8848a4f5efdf02d841b1ebea4969d879d6e61eb5 /crypto/sparccpuid.S | |
parent | 932cc129ee61f5b72636eee6a7c3268e23967f7b (diff) |
Profiling revealed that OPENSSL_cleanse consumes *more* CPU time than
sha1_block_data_order when hashing short messages. Move OPENSSL_cleanse
to "cpuid" assembler module and gain 2x.
Diffstat (limited to 'crypto/sparccpuid.S')
-rw-r--r-- | crypto/sparccpuid.S | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/crypto/sparccpuid.S b/crypto/sparccpuid.S index 52308abca6..f691abc57f 100644 --- a/crypto/sparccpuid.S +++ b/crypto/sparccpuid.S @@ -232,6 +232,54 @@ _sparcv9_rdtick: .type _sparcv9_rdtick,#function .size _sparcv9_rdtick,.-_sparcv9_rdtick +.global OPENSSL_cleanse +.align 32 +OPENSSL_cleanse: + cmp %o1,6 + nop +#ifdef ABI64 + bgu %xcc,.Lot +#else + bgu .Lot +#endif + nop + +.Little: + stb %g0,[%o0] + subcc %o1,1,%o1 + bnz .Little + add %o0,1,%o0 + retl + nop +.align 32 +.Lot: + andcc %o0,3,%g0 + bz .Laligned + nop + stb %g0,[%o0] + sub %o1,1,%o1 + ba .Lot + add %o0,1,%o0 + nop +.Laligned: + st %g0,[%o0] + sub %o1,4,%o1 + andcc %o1,-4,%g0 +#ifdef ABI64 + bnz %xcc,.Laligned +#else + bnz .Laligned +#endif + add %o0,4,%o0 + + cmp %o1,0 + bne .Little + nop + retl + nop +.type OPENSSL_cleanse,#function +.size OPENSSL_cleanse,.-OPENSSL_cleanse + .section ".init",#alloc,#execinstr call OPENSSL_cpuid_setup nop |