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