github.com/sandwichdev/go-internals@v0.0.0-20210605002614-12311ac6b2c5/bytealg/indexbyte_mips64x.s (about) 1 // Copyright 2018 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 // +build mips64 mips64le 6 7 #include "go_asm.h" 8 #include "textflag.h" 9 10 TEXT ·IndexByte(SB),NOSPLIT,$0-40 11 MOVV b_base+0(FP), R1 12 MOVV b_len+8(FP), R2 13 MOVBU c+24(FP), R3 // byte to find 14 MOVV R1, R4 // store base for later 15 ADDV R1, R2 // end 16 ADDV $-1, R1 17 18 loop: 19 ADDV $1, R1 20 BEQ R1, R2, notfound 21 MOVBU (R1), R5 22 BNE R3, R5, loop 23 24 SUBV R4, R1 // remove base 25 MOVV R1, ret+32(FP) 26 RET 27 28 notfound: 29 MOVV $-1, R1 30 MOVV R1, ret+32(FP) 31 RET 32 33 TEXT ·IndexByteString(SB),NOSPLIT,$0-32 34 MOVV s_base+0(FP), R1 35 MOVV s_len+8(FP), R2 36 MOVBU c+16(FP), R3 // byte to find 37 MOVV R1, R4 // store base for later 38 ADDV R1, R2 // end 39 ADDV $-1, R1 40 41 loop: 42 ADDV $1, R1 43 BEQ R1, R2, notfound 44 MOVBU (R1), R5 45 BNE R3, R5, loop 46 47 SUBV R4, R1 // remove base 48 MOVV R1, ret+24(FP) 49 RET 50 51 notfound: 52 MOVV $-1, R1 53 MOVV R1, ret+24(FP) 54 RET