1 /* $OpenBSD: bzero.S,v 1.3 2007/05/25 20:32:29 krw Exp $ */
2
3 /*
4 * Written by J.T. Conklin <jtc@netbsd.org>.
5 * Public domain.
6 */
7
8 #include <machine/asm.h>
9
10 ENTRY(bzero)
11 pushl %edi
12 movl 8(%esp),%edi
13 movl 12(%esp),%edx
14
15 cld /* set fill direction forward */
16 xorl %eax,%eax /* set fill data to 0 */
17
18 /*
19 * if the string is too short, it's really not worth the overhead
20 * of aligning to word boundaries, etc. So we jump to a plain
21 * unaligned set.
22 */
23 cmpl $16,%edx
24 jb L1
25
26 movl %edi,%ecx /* compute misalignment */
27 negl %ecx
28 andl $3,%ecx
29 subl %ecx,%edx
30 rep /* zero until word aligned */
31 stosb
32
33 movl %edx,%ecx /* zero by words */
34 shrl $2,%ecx
35 andl $3,%edx
36 rep
37 stosl
38
39 L1: movl %edx,%ecx /* zero remainder by bytes */
40 rep
41 stosb
42
43 popl %edi
44 ret