xref: /openbmc/linux/arch/x86/lib/memcpy_32.c (revision 22246614)
1 #include <linux/string.h>
2 #include <linux/module.h>
3 
4 #undef memcpy
5 #undef memset
6 
7 void *memcpy(void *to, const void *from, size_t n)
8 {
9 #ifdef CONFIG_X86_USE_3DNOW
10 	return __memcpy3d(to, from, n);
11 #else
12 	return __memcpy(to, from, n);
13 #endif
14 }
15 EXPORT_SYMBOL(memcpy);
16 
17 void *memset(void *s, int c, size_t count)
18 {
19 	return __memset(s, c, count);
20 }
21 EXPORT_SYMBOL(memset);
22 
23 void *memmove(void *dest, const void *src, size_t n)
24 {
25 	int d0, d1, d2;
26 
27 	if (dest < src) {
28 		memcpy(dest, src, n);
29 	} else {
30 		__asm__ __volatile__(
31 			"std\n\t"
32 			"rep\n\t"
33 			"movsb\n\t"
34 			"cld"
35 			: "=&c" (d0), "=&S" (d1), "=&D" (d2)
36 			:"0" (n),
37 			 "1" (n-1+src),
38 			 "2" (n-1+dest)
39 			:"memory");
40 	}
41 	return dest;
42 }
43 EXPORT_SYMBOL(memmove);
44