xref: /plan9-contrib/sys/src/libc/amd64/memset.s (revision 272efad760864ee41cfe633b56aea9b4f5cf3ae7)
1*272efad7SDavid du Colombier	TEXT	memset(SB),$0
2*272efad7SDavid du Colombier
3*272efad7SDavid du Colombier	CLD
4*272efad7SDavid du Colombier	MOVQ	RARG, DI
5*272efad7SDavid du Colombier	MOVBLZX	c+8(FP), AX
6*272efad7SDavid du Colombier	MOVL	n+16(FP), BX
7*272efad7SDavid du Colombier/*
8*272efad7SDavid du Colombier * if not enough bytes, just set bytes
9*272efad7SDavid du Colombier */
10*272efad7SDavid du Colombier	CMPL	BX, $9
11*272efad7SDavid du Colombier	JLS	c3
12*272efad7SDavid du Colombier/*
13*272efad7SDavid du Colombier * if not aligned, just set bytes
14*272efad7SDavid du Colombier */
15*272efad7SDavid du Colombier	MOVQ	RARG, CX
16*272efad7SDavid du Colombier	ANDL	$3,CX
17*272efad7SDavid du Colombier	JNE	c3
18*272efad7SDavid du Colombier/*
19*272efad7SDavid du Colombier * build word in AX
20*272efad7SDavid du Colombier */
21*272efad7SDavid du Colombier	MOVB	AL, AH
22*272efad7SDavid du Colombier	MOVL	AX, CX
23*272efad7SDavid du Colombier	SHLL	$16, CX
24*272efad7SDavid du Colombier	ORL	CX, AX
25*272efad7SDavid du Colombier/*
26*272efad7SDavid du Colombier * set whole longs
27*272efad7SDavid du Colombier */
28*272efad7SDavid du Colombierc1:
29*272efad7SDavid du Colombier	MOVQ	BX, CX
30*272efad7SDavid du Colombier	SHRQ	$2, CX
31*272efad7SDavid du Colombier	ANDL	$3, BX
32*272efad7SDavid du Colombier	REP;	STOSL
33*272efad7SDavid du Colombier/*
34*272efad7SDavid du Colombier * set the rest, by bytes
35*272efad7SDavid du Colombier */
36*272efad7SDavid du Colombierc3:
37*272efad7SDavid du Colombier	MOVL	BX, CX
38*272efad7SDavid du Colombier	REP;	STOSB
39*272efad7SDavid du Colombierret:
40*272efad7SDavid du Colombier	MOVQ	RARG,AX
41*272efad7SDavid du Colombier	RET
42