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