Rev 1157 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1157 | Rev 1163 | ||
---|---|---|---|
Line 4... | Line 4... | ||
4 | 4 | ||
5 | static void *memmove(void *dst,const void *src,size_t length) |
5 | static void *memmove(void *dst,const void *src,size_t length) |
6 | { |
6 | { |
Line -... | Line 7... | ||
- | 7 | void *value; |
|
- | 8 | ||
7 | void *value; |
9 | if (length & 3) |
8 | 10 | {//length not aligned in 4 bytes use reb movsb |
|
9 | __asm__ __volatile__( |
11 | __asm__ __volatile__( |
10 | "movl %%edi,%%eax\n\t" |
12 | "movl %%edi,%%eax\n\t" |
11 | "cld\n\t" |
13 | "cld\n\t" |
12 | "rep\n\t" |
14 | "rep\n\t" |
13 | "movsb" |
15 | "movsb" |
14 | :"=D"(value) |
16 | :"=D"(value) |
- | 17 | :"c"(length),"S"(src),"D"(dst) |
|
- | 18 | :"eax"); |
|
- | 19 | } |
|
- | 20 | else |
|
- | 21 | {//length aligned in 4 bytes use rep movsd |
|
- | 22 | length=length >> 2;//length=length/4 |
|
- | 23 | __asm__ __volatile__( |
|
- | 24 | "movl %%edi,%%eax\n\t" |
|
- | 25 | "cld\n\t" |
|
- | 26 | "rep\n\t" |
|
- | 27 | "movsd" |
|
- | 28 | :"=D"(value) |
|
Line -... | Line 29... | ||
- | 29 | :"c"(length),"S"(src),"D"(dst) |
|
15 | :"c"(length),"S"(src),"D"(dst) |
30 | :"eax"); |
16 | :"eax"); |
31 | |
Line 17... | Line 32... | ||
17 | 32 | } |
|
18 | return(value); |
33 | return(value); |