xref: /plan9/sys/src/ape/lib/ap/sparc/strchr.s (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1	TEXT	strchr(SB), $0
2
3MOVW	R7, 0(FP)
4	MOVB	c+7(FP), R10
5	MOVW	s+0(FP), R9
6
7	SUBCC	R0,R10, R0
8	BE	l2
9
10/*
11 * char is not null
12 */
13l1:
14	MOVB	(R9), R7
15	ADD	$1, R9
16	SUBCC	R0,R7, R0
17	BE	ret
18	SUBCC	R7,R10, R0
19	BNE	l1
20	JMP	rm1
21
22/*
23 * char is null
24 * align to word
25 */
26l2:
27	ANDCC	$3,R9, R0
28	BE	l3
29	MOVB	(R9), R7
30	ADD	$1, R9
31	SUBCC	R0,R7, R0
32	BNE	l2
33	JMP	rm1
34
35/*
36 * develop byte masks
37 */
38l3:
39	MOVW	$0xff, R17
40	SLL	$8,R17, R16
41	SLL	$16,R17, R13
42	SLL	$24,R17, R12
43
44l4:
45	MOVW	(R9), R11
46	ADD	$4, R9
47	ANDCC	R12,R11, R0
48	BE	b0
49	ANDCC	R13,R11, R0
50	BE	b1
51	ANDCC	R16,R11, R0
52	BE	b2
53	ANDCC	R17,R11, R0
54	BNE	l4
55
56rm1:
57	SUB	$1,R9, R7
58	JMP	ret
59
60b2:
61	SUB	$2,R9, R7
62	JMP	ret
63
64b1:
65	SUB	$3,R9, R7
66	JMP	ret
67
68b0:
69	SUB	$4,R9, R7
70	JMP	ret
71
72ret:
73	RETURN
74