|
发表于 2006-1-9 15:17:40
|
显示全部楼层
static inline void * __memcopy(void * to, const void * from, size_t n) {
int d0, d1, d2;
__asm__ __volatile__ (
"rep : movsl\n\t" //为了加快速度,每4个字节为单位复制(所以,便有了"0"(n/4),也就是ecx=n/4,如果n=15的话,则ecx=3,还余3,同时也请注意最多也就剩余3个字节)
"testb $2, %b4\n\t" ; //到这里的话,说明上面的前12个字节已经全部复制完成,所以要比较剩下的
//是否还有要拷贝字节。先与2比较,
"je 1f\n\t" ; //无则跳转(这里请你看一下,testb指令)
"movsw\n" ; //否则复制一个字(2个字节)
"1:\ttestb $1, %b4\n\t" //在看是否还剩1个字节
"je 2f\n\t" //无则跳转
"movsb\n" //否则复制一个字节
"2:"
: "=&c"(d0), "&D"(d1), "=&S(d2)"
: "0"(n/4), "q"(n), "1"((long)to), "2"((long)from)
: "memory");
} |
|