From f8ece72fc9b441c8a72635558a18bca98b211081 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sun, 4 Nov 2012 22:58:42 +0000 Subject: [PATCH] [libc] Remove unnecessary "cld" instruction from memset() Saving is one byte per call to memset(). Signed-off-by: Michael Brown --- src/arch/x86/include/bits/string.h | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/arch/x86/include/bits/string.h b/src/arch/x86/include/bits/string.h index f0d3c9659..5736295ab 100644 --- a/src/arch/x86/include/bits/string.h +++ b/src/arch/x86/include/bits/string.h @@ -192,17 +192,24 @@ memmove ( void *dest, const void *src, size_t len ) { } #define __HAVE_ARCH_MEMSET -static inline void * memset(void *s, int c,size_t count) -{ -int d0, d1; -__asm__ __volatile__( - "cld\n\t" - "rep\n\t" - "stosb" - : "=&c" (d0), "=&D" (d1) - :"a" (c),"1" (s),"0" (count) - :"memory"); -return s; + +/** + * Fill memory region + * + * @v dest Destination address + * @v fill Fill pattern + * @v len Length + * @ret dest Destination address + */ +static inline void * memset ( void *dest, int fill, size_t len ) { + void *discard_D; + size_t discard_c; + + __asm__ __volatile__ ( "rep stosb" + : "=&D" ( discard_D ), "=&c" ( discard_c ) + : "0" ( dest ), "1" ( len ), "a" ( fill ) + : "memory" ); + return dest; } #define __HAVE_ARCH_MEMSWAP