Root/
Source at commit 1275 created 12 years 11 months ago. By meklort, Remove unused file. Fixup makefiles some more - boot2 compiles again. | |
---|---|
1 | /*␊ |
2 | * memmove.c␊ |
3 | */␊ |
4 | #include <sys/types.h>␊ |
5 | ␊ |
6 | void *memmove(void *dst, const void *src, size_t n)␊ |
7 | {␊ |
8 | ␉const char *p = src;␊ |
9 | ␉char *q = dst;␊ |
10 | #if defined(__i386__) || defined(__x86_64__)␊ |
11 | ␉if (q < p) {␊ |
12 | ␉␉asm volatile("cld; rep; movsb"␊ |
13 | ␉␉␉ : "+c" (n), "+S"(p), "+D"(q));␊ |
14 | ␉} else {␊ |
15 | ␉␉p += (n - 1);␊ |
16 | ␉␉q += (n - 1);␊ |
17 | ␉␉asm volatile("std; rep; movsb; cld"␊ |
18 | ␉␉␉ : "+c" (n), "+S"(p), "+D"(q));␊ |
19 | ␉}␊ |
20 | #else␊ |
21 | ␉if (q < p) {␊ |
22 | ␉␉while (n--) {␊ |
23 | ␉␉␉*q++ = *p++;␊ |
24 | ␉␉}␊ |
25 | ␉} else {␊ |
26 | ␉␉p += n;␊ |
27 | ␉␉q += n;␊ |
28 | ␉␉while (n--) {␊ |
29 | ␉␉␉*--q = *--p;␊ |
30 | ␉␉}␊ |
31 | ␉}␊ |
32 | #endif␊ |
33 | ␊ |
34 | ␉return dst;␊ |
35 | }␊ |
36 |