mirror of
https://github.com/golang/go
synced 2024-11-25 09:07:58 -07:00
bytes: add assembly version of IndexByte for ARM
benchmark old ns/op new ns/op delta BenchmarkIndexByte32 459 126 -72.55% BenchmarkIndexByte4K 52404 10939 -79.13% BenchmarkIndexByte4M 54470800 11177370 -79.48% BenchmarkIndexByte64M 1010803000 178860500 -82.31% benchmark old MB/s new MB/s speedup BenchmarkIndexByte32 69.58 252.63 3.63x BenchmarkIndexByte4K 78.16 374.42 4.79x BenchmarkIndexByte4M 77.00 375.25 4.87x BenchmarkIndexByte64M 66.39 375.20 5.65x R=rsc, minux.ma CC=golang-dev https://golang.org/cl/6106044
This commit is contained in:
parent
97a7defed4
commit
0681b13437
@ -2,10 +2,29 @@
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// no memchr implementation on arm yet
|
||||
TEXT ·IndexByte(SB),7,$0
|
||||
B ·indexBytePortable(SB)
|
||||
MOVW base+0(FP), R0
|
||||
MOVW len+4(FP), R1
|
||||
MOVBU c+12(FP), R2 // byte to find
|
||||
MOVW R0, R4 // store base for later
|
||||
ADD R0, R1 // end
|
||||
|
||||
_loop:
|
||||
CMP R0, R1
|
||||
B.EQ _notfound
|
||||
MOVBU.P 1(R0), R3
|
||||
CMP R2, R3
|
||||
B.NE _loop
|
||||
|
||||
SUB $1, R0 // R0 will be one beyond the position we want
|
||||
SUB R4, R0 // remove base
|
||||
MOVW R0, index+16(FP)
|
||||
RET
|
||||
|
||||
_notfound:
|
||||
MOVW $-1, R0
|
||||
MOVW R0, index+16(FP)
|
||||
RET
|
||||
|
||||
// no memcmp implementation on arm yet
|
||||
TEXT ·Equal(SB),7,$0
|
||||
B ·equalPortable(SB)
|
||||
|
Loading…
Reference in New Issue
Block a user