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