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