xref: /plan9-contrib/sys/src/libc/amd64/memcmp.s (revision 272efad760864ee41cfe633b56aea9b4f5cf3ae7)
1	TEXT	memcmp(SB),$0
2
3	MOVL	n+16(FP), BX
4	CMPL	BX, $0
5	JEQ	none
6	MOVQ	RARG, DI
7	MOVQ	p2+8(FP), SI
8	CLD
9	MOVQ	DI, CX
10	ORQ	SI, CX
11	ANDL	$3, CX
12	JNE	c3
13/*
14 * first by longs
15 */
16
17	MOVL	BX, CX
18	SHRQ	$2, CX
19
20	REP;	CMPSL
21	JNE	found
22
23/*
24 * then by bytes
25 */
26	ANDL	$3, BX
27c3:
28	MOVL	BX, CX
29	REP;	CMPSB
30	JNE	found1
31
32none:
33	MOVQ	$0, AX
34	RET
35
36/*
37 * if long found,
38 * back up and look by bytes
39 */
40found:
41	MOVL	$4, CX
42	SUBQ	CX, DI
43	SUBQ	CX, SI
44	REP;	CMPSB
45
46found1:
47	JLS	lt
48	MOVQ	$-1, AX
49	RET
50lt:
51	MOVQ	$1, AX
52	RET
53