From 61c6af3f0b64b711f4a104aedad036a3d12093eb Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sun, 4 Nov 2012 22:50:27 +0000 Subject: [libc] Convert memcpy() from a macro to an inline function Signed-off-by: Michael Brown --- src/arch/x86/include/bits/string.h | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'src/arch') diff --git a/src/arch/x86/include/bits/string.h b/src/arch/x86/include/bits/string.h index e5850ed93..f0d3c9659 100644 --- a/src/arch/x86/include/bits/string.h +++ b/src/arch/x86/include/bits/string.h @@ -28,6 +28,14 @@ FILE_LICENCE ( PUBLIC_DOMAIN ); extern void * __memcpy ( void *dest, const void *src, size_t len ); extern void * __memcpy_reverse ( void *dest, const void *src, size_t len ); +/** + * Copy memory area (where length is a compile-time constant) + * + * @v dest Destination address + * @v src Source address + * @v len Length + * @ret dest Destination address + */ static inline __attribute__ (( always_inline )) void * __constant_memcpy ( void *dest, const void *src, size_t len ) { union { @@ -139,10 +147,22 @@ __constant_memcpy ( void *dest, const void *src, size_t len ) { return dest; } -#define memcpy( dest, src, len ) \ - ( __builtin_constant_p ( (len) ) ? \ - __constant_memcpy ( (dest), (src), (len) ) : \ - __memcpy ( (dest), (src), (len) ) ) +/** + * Copy memory area + * + * @v dest Destination address + * @v src Source address + * @v len Length + * @ret dest Destination address + */ +static inline __attribute__ (( always_inline )) void * +memcpy ( void *dest, const void *src, size_t len ) { + if ( __builtin_constant_p ( len ) ) { + return __constant_memcpy ( dest, src, len ); + } else { + return __memcpy ( dest, src, len ); + } +} #define __HAVE_ARCH_MEMMOVE -- cgit v1.2.3-55-g7522