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
8TEXT ·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
18loop:
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
26done:
27	MOV	X14, X10
28	RET
29
30TEXT ·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
39loop:
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
47done:
48	MOV	X14, X10
49	RET
50