Annotation of /trunk/mkinitrd-magellan/klibc/usr/klibc/memmove.c
Parent Directory | Revision Log
Revision 532 -
(hide annotations)
(download)
Sat Sep 1 22:45:15 2007 UTC (16 years, 9 months ago) by niro
File MIME type: text/plain
File size: 534 byte(s)
Sat Sep 1 22:45:15 2007 UTC (16 years, 9 months ago) by niro
File MIME type: text/plain
File size: 534 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd
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 | 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" | ||
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 | } |