github.com/bir3/gocompiler@v0.9.2202/src/internal/bytealg/count_riscv64.s (about) 1 // Copyright 2020 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 ·Count<ABIInternal>(SB),NOSPLIT,$0-40 9 // X10 = b_base 10 // X11 = b_len 11 // X12 = b_cap (unused) 12 // X13 = byte to count (want in X12) 13 AND $0xff, X13, X12 14 MOV ZERO, X14 // count 15 ADD X10, X11 // end 16 17 PCALIGN $16 18 loop: 19 BEQ X10, X11, done 20 MOVBU (X10), X15 21 ADD $1, X10 22 BNE X12, X15, loop 23 ADD $1, X14 24 JMP loop 25 26 done: 27 MOV X14, X10 28 RET 29 30 TEXT ·CountString<ABIInternal>(SB),NOSPLIT,$0-32 31 // X10 = s_base 32 // X11 = s_len 33 // X12 = byte to count 34 AND $0xff, X12 35 MOV ZERO, X14 // count 36 ADD X10, X11 // end 37 38 PCALIGN $16 39 loop: 40 BEQ X10, X11, done 41 MOVBU (X10), X15 42 ADD $1, X10 43 BNE X12, X15, loop 44 ADD $1, X14 45 JMP loop 46 47 done: 48 MOV X14, X10 49 RET