summaryrefslogtreecommitdiff
path: root/sys/src/ape/lib/ap/mips/memchr.s
blob: 5d1c3cc852344d2eb8287589d098bb58d1ed80a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
	TEXT	memchr(SB), $0
MOVW R1, 0(FP)

	MOVW	n+8(FP), R1
	MOVW	s1+0(FP), R2
	MOVBU	c+7(FP), R3
	ADDU	R1, R2, R6

	AND	$(~1), R1, R5
	ADDU	R2, R5
	BEQ	R2, R5, lt2

l1:
	MOVBU	0(R2), R4
	MOVBU	1(R2), R7
	BEQ	R3, R4, eq0
	ADDU	$2, R2
	BEQ	R3, R7, eq
	BNE	R2, R5, l1

lt2:
	BEQ	R2, R6, zret

l2:
	MOVBU	(R2), R4
	ADDU	$1, R2
	BEQ	R3, R4, eq
	BNE	R2, R6, l2
zret:
	MOVW	R0, R1
	RET

eq0:
	MOVW	R2, R1
	RET

eq:
	SUBU	$1,R2, R1
	RET