- 论坛徽章:
- 0
|
内核代码中是这么定义的
static inline long
__find_first_bit(const unsigned long * addr, unsigned long size)
{
long d0, d1;
long res;
__asm__ __volatile__(
" repe; scasq\n"
" jz 1f\n"
" subq $8,%%rdi\n"
" bsfq (%%rdi),%%rax\n"
"1: subq %[addr],%%rdi\n"
" shlq $3,%%rdi\n"
" addq %%rdi,%%rax"
:"=a" (res), "=&c" (d0), "=&D" (d1)
:"0" (0ULL),
"1" ((size + 63) >> 6), "2" (addr),
[addr] "r" (addr) : "memory");
return res;
}
我在MinGW中写了个程序测试了一些,却报错
test.c:In function `__find_first_bit':
test.c:138: error: impossible register constraint in `asm'
test.c:151: confused by earlier errors, bailing out
请大家指点我,函数中那段汇编是什么意思啊 |
|