cherry pick device tree modifications from isa/arm64
[lunaix-os.git] / lunaix-os / arch / x86 / klib / fast_str.c
1 #include <klibc/string.h>
2
3 #ifdef CONFIG_ARCH_X86_64
4 void*
5 memcpy(void* dest, const void* src, unsigned long num)
6 {
7     if (!num)
8         return dest;
9         
10     asm volatile("movq %1, %%rdi\n"
11                  "rep movsb\n" ::"S"(src),
12                  "r"(dest),
13                  "c"(num)
14                  : "rdi", "memory");
15     return dest;
16 }
17
18 void*
19 memset(void* ptr, int value, unsigned long num)
20 {
21     asm volatile("movq %1, %%rdi\n"
22                  "rep stosb\n" ::"c"(num),
23                  "r"(ptr),
24                  "a"(value)
25                  : "rdi", "memory");
26     return ptr;
27 }
28
29 #else
30 void*
31 memcpy(void* dest, const void* src, unsigned long num)
32 {
33     if (!num)
34         return dest;
35         
36     asm volatile("movl %1, %%edi\n"
37                  "rep movsb\n" ::"S"(src),
38                  "r"(dest),
39                  "c"(num)
40                  : "edi", "memory");
41     return dest;
42 }
43
44 void*
45 memset(void* ptr, int value, unsigned long num)
46 {
47     asm volatile("movl %1, %%edi\n"
48                  "rep stosb\n" ::"c"(num),
49                  "r"(ptr),
50                  "a"(value)
51                  : "edi", "memory");
52     return ptr;
53 }
54
55 #endif
56