xref: /plan9-contrib/sys/src/ape/lib/ap/386/memcpy.s (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1	TEXT	memcpy(SB), $0
2
3	MOVL	p1+0(FP), DI
4	MOVL	p2+4(FP), SI
5	MOVL	n+8(FP), BX
6	CMPL	BX, $0
7	JGE	ok
8	MOVL	$0, SI
9ok:
10	CLD
11/*
12 * check and set for backwards
13 */
14	CMPL	SI, DI
15	JLS	back
16/*
17 * copy whole longs
18 */
19	MOVL	BX, CX
20	SHRL	$2, CX
21	REP;	MOVSL
22/*
23 * copy the rest, by bytes
24 */
25	ANDL	$3, BX
26	MOVL	BX, CX
27	REP;	MOVSB
28
29	MOVL	p+0(FP),AX
30	RET
31/*
32 * whole thing backwards has
33 * adjusted addresses
34 */
35back:
36	ADDL	BX, DI
37	ADDL	BX, SI
38	SUBL	$4, DI
39	SUBL	$4, SI
40	STD
41/*
42 * copy whole longs
43 */
44	MOVL	BX, CX
45	SHRL	$2, CX
46	ANDL	$3, BX
47	REP;	MOVSL
48/*
49 * copy the rest, by bytes
50 */
51	ADDL	$3, DI
52	ADDL	$3, SI
53	MOVL	BX, CX
54	REP;	MOVSB
55
56	MOVL	p+0(FP),AX
57	RET
58