xref: /plan9/sys/src/ape/lib/ap/arm/strcmp.s (revision 514807136a8518a9c368e175000825c6e1429f43)
12ddf2468SDavid du ColombierTEXT strcmp(SB), $-4
22ddf2468SDavid du Colombier	MOVW	R0, R1
32ddf2468SDavid du Colombier	MOVW	s2+4(FP), R2
42ddf2468SDavid du Colombier
52ddf2468SDavid du Colombier	MOVW	$0xFF, R3		/* mask */
62ddf2468SDavid du Colombier
72ddf2468SDavid du Colombier_align:					/* align s1 on 4 */
82ddf2468SDavid du Colombier	TST	$3, R1
92ddf2468SDavid du Colombier	BEQ	_aligned
102ddf2468SDavid du Colombier
112ddf2468SDavid du Colombier	MOVBU.P	1(R1), R4		/* implicit write back */
122ddf2468SDavid du Colombier	MOVBU.P	1(R2), R8		/* implicit write back */
132ddf2468SDavid du Colombier	SUB.S	R8, R4, R0
142ddf2468SDavid du Colombier	BNE	_return
152ddf2468SDavid du Colombier	CMP	$0, R4
162ddf2468SDavid du Colombier	BEQ	_return
172ddf2468SDavid du Colombier	B	_align
182ddf2468SDavid du Colombier
192ddf2468SDavid du Colombier_aligned:				/* is s2 now aligned? */
202ddf2468SDavid du Colombier	TST	$3, R2
212ddf2468SDavid du Colombier	BNE	_unaligned
222ddf2468SDavid du Colombier
232ddf2468SDavid du Colombier_aloop:
242ddf2468SDavid du Colombier	MOVW.P	4(R1), R5		/* 4 at a time */
25*51480713SDavid du Colombier	MOVW.P	4(R2), R7
262ddf2468SDavid du Colombier
272ddf2468SDavid du Colombier	AND	R5, R3, R4
28*51480713SDavid du Colombier	AND	R7, R3, R8
292ddf2468SDavid du Colombier	SUB.S	R8, R4, R0
302ddf2468SDavid du Colombier	BNE	_return
312ddf2468SDavid du Colombier	CMP	$0, R4
322ddf2468SDavid du Colombier	BEQ	_return
332ddf2468SDavid du Colombier
342ddf2468SDavid du Colombier	AND	R5>>8, R3, R4
35*51480713SDavid du Colombier	AND	R7>>8, R3, R8
362ddf2468SDavid du Colombier	SUB.S	R8, R4, R0
372ddf2468SDavid du Colombier	BNE	_return
382ddf2468SDavid du Colombier	CMP	$0, R4
392ddf2468SDavid du Colombier	BEQ	_return
402ddf2468SDavid du Colombier
412ddf2468SDavid du Colombier	AND	R5>>16, R3, R4
42*51480713SDavid du Colombier	AND	R7>>16, R3, R8
432ddf2468SDavid du Colombier	SUB.S	R8, R4, R0
442ddf2468SDavid du Colombier	BNE	_return
452ddf2468SDavid du Colombier	CMP	$0, R4
462ddf2468SDavid du Colombier	BEQ	_return
472ddf2468SDavid du Colombier
482ddf2468SDavid du Colombier	AND	R5>>24, R3, R4
49*51480713SDavid du Colombier	AND	R7>>24, R3, R8
502ddf2468SDavid du Colombier	SUB.S	R8, R4, R0
512ddf2468SDavid du Colombier	BNE	_return
522ddf2468SDavid du Colombier	CMP	$0, R4
532ddf2468SDavid du Colombier	BEQ	_return
542ddf2468SDavid du Colombier
552ddf2468SDavid du Colombier	B	_aloop
562ddf2468SDavid du Colombier
572ddf2468SDavid du Colombier_return:
582ddf2468SDavid du Colombier	RET
592ddf2468SDavid du Colombier
602ddf2468SDavid du Colombier_unaligned:
612ddf2468SDavid du Colombier	MOVBU.P	1(R1), R4		/* implicit write back */
622ddf2468SDavid du Colombier	MOVBU.P	1(R2), R8		/* implicit write back */
632ddf2468SDavid du Colombier	SUB.S	R8, R4, R0
642ddf2468SDavid du Colombier	BNE	_return
652ddf2468SDavid du Colombier	CMP	$0, R4
662ddf2468SDavid du Colombier	BEQ	_return
672ddf2468SDavid du Colombier	B	_unaligned
68