xref: /plan9-contrib/sys/src/ape/lib/ap/riscv/strchr.s (revision ce95e1b3727b9cb1c223ffbed69aff21a8ced255)
1	TEXT	strchr(SB), $0
2	MOVBU	c+4(FP), R11
3	MOVW	R8, R10
4
5	BEQ	R11, l2
6
7/*
8 * char is not null
9 */
10l1:
11	MOVBU	(R10), R8
12	ADD	$1, R10
13	BEQ	R8, ret
14	BNE	R8,R11, l1
15	JMP	rm1
16
17/*
18 * char is null
19 * align to word
20 */
21l2:
22	AND	$3,R10, R8
23	BEQ	R8, l3
24	MOVBU	(R10), R8
25	ADD	$1, R10
26	BNE	R8, l2
27	JMP	rm1
28
29l3:
30	MOVW	$0xff000000, R13
31	MOVW	$0x00ff0000, R14
32	MOVW	$0x0000ff00, R15
33
34l4:
35	MOVW	(R10), R12
36	ADD	$4, R10
37	AND	$0xff, R12, R8
38	BEQ	R8, b0
39	AND	R15, R12, R8
40	BEQ	R8, b1
41	AND	R14, R12, R8
42	BEQ	R8, b2
43	AND	R13, R12, R8
44	BNE	R8, l4
45
46rm1:
47	ADD	$-1,R10, R8
48	JMP	ret
49
50b2:
51	ADD	$-2,R10, R8
52	JMP	ret
53
54b1:
55	ADD	$-3,R10, R8
56	JMP	ret
57
58b0:
59	ADD	$-4,R10, R8
60	JMP	ret
61
62ret:
63	RET
64