X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/474a5dd282586c31abfefc7953f148acdc226731..35a7d633d3f16c1e0539af6ca5d8e7482926cd93:/lunaix-os/libs/klibc/string/mem.c diff --git a/lunaix-os/libs/klibc/string/mem.c b/lunaix-os/libs/klibc/string/mem.c old mode 100755 new mode 100644 index aeaca00..3e0ba08 --- a/lunaix-os/libs/klibc/string/mem.c +++ b/lunaix-os/libs/klibc/string/mem.c @@ -1,51 +1,49 @@ #include -#include +#include -void* -memcpy(void* dest, const void* src, size_t num) +void* _weak +memcpy(void* dest, const void* src, unsigned long num) { - asm volatile("movl %1, %%edi\n" - "rep movsb\n" ::"S"(src), - "r"(dest), - "c"(num) - : "edi", "memory"); + for (size_t i = 0; i < num; i++) { + ((u8_t*)dest)[i] = ((u8_t*)src)[i]; + } + return dest; } -void* -memmove(void* dest, const void* src, size_t num) +void* _weak +memmove(void* dest, const void* src, unsigned long num) { - uint8_t* dest_ptr = (uint8_t*)dest; - const uint8_t* src_ptr = (const uint8_t*)src; + u8_t* dest_ptr = (u8_t*)dest; + const u8_t* src_ptr = (const u8_t*)src; if (dest_ptr < src_ptr) { - for (size_t i = 0; i < num; i++) { + for (unsigned long i = 0; i < num; i++) { *(dest_ptr + i) = *(src_ptr + i); } } else { - for (size_t i = num; i != 0; i--) { + for (unsigned long i = num; i != 0; i--) { *(dest_ptr + i - 1) = *(src_ptr + i - 1); } } return dest; } -void* -memset(void* ptr, int value, size_t num) +void* _weak +memset(void* ptr, int value, unsigned long num) { - asm volatile("movl %1, %%edi\n" - "rep stosb\n" ::"c"(num), - "r"(ptr), - "a"(value) - : "edi", "memory"); + for (size_t i = 0; i < num; i++) { + ((u8_t*)ptr)[i] = 0; + } + return ptr; } -int -memcmp(const void* ptr1, const void* ptr2, size_t num) +int _weak +memcmp(const void* ptr1, const void* ptr2, unsigned long num) { - uint8_t* p1 = (uint8_t*)ptr1; - uint8_t* p2 = (uint8_t*)ptr2; - for (size_t i = 0; i < num; i++) { + u8_t* p1 = (u8_t*)ptr1; + u8_t* p2 = (u8_t*)ptr2; + for (unsigned long i = 0; i < num; i++) { int diff = *(p1 + i) - *(p2 + i); if (diff != 0) { return diff;