Re: [Bugme-new] [Bug 7602] New: Failure on compilation: include/asm/bitops.h:122: error: inconsistent operand constraints in an `asm' in nfs_access_add_cache()



On Thursday 30 November 2006 23:32, Andrew Morton wrote:
On Thu, 30 Nov 2006 23:22:00 +0100
Andi Kleen <ak@xxxxxxx> wrote:


static __inline__ int __test_and_set_bit(int nr, volatile void * addr)
{
int oldbit;

__asm__(
"btsl %2,%1\n\tsbbl %0,%0"
:"=r" (oldbit),"+m" (ADDR)
:"dIr" (nr));
return oldbit;
}

explodes with gcc-3.4.4.

Known issue. The new form is correct and needed, but the old gcc doesn't accept
it. I haven't gotten a form that is both and correct and works on the old compiler
out of the gcc hackers I asked.

Oh, thanks.

What does "d" do, btw? My gcc info page only covers "x86" and says only "`d' register"

Hmm, normally edx (aka Extended D register eXtended :) or rdx

But you're right it doesn't make sense here because 'd' is already included in 'r'.
Probably should be dropped.


(And, more importantly, where is the best description of gcc asm constraints?)

Either info pages or gcc source. There was also a web page somewhere with a tutorial,
but i don't think it was a full reference.

-Andi
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



Relevant Pages