shithub: riscv

ref: e391b7ec8c0dc746a70725f3fc598def0419d1e6
dir: /sys/src/libc/riscv64/strchr.s/

View raw version
	TEXT	strchr(SB), $0
	MOV	R8, R10
	MOVBU	c+XLEN(FP), R11
	BEQ	R11, l2

/*
 * char is not null
 */
l1:
	MOVBU	(R10), R8
	ADD	$1, R10
	BEQ	R8, ret
	BNE	R8,R11, l1
	JMP	rm1

/*
 * char is null
 * align to word
 */
l2:
	AND	$3,R10, R8
	BEQ	R8, l3
	MOVBU	(R10), R8
	ADD	$1, R10
	BNE	R8, l2
	JMP	rm1

l3:
	MOVW	$0xff000000, R13
	MOVW	$0x00ff0000, R14
	MOVW	$0x0000ff00, R15

l4:
	MOVW	(R10), R12
	ADD	$4, R10
	AND	$0xff, R12, R8
	BEQ	R8, b0
	AND	R15, R12, R8
	BEQ	R8, b1
	AND	R14, R12, R8
	BEQ	R8, b2
	AND	R13, R12, R8
	BNE	R8, l4

rm1:
	ADD	$-1,R10, R8
	JMP	ret

b2:
	ADD	$-2,R10, R8
	JMP	ret

b1:
	ADD	$-3,R10, R8
	JMP	ret

b0:
	ADD	$-4,R10, R8
	JMP	ret

ret:
	RET