Magellan Linux

Contents of /trunk/mkinitrd-magellan/klibc/usr/klibc/memmove.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 815 - (show annotations) (download)
Fri Apr 24 18:32:46 2009 UTC (15 years ago) by niro
File MIME type: text/plain
File size: 535 byte(s)
-updated to klibc-1.5.15
1 /*
2 * memmove.c
3 */
4
5 #include <string.h>
6
7 void *memmove(void *dst, const void *src, size_t n)
8 {
9 const char *p = src;
10 char *q = dst;
11 #if defined(__i386__) || defined(__x86_64__)
12 if (q < p) {
13 asm volatile("cld; rep; movsb"
14 : "+c" (n), "+S"(p), "+D"(q));
15 } else {
16 p += (n - 1);
17 q += (n - 1);
18 asm volatile("std; rep; movsb; cld"
19 : "+c" (n), "+S"(p), "+D"(q));
20 }
21 #else
22 if (q < p) {
23 while (n--) {
24 *q++ = *p++;
25 }
26 } else {
27 p += n;
28 q += n;
29 while (n--) {
30 *--q = *--p;
31 }
32 }
33 #endif
34
35 return dst;
36 }