summaryrefslogtreecommitdiff
path: root/crypto/sparccpuid.S
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2016-05-15 17:01:15 +0200
committerAndy Polyakov <appro@openssl.org>2016-05-19 22:33:00 +0200
commite33826f01bd78af76e0135c8dfab3387927a82bb (patch)
treea44459e3859610fe7ce35bc4923d8af6d6110e09 /crypto/sparccpuid.S
parent2e6d7799ffc47604d06e0465afeb84b91aff8006 (diff)
downloadopenssl-new-e33826f01bd78af76e0135c8dfab3387927a82bb.tar.gz
Add assembly CRYPTO_memcmp.
GH: #102 Reviewed-by: Richard Levitte <levitte@openssl.org>
Diffstat (limited to 'crypto/sparccpuid.S')
-rw-r--r--crypto/sparccpuid.S34
1 files changed, 34 insertions, 0 deletions
diff --git a/crypto/sparccpuid.S b/crypto/sparccpuid.S
index 6f1dded8e2..f48d860159 100644
--- a/crypto/sparccpuid.S
+++ b/crypto/sparccpuid.S
@@ -440,6 +440,40 @@ OPENSSL_cleanse:
.type OPENSSL_cleanse,#function
.size OPENSSL_cleanse,.-OPENSSL_cleanse
+.global CRYPTO_memcmp
+.align 16
+CRYPTO_memcmp:
+ cmp %o2,0
+#ifdef ABI64
+ beq,pn %xcc,.Lno_data
+#else
+ beq .Lno_data
+#endif
+ xor %g1,%g1,%g1
+ nop
+
+.Loop_cmp:
+ ldub [%o0],%o3
+ add %o0,1,%o0
+ ldub [%o1],%o4
+ add %o1,1,%o1
+ subcc %o2,1,%o2
+ xor %o3,%o4,%o4
+#ifdef ABI64
+ bnz %xcc,.Loop_cmp
+#else
+ bnz .Loop_cmp
+#endif
+ or %o4,%g1,%g1
+
+ sub %g0,%g1,%g1
+ srl %g1,31,%g1
+.Lno_data:
+ retl
+ mov %g1,%o0
+.type CRYPTO_memcmp,#function
+.size CRYPTO_memcmp,.-CRYPTO_memcmp
+
.global _sparcv9_vis1_instrument_bus
.align 8
_sparcv9_vis1_instrument_bus: