diff options
Diffstat (limited to 'src/internal/bytealg/count_riscv64.s')
-rw-r--r-- | src/internal/bytealg/count_riscv64.s | 69 |
1 files changed, 45 insertions, 24 deletions
diff --git a/src/internal/bytealg/count_riscv64.s b/src/internal/bytealg/count_riscv64.s index 3f4eb23286..1e081e2c8c 100644 --- a/src/internal/bytealg/count_riscv64.s +++ b/src/internal/bytealg/count_riscv64.s @@ -5,40 +5,61 @@ #include "go_asm.h" #include "textflag.h" -TEXT ·Count(SB),NOSPLIT,$0-40 - MOV b_base+0(FP), A1 - MOV b_len+8(FP), A2 - MOVBU c+24(FP), A3 // byte to count - MOV ZERO, A4 // count - ADD A1, A2 // end +TEXT ·Count<ABIInternal>(SB),NOSPLIT,$0-40 +#ifndef GOEXPERIMENT_regabiargs + MOV b_base+0(FP), X10 + MOV b_len+8(FP), X11 + MOVBU c+24(FP), X12 // byte to count +#else + // X10 = b_base + // X11 = b_len + // X12 = b_cap (unused) + // X13 = byte to count (want in X12) + MOV X13, X12 +#endif + MOV ZERO, X14 // count + ADD X10, X11 // end loop: - BEQ A1, A2, done - MOVBU (A1), A5 - ADD $1, A1 - BNE A3, A5, loop - ADD $1, A4 + BEQ X10, X11, done + MOVBU (X10), X15 + ADD $1, X10 + BNE X12, X15, loop + ADD $1, X14 JMP loop done: - MOV A4, ret+32(FP) +#ifndef GOEXPERIMENT_regabiargs + MOV X14, ret+32(FP) +#else + MOV X14, X10 +#endif RET -TEXT ·CountString(SB),NOSPLIT,$0-32 - MOV s_base+0(FP), A1 - MOV s_len+8(FP), A2 - MOVBU c+16(FP), A3 // byte to count - MOV ZERO, A4 // count - ADD A1, A2 // end +TEXT ·CountString<ABIInternal>(SB),NOSPLIT,$0-32 +#ifndef GOEXPERIMENT_regabiargs + MOV s_base+0(FP), X10 + MOV s_len+8(FP), X11 + MOVBU c+16(FP), X12 // byte to count +#endif + // X10 = s_base + // X11 = s_len + // X12 = byte to count + MOV ZERO, X14 // count + ADD X10, X11 // end loop: - BEQ A1, A2, done - MOVBU (A1), A5 - ADD $1, A1 - BNE A3, A5, loop - ADD $1, A4 + BEQ X10, X11, done + MOVBU (X10), X15 + ADD $1, X10 + BNE X12, X15, loop + ADD $1, X14 JMP loop done: - MOV A4, ret+24(FP) +#ifndef GOEXPERIMENT_regabiargs + MOV X14, ret+24(FP) +#else + MOV X14, X10 +#endif RET |