github.com/bir3/gocompiler@v0.9.2202/src/internal/bytealg/indexbyte_loong64.s (about) 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 8 TEXT ·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 24 loop: 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 36 notfound: 37 MOVV $-1, R4 38 #ifndef GOEXPERIMENT_regabiargs 39 MOVV R4, ret+32(FP) 40 #endif 41 RET 42 43 TEXT ·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 57 loop: 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 69 notfound: 70 MOVV $-1, R4 71 #ifndef GOEXPERIMENT_regabiargs 72 MOVV R4, ret+24(FP) 73 #endif 74 RET