diff -r 08e010c3f251 xen/arch/x86/bitops.c --- a/xen/arch/x86/bitops.c Tue Apr 15 16:39:00 2008 +0100 +++ b/xen/arch/x86/bitops.c Wed Apr 16 09:38:06 2008 +0900 @@ -8,12 +8,15 @@ unsigned int __find_first_bit( unsigned long d0, d1, res; asm volatile ( - " xor %%eax,%%eax\n\t" /* also ensures ZF==1 if size==0 */ + "1: xor %%eax,%%eax\n\t" /* also ensures ZF==1 if size==0 */ " repe; scas"__OS"\n\t" - " je 1f\n\t" + " je 2f\n\t" " lea -"STR(BITS_PER_LONG/8)"(%2),%2\n\t" - " bsf (%2),%0\n" - "1: sub %%ebx,%%edi\n\t" + " bsf (%2),%0\n\t" + " jnz 2f\n\t" + " lea "STR(BITS_PER_LONG/8)"(%2),%2\n\t" + " jmp 1b\n\t" + "2: sub %%ebx,%%edi\n\t" " shl $3,%%edi\n\t" " add %%edi,%%eax" : "=&a" (res), "=&c" (d0), "=&D" (d1)