diff options
Diffstat (limited to 'src/arch/x86/core')
| -rw-r--r-- | src/arch/x86/core/x86_string.c | 18 |
1 files changed, 18 insertions, 0 deletions
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 @@ -106,6 +106,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) * * @v str1 First string |
