mirror of
https://github.com/golang/go
synced 2024-11-17 15:04:45 -07:00
internal/bytealg: share code for IndexByte functions on arm
Move the shared code of IndexByte and IndexByteString into indexbytebody. This will allow to implement optimizations (e.g. for #29001) in a single function. Change-Id: I1d550da8eb65f95e492a460a12058cc35b1162b6 Reviewed-on: https://go-review.googlesource.com/c/go/+/167939 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
bedb6a18d8
commit
3496ff1d19
@ -9,46 +9,38 @@ TEXT ·IndexByte(SB),NOSPLIT,$0-20
|
||||
MOVW b_base+0(FP), R0
|
||||
MOVW b_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, ret+16(FP)
|
||||
RET
|
||||
|
||||
_notfound:
|
||||
MOVW $-1, R0
|
||||
MOVW R0, ret+16(FP)
|
||||
RET
|
||||
MOVW $ret+16(FP), R5
|
||||
B indexbytebody<>(SB)
|
||||
|
||||
TEXT ·IndexByteString(SB),NOSPLIT,$0-16
|
||||
MOVW s_base+0(FP), R0
|
||||
MOVW s_len+4(FP), R1
|
||||
MOVBU c+8(FP), R2 // byte to find
|
||||
MOVW $ret+12(FP), R5
|
||||
B indexbytebody<>(SB)
|
||||
|
||||
// input:
|
||||
// R0: data
|
||||
// R1: data length
|
||||
// R2: byte to find
|
||||
// R5: address to put result
|
||||
TEXT indexbytebody<>(SB),NOSPLIT,$0-0
|
||||
MOVW R0, R4 // store base for later
|
||||
ADD R0, R1 // end
|
||||
|
||||
_sib_loop:
|
||||
loop:
|
||||
CMP R0, R1
|
||||
B.EQ _sib_notfound
|
||||
B.EQ notfound
|
||||
MOVBU.P 1(R0), R3
|
||||
CMP R2, R3
|
||||
B.NE _sib_loop
|
||||
B.NE loop
|
||||
|
||||
SUB $1, R0 // R0 will be one beyond the position we want
|
||||
SUB R4, R0 // remove base
|
||||
MOVW R0, ret+12(FP)
|
||||
MOVW R0, (R5)
|
||||
RET
|
||||
|
||||
_sib_notfound:
|
||||
notfound:
|
||||
MOVW $-1, R0
|
||||
MOVW R0, ret+12(FP)
|
||||
MOVW R0, (R5)
|
||||
RET
|
||||
|
Loading…
Reference in New Issue
Block a user