/*
 * memset.S
 *
 * Copyright 2003, Minoru Murashima. All rights reserved.
 * Distributed under the terms of the BSD License.
 */


.text


/*
 * void *memset(void *dest,int c,size_t n);
 * P6プロセッサの場合、アドレスが8バイト境界で256バイト以上のコピーなら高速でコピーする
 */
.globl memset
memset:
	pushl	%edi
	movl	8(%esp),%edi
	movl	12(%esp),%eax

	/* Adjust alignment by 8bytes */
	xorl	%edx,%edx
	xorl	%ecx,%ecx
	subl	%edi,%ecx
	andl	$0x7,%ecx
	cmpl	16(%esp),%ecx
	jae		2f
	movl	%ecx,%edx
	rep
	stosb

2:	movl	16(%esp),%ecx
	subl	%edx,%ecx
	rep
	stosb

1:	movl	12(%esp),%eax
	popl	%edi
	ret
