From de20c526e68f7ec1155cdb7dcaeb2ff4c8c2c580 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 5 Nov 2012 00:25:25 +0000 Subject: [libc] Reduce overall code size by externalising strlen() Typical saving is 5-20 bytes in each file using strlen(). Signed-off-by: Michael Brown --- src/arch/x86/core/x86_string.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/arch/x86/core') diff --git a/src/arch/x86/core/x86_string.c b/src/arch/x86/core/x86_string.c index 962a7d84d..69c73f704 100644 --- a/src/arch/x86/core/x86_string.c +++ b/src/arch/x86/core/x86_string.c @@ -105,6 +105,24 @@ void * __memmove ( void *dest, const void *src, size_t len ) { } } +/** + * Calculate length of string + * + * @v string String + * @ret len Length (excluding NUL) + */ +size_t strlen ( const char *string ) { + const char *discard_D; + size_t len_plus_one; + + __asm__ __volatile__ ( "repne scasb\n\t" + "not %1\n\t" + : "=&D" ( discard_D ), "=&c" ( len_plus_one ) + : "0" ( string ), "1" ( -1UL ), "a" ( 0 ) ); + + return ( len_plus_one - 1 ); +} + /** * Compare strings (up to a specified length) * -- cgit v1.2.3-55-g7522