xref: /inferno-os/libkern/strchr-mips.s (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth	TEXT	strchr(SB), $0
2*37da2899SCharles.ForsythMOVW R1, 0(FP)
3*37da2899SCharles.Forsyth	MOVB	c+7(FP), R4
4*37da2899SCharles.Forsyth	MOVW	s+0(FP), R3
5*37da2899SCharles.Forsyth
6*37da2899SCharles.Forsyth	BEQ	R4, l2
7*37da2899SCharles.Forsyth
8*37da2899SCharles.Forsyth/*
9*37da2899SCharles.Forsyth * char is not null
10*37da2899SCharles.Forsyth */
11*37da2899SCharles.Forsythl1:
12*37da2899SCharles.Forsyth	MOVB	(R3), R1
13*37da2899SCharles.Forsyth	ADDU	$1, R3
14*37da2899SCharles.Forsyth	BEQ	R1, ret
15*37da2899SCharles.Forsyth	BNE	R1,R4, l1
16*37da2899SCharles.Forsyth	JMP	rm1
17*37da2899SCharles.Forsyth
18*37da2899SCharles.Forsyth/*
19*37da2899SCharles.Forsyth * char is null
20*37da2899SCharles.Forsyth * align to word
21*37da2899SCharles.Forsyth */
22*37da2899SCharles.Forsythl2:
23*37da2899SCharles.Forsyth	AND	$3,R3, R1
24*37da2899SCharles.Forsyth	BEQ	R1, l3
25*37da2899SCharles.Forsyth	MOVB	(R3), R1
26*37da2899SCharles.Forsyth	ADDU	$1, R3
27*37da2899SCharles.Forsyth	BNE	R1, l2
28*37da2899SCharles.Forsyth	JMP	rm1
29*37da2899SCharles.Forsyth
30*37da2899SCharles.Forsythl3:
31*37da2899SCharles.Forsyth	MOVW	$0xff000000, R6
32*37da2899SCharles.Forsyth	MOVW	$0x00ff0000, R7
33*37da2899SCharles.Forsyth
34*37da2899SCharles.Forsythl4:
35*37da2899SCharles.Forsyth	MOVW	(R3), R5
36*37da2899SCharles.Forsyth	ADDU	$4, R3
37*37da2899SCharles.Forsyth	AND	R6,R5, R1
38*37da2899SCharles.Forsyth	AND	R7,R5, R2
39*37da2899SCharles.Forsyth	BEQ	R1, b0
40*37da2899SCharles.Forsyth	AND	$0xff00,R5, R1
41*37da2899SCharles.Forsyth	BEQ	R2, b1
42*37da2899SCharles.Forsyth	AND	$0xff,R5, R2
43*37da2899SCharles.Forsyth	BEQ	R1, b2
44*37da2899SCharles.Forsyth	BNE	R2, l4
45*37da2899SCharles.Forsyth
46*37da2899SCharles.Forsythrm1:
47*37da2899SCharles.Forsyth	ADDU	$-1,R3, R1
48*37da2899SCharles.Forsyth	JMP	ret
49*37da2899SCharles.Forsyth
50*37da2899SCharles.Forsythb2:
51*37da2899SCharles.Forsyth	ADDU	$-2,R3, R1
52*37da2899SCharles.Forsyth	JMP	ret
53*37da2899SCharles.Forsyth
54*37da2899SCharles.Forsythb1:
55*37da2899SCharles.Forsyth	ADDU	$-3,R3, R1
56*37da2899SCharles.Forsyth	JMP	ret
57*37da2899SCharles.Forsyth
58*37da2899SCharles.Forsythb0:
59*37da2899SCharles.Forsyth	ADDU	$-4,R3, R1
60*37da2899SCharles.Forsyth	JMP	ret
61*37da2899SCharles.Forsyth
62*37da2899SCharles.Forsythret:
63*37da2899SCharles.Forsyth	RET
64