From fb2474507118b66cc944baaf3a63bbc30809afcf Mon Sep 17 00:00:00 2001 From: Matheus Date: Wed, 21 Aug 2024 23:23:58 -0300 Subject: [PATCH] string: better memset and memcpy --- kernel-src/lib/string.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/kernel-src/lib/string.c b/kernel-src/lib/string.c index 2272ec70..de1a34ad 100644 --- a/kernel-src/lib/string.c +++ b/kernel-src/lib/string.c @@ -3,20 +3,26 @@ #include void *memcpy(void *d, void *s, size_t c) { +#ifdef __x86_64__ + asm volatile ("rep movsb" : : "S"(s), "D"(d), "c"(c) : "memory"); +#else uint8_t *sc = (uint8_t *)s; uint8_t *dc = (uint8_t *)d; while (c--) *dc++ = *sc++; - +#endif return d; } void *memset(void *ptr, unsigned long value, size_t num) { +#ifdef __x86_64__ + asm volatile ("rep stosb" : : "D"(ptr), "a"(value), "c"(num) : "memory"); +#else char *p = (char *)ptr; while (num--) *p++ = value; - +#endif return ptr; }