Contents of /trunk/mkinitrd-magellan/klibc/usr/klibc/memmove.c
Parent Directory | Revision Log
Revision 815 -
(show annotations)
(download)
Fri Apr 24 18:32:46 2009 UTC (15 years, 5 months ago) by niro
File MIME type: text/plain
File size: 535 byte(s)
Fri Apr 24 18:32:46 2009 UTC (15 years, 5 months 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 | } |