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