xref: /plan9/sys/src/ape/lib/ap/386/memcmp.s (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier	TEXT	memcmp(SB),$0
2*219b2ee8SDavid du Colombier
3*219b2ee8SDavid du Colombier	MOVL	n+8(FP), BX
4*219b2ee8SDavid du Colombier	CMPL	BX, $0
5*219b2ee8SDavid du Colombier	JEQ	none
6*219b2ee8SDavid du Colombier	MOVL	p1+0(FP), DI
7*219b2ee8SDavid du Colombier	MOVL	p2+4(FP), SI
8*219b2ee8SDavid du Colombier	CLD
9*219b2ee8SDavid du Colombier/*
10*219b2ee8SDavid du Colombier * first by longs
11*219b2ee8SDavid du Colombier */
12*219b2ee8SDavid du Colombier
13*219b2ee8SDavid du Colombier	MOVL	BX, CX
14*219b2ee8SDavid du Colombier	SHRL	$2, CX
15*219b2ee8SDavid du Colombier
16*219b2ee8SDavid du Colombier	REP;	CMPSL
17*219b2ee8SDavid du Colombier	JNE	found
18*219b2ee8SDavid du Colombier
19*219b2ee8SDavid du Colombier/*
20*219b2ee8SDavid du Colombier * then by bytes
21*219b2ee8SDavid du Colombier */
22*219b2ee8SDavid du Colombier	ANDL	$3, BX
23*219b2ee8SDavid du Colombier	MOVL	BX, CX
24*219b2ee8SDavid du Colombier	REP;	CMPSB
25*219b2ee8SDavid du Colombier	JNE	found1
26*219b2ee8SDavid du Colombier
27*219b2ee8SDavid du Colombiernone:
28*219b2ee8SDavid du Colombier	MOVL	$0, AX
29*219b2ee8SDavid du Colombier	RET
30*219b2ee8SDavid du Colombier
31*219b2ee8SDavid du Colombier/*
32*219b2ee8SDavid du Colombier * if long found,
33*219b2ee8SDavid du Colombier * back up and look by bytes
34*219b2ee8SDavid du Colombier */
35*219b2ee8SDavid du Colombierfound:
36*219b2ee8SDavid du Colombier	MOVL	$4, CX
37*219b2ee8SDavid du Colombier	SUBL	CX, DI
38*219b2ee8SDavid du Colombier	SUBL	CX, SI
39*219b2ee8SDavid du Colombier	REP;	CMPSB
40*219b2ee8SDavid du Colombier
41*219b2ee8SDavid du Colombierfound1:
42*219b2ee8SDavid du Colombier	JLS	lt
43*219b2ee8SDavid du Colombier	MOVL	$-1, AX
44*219b2ee8SDavid du Colombier	RET
45*219b2ee8SDavid du Colombierlt:
46*219b2ee8SDavid du Colombier	MOVL	$1, AX
47*219b2ee8SDavid du Colombier	RET
48