]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: check pointer equality in arm cmpbody
authorDave Cheney <dave@cheney.net>
Mon, 24 Aug 2015 05:07:58 +0000 (15:07 +1000)
committerDave Cheney <dave@cheney.net>
Mon, 24 Aug 2015 21:18:33 +0000 (21:18 +0000)
Updates #11336

Follow the lead of amd64 do a pointer equality check
before comparing string/byte contents on arm.

BenchmarkCompareBytesEqual-4               208             211             +1.44%
BenchmarkCompareBytesToNil-4               83.6            81.8            -2.15%
BenchmarkCompareBytesEmpty-4               80.2            75.2            -6.23%
BenchmarkCompareBytesIdentical-4           208             75.2            -63.85%
BenchmarkCompareBytesSameLength-4          126             128             +1.59%
BenchmarkCompareBytesDifferentLength-4     128             130             +1.56%
BenchmarkCompareBytesBigUnaligned-4        14192804        14060971        -0.93%
BenchmarkCompareBytesBig-4                 12277313        12128193        -1.21%
BenchmarkCompareBytesBigIdentical-4        9385046         78.5            -100.00%

Change-Id: I5b24620018688c5fe04b6ff6743a24c4ce225788
Reviewed-on: https://go-review.googlesource.com/13881
Reviewed-by: Keith Randall <khr@golang.org>
src/runtime/asm_arm.s

index 9c32e42afd701148e16f8491b07bfb0e650f2779..06591276d9641aaf9653f5e85ad4c3af976f6d78 100644 (file)
@@ -862,6 +862,8 @@ TEXT bytes·Compare(SB),NOSPLIT,$-4-28
 // On exit:
 // R4, R5, and R6 are clobbered
 TEXT runtime·cmpbody(SB),NOSPLIT,$-4-0
+       CMP     R2, R3
+       BEQ     samebytes
        CMP     R0, R1
        MOVW    R0, R6
        MOVW.LT R1, R6  // R6 is min(R0, R1)