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