-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcount_mips64x.s
52 lines (44 loc) · 881 Bytes
/
count_mips64x.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// Copyright 2025 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build mips64 || mips64le
#include "go_asm.h"
#include "textflag.h"
TEXT ·Count(SB),NOSPLIT,$0-40
// R1 = b_base
// R2 = b_len
// R3 = byte to count
MOVV b_base+0(FP), R1
MOVV b_len+8(FP), R2
MOVBU c+24(FP), R3
MOVV R0, R5 // count
ADDV R1, R2 // end
loop:
BEQ R1, R2, done
MOVBU (R1), R6
ADDV $1, R1
BNE R3, R6, loop
ADDV $1, R5
JMP loop
done:
MOVV R5, ret+32(FP)
RET
TEXT ·CountString(SB),NOSPLIT,$0-32
// R1 = s_base
// R2 = s_len
// R3 = byte to count
MOVV s_base+0(FP), R1
MOVV s_len+8(FP), R2
MOVBU c+16(FP), R3
MOVV R0, R5 // count
ADDV R1, R2 // end
loop:
BEQ R1, R2, done
MOVBU (R1), R6
ADDV $1, R1
BNE R3, R6, loop
ADDV $1, R5
JMP loop
done:
MOVV R5, ret+24(FP)
RET