xref: /inferno-os/libkern/strchr-mips.s (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1	TEXT	strchr(SB), $0
2MOVW R1, 0(FP)
3	MOVB	c+7(FP), R4
4	MOVW	s+0(FP), R3
5
6	BEQ	R4, l2
7
8/*
9 * char is not null
10 */
11l1:
12	MOVB	(R3), R1
13	ADDU	$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	ADDU	$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	ADDU	$4, R3
37	AND	R6,R5, R1
38	AND	R7,R5, R2
39	BEQ	R1, b0
40	AND	$0xff00,R5, R1
41	BEQ	R2, b1
42	AND	$0xff,R5, R2
43	BEQ	R1, b2
44	BNE	R2, l4
45
46rm1:
47	ADDU	$-1,R3, R1
48	JMP	ret
49
50b2:
51	ADDU	$-2,R3, R1
52	JMP	ret
53
54b1:
55	ADDU	$-3,R3, R1
56	JMP	ret
57
58b0:
59	ADDU	$-4,R3, R1
60	JMP	ret
61
62ret:
63	RET
64