Commit 0681b134 authored by Dave Cheney's avatar Dave Cheney

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
parent 97a7defe
......@@ -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)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment