1144730Salc/* 2144730Salc * Written by J.T. Conklin <jtc@NetBSD.org>. 3144730Salc * Public domain. 4144730Salc * Adapted for NetBSD/x86_64 by Frank van der Linden <fvdl@wasabisystems.com> 5144730Salc */ 6144730Salc 7144730Salc#include <machine/asm.h> 8144730Salc__FBSDID("$FreeBSD$"); 9144730Salc 10144730Salc#if 0 11144730Salc RCSID("$NetBSD: bzero.S,v 1.2 2003/07/26 19:24:38 salo Exp $") 12144730Salc#endif 13144730Salc 14144730SalcENTRY(bzero) 15144730Salc cld /* set fill direction forward */ 16144730Salc xorq %rax,%rax /* set fill data to 0 */ 17144730Salc 18144730Salc /* 19144730Salc * if the string is too short, it's really not worth the overhead 20144730Salc * of aligning to word boundries, etc. So we jump to a plain 21144730Salc * unaligned set. 22144730Salc */ 23144733Salc cmpq $16,%rsi 24144730Salc jb L1 25144730Salc 26144730Salc movq %rdi,%rcx /* compute misalignment */ 27144730Salc negq %rcx 28144730Salc andq $7,%rcx 29144733Salc subq %rcx,%rsi 30144730Salc rep /* zero until word aligned */ 31144730Salc stosb 32144730Salc 33144733Salc movq %rsi,%rcx /* zero by words */ 34144730Salc shrq $3,%rcx 35144733Salc andq $7,%rsi 36144730Salc rep 37144730Salc stosq 38144730Salc 39144733SalcL1: movq %rsi,%rcx /* zero remainder by bytes */ 40144730Salc rep 41144730Salc stosb 42144730Salc 43144730Salc ret 44184547SpeterEND(bzero) 45217106Skib 46217106Skib .section .note.GNU-stack,"",%progbits 47