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