Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 815 - (hide annotations) (download)
Fri Apr 24 18:32:46 2009 UTC (15 years, 1 month ago) by niro
File MIME type: text/plain
File size: 535 byte(s)
-updated to klibc-1.5.15
1 niro 532 /*
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 niro 815 asm volatile("cld; rep; movsb"
14 niro 532 : "+c" (n), "+S"(p), "+D"(q));
15     } else {
16     p += (n - 1);
17     q += (n - 1);
18 niro 815 asm volatile("std; rep; movsb; cld"
19 niro 532 : "+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     }