From 1135b9d6718b1095775460c0903ee831374738fd Mon Sep 17 00:00:00 2001 From: Dave Cheney Date: Mon, 24 Aug 2015 15:07:58 +1000 Subject: [PATCH] runtime: check pointer equality in arm cmpbody 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 --- src/runtime/asm_arm.s | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/runtime/asm_arm.s b/src/runtime/asm_arm.s index 9c32e42afd..06591276d9 100644 --- a/src/runtime/asm_arm.s +++ b/src/runtime/asm_arm.s @@ -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) -- 2.48.1