xref: /plan9/sys/src/libc/arm/strcmp.s (revision 6ca8a7e31df69aa273b57c9a8727a3aa1ead4d4b)
1*6ca8a7e3SDavid du ColombierTEXT strcmp(SB), $0
27dd7cddfSDavid du Colombier	MOVW	R0, R1
37dd7cddfSDavid du Colombier	MOVW	s2+4(FP), R2
47dd7cddfSDavid du Colombier
57dd7cddfSDavid du Colombier	MOVW	$0xFF, R3		/* mask */
67dd7cddfSDavid du Colombier
77dd7cddfSDavid du Colombier_align:					/* align s1 on 4 */
87dd7cddfSDavid du Colombier	TST	$3, R1
97dd7cddfSDavid du Colombier	BEQ	_aligned
107dd7cddfSDavid du Colombier
117dd7cddfSDavid du Colombier	MOVBU.P	1(R1), R4		/* implicit write back */
127dd7cddfSDavid du Colombier	MOVBU.P	1(R2), R8		/* implicit write back */
137dd7cddfSDavid du Colombier	SUB.S	R8, R4, R0
147dd7cddfSDavid du Colombier	BNE	_return
157dd7cddfSDavid du Colombier	CMP	$0, R4
167dd7cddfSDavid du Colombier	BEQ	_return
177dd7cddfSDavid du Colombier	B	_align
187dd7cddfSDavid du Colombier
197dd7cddfSDavid du Colombier_aligned:				/* is s2 now aligned? */
207dd7cddfSDavid du Colombier	TST	$3, R2
217dd7cddfSDavid du Colombier	BNE	_unaligned
227dd7cddfSDavid du Colombier
237dd7cddfSDavid du Colombier_aloop:
247dd7cddfSDavid du Colombier	MOVW.P	4(R1), R5		/* 4 at a time */
2551480713SDavid du Colombier	MOVW.P	4(R2), R7
267dd7cddfSDavid du Colombier
277dd7cddfSDavid du Colombier	AND	R5, R3, R4
2851480713SDavid du Colombier	AND	R7, R3, R8
297dd7cddfSDavid du Colombier	SUB.S	R8, R4, R0
307dd7cddfSDavid du Colombier	BNE	_return
317dd7cddfSDavid du Colombier	CMP	$0, R4
327dd7cddfSDavid du Colombier	BEQ	_return
337dd7cddfSDavid du Colombier
347dd7cddfSDavid du Colombier	AND	R5>>8, R3, R4
3551480713SDavid du Colombier	AND	R7>>8, R3, R8
367dd7cddfSDavid du Colombier	SUB.S	R8, R4, R0
377dd7cddfSDavid du Colombier	BNE	_return
387dd7cddfSDavid du Colombier	CMP	$0, R4
397dd7cddfSDavid du Colombier	BEQ	_return
407dd7cddfSDavid du Colombier
417dd7cddfSDavid du Colombier	AND	R5>>16, R3, R4
4251480713SDavid du Colombier	AND	R7>>16, R3, R8
437dd7cddfSDavid du Colombier	SUB.S	R8, R4, R0
447dd7cddfSDavid du Colombier	BNE	_return
457dd7cddfSDavid du Colombier	CMP	$0, R4
467dd7cddfSDavid du Colombier	BEQ	_return
477dd7cddfSDavid du Colombier
487dd7cddfSDavid du Colombier	AND	R5>>24, R3, R4
4951480713SDavid du Colombier	AND	R7>>24, R3, R8
507dd7cddfSDavid du Colombier	SUB.S	R8, R4, R0
517dd7cddfSDavid du Colombier	BNE	_return
527dd7cddfSDavid du Colombier	CMP	$0, R4
537dd7cddfSDavid du Colombier	BEQ	_return
547dd7cddfSDavid du Colombier
557dd7cddfSDavid du Colombier	B	_aloop
567dd7cddfSDavid du Colombier
577dd7cddfSDavid du Colombier_return:
587dd7cddfSDavid du Colombier	RET
597dd7cddfSDavid du Colombier
607dd7cddfSDavid du Colombier_unaligned:
617dd7cddfSDavid du Colombier	MOVBU.P	1(R1), R4		/* implicit write back */
627dd7cddfSDavid du Colombier	MOVBU.P	1(R2), R8		/* implicit write back */
637dd7cddfSDavid du Colombier	SUB.S	R8, R4, R0
647dd7cddfSDavid du Colombier	BNE	_return
657dd7cddfSDavid du Colombier	CMP	$0, R4
667dd7cddfSDavid du Colombier	BEQ	_return
677dd7cddfSDavid du Colombier	B	_unaligned
68