...
1// Copyright 2022 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5#include "go_asm.h"
6#include "textflag.h"
7
8TEXT ·IndexByte<ABIInternal>(SB),NOSPLIT,$0-40
9#ifndef GOEXPERIMENT_regabiargs
10 MOVV b_base+0(FP), R4
11 MOVV b_len+8(FP), R5
12 MOVBU c+24(FP), R7 // byte to find
13#endif
14 // R4 = b_base
15 // R5 = b_len
16 // R6 = b_cap (unused)
17 // R7 = byte to find
18 AND $0xff, R7
19 MOVV R4, R6 // store base for later
20 ADDV R4, R5 // end
21 ADDV $-1, R4
22
23 PCALIGN $16
24loop:
25 ADDV $1, R4
26 BEQ R4, R5, notfound
27 MOVBU (R4), R8
28 BNE R7, R8, loop
29
30 SUBV R6, R4 // remove base
31#ifndef GOEXPERIMENT_regabiargs
32 MOVV R4, ret+32(FP)
33#endif
34 RET
35
36notfound:
37 MOVV $-1, R4
38#ifndef GOEXPERIMENT_regabiargs
39 MOVV R4, ret+32(FP)
40#endif
41 RET
42
43TEXT ·IndexByteString<ABIInternal>(SB),NOSPLIT,$0-32
44#ifndef GOEXPERIMENT_regabiargs
45 MOVV s_base+0(FP), R4
46 MOVV s_len+8(FP), R5
47 MOVBU c+16(FP), R6 // byte to find
48#endif
49 // R4 = s_base
50 // R5 = s_len
51 // R6 = byte to find
52 MOVV R4, R7 // store base for later
53 ADDV R4, R5 // end
54 ADDV $-1, R4
55
56 PCALIGN $16
57loop:
58 ADDV $1, R4
59 BEQ R4, R5, notfound
60 MOVBU (R4), R8
61 BNE R6, R8, loop
62
63 SUBV R7, R4 // remove base
64#ifndef GOEXPERIMENT_regabiargs
65 MOVV R4, ret+24(FP)
66#endif
67 RET
68
69notfound:
70 MOVV $-1, R4
71#ifndef GOEXPERIMENT_regabiargs
72 MOVV R4, ret+24(FP)
73#endif
74 RET
View as plain text