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