xref: /plan9-contrib/sys/src/ape/lib/ap/386/memset.s (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier	TEXT	memset(SB),$0
2*219b2ee8SDavid du Colombier
3*219b2ee8SDavid du Colombier	CLD
4*219b2ee8SDavid du Colombier	MOVL	p+0(FP), DI
5*219b2ee8SDavid du Colombier	MOVBLZX	c+4(FP), AX
6*219b2ee8SDavid du Colombier	MOVL	n+8(FP), BX
7*219b2ee8SDavid du Colombier/*
8*219b2ee8SDavid du Colombier * if not enough bytes, just copy
9*219b2ee8SDavid du Colombier */
10*219b2ee8SDavid du Colombier	CMPL	BX, $9
11*219b2ee8SDavid du Colombier	JLS	c3
12*219b2ee8SDavid du Colombier/*
13*219b2ee8SDavid du Colombier * build word in AX
14*219b2ee8SDavid du Colombier */
15*219b2ee8SDavid du Colombier	MOVB	AL, AH
16*219b2ee8SDavid du Colombier	MOVL	AX, CX
17*219b2ee8SDavid du Colombier	SHLL	$16, CX
18*219b2ee8SDavid du Colombier	ORL	CX, AX
19*219b2ee8SDavid du Colombier/*
20*219b2ee8SDavid du Colombier * copy whole longs
21*219b2ee8SDavid du Colombier */
22*219b2ee8SDavid du Colombierc1:
23*219b2ee8SDavid du Colombier	MOVL	BX, CX
24*219b2ee8SDavid du Colombier	SHRL	$2, CX
25*219b2ee8SDavid du Colombier	ANDL	$3, BX
26*219b2ee8SDavid du Colombier	REP;	STOSL
27*219b2ee8SDavid du Colombier/*
28*219b2ee8SDavid du Colombier * copy the rest, by bytes
29*219b2ee8SDavid du Colombier */
30*219b2ee8SDavid du Colombierc3:
31*219b2ee8SDavid du Colombier	MOVL	BX, CX
32*219b2ee8SDavid du Colombier	REP;	STOSB
33*219b2ee8SDavid du Colombierret:
34*219b2ee8SDavid du Colombier	MOVL	p+0(FP),AX
35*219b2ee8SDavid du Colombier	RET
36