amd64: convert libc bzero to a C func to avoid future bloat

Reviewed by:	kib (previous version)
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D17549
This commit is contained in:
Mateusz Guzik 2018-11-15 20:20:39 +00:00
parent b6b42932db
commit 6fff634455
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=340463
4 changed files with 17 additions and 26 deletions

View File

@ -2,7 +2,6 @@
MDSRCS+= \
bcmp.S \
bzero.S \
memcmp.S \
memcpy.S \
memmove.S \

View File

@ -1,7 +0,0 @@
/* $FreeBSD */
#include <machine/asm.h>
__FBSDID("$FreeBSD$");
#define BZERO
#include "memset.S"

View File

@ -0,0 +1,15 @@
/*-
* Public domain.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <string.h>
void
bzero(void *b, size_t len)
{
memset(b, 0, len);
}

View File

@ -31,18 +31,12 @@
#include <machine/asm.h>
__FBSDID("$FreeBSD$");
.macro MEMSET bzero erms
.if \bzero == 1
movq %rsi,%rcx
movq %rsi,%rdx
xorl %eax,%eax
.else
.macro MEMSET erms
movq %rdi,%r9
movq %rdx,%rcx
movzbq %sil,%r8
movabs $0x0101010101010101,%rax
imulq %r8,%rax
.endif
cmpq $32,%rcx
jb 1016f
@ -95,9 +89,7 @@ __FBSDID("$FreeBSD$");
jl 1000f
movb %al,(%rdi)
1000:
.if \bzero == 0
movq %r9,%rax
.endif
ret
1256:
@ -112,20 +104,12 @@ __FBSDID("$FreeBSD$");
andb $7,%cl
jne 1004b
.endif
.if \bzero == 0
movq %r9,%rax
.endif
ret
.endm
#ifndef BZERO
ENTRY(memset)
MEMSET bzero=0 erms=0
MEMSET erms=0
END(memset)
#else
ENTRY(bzero)
MEMSET bzero=1 erms=0
END(bzero)
#endif
.section .note.GNU-stack,"",%progbits