libjava failed to build on Linux/x86

Boehm, Hans hans_boehm@hp.com
Thu Jan 24 16:34:00 GMT 2002


This happened once before. IIRC, the conclusion then was that it might be
better to change "=m" to "+m" and to remove the "0"(*(addr)) argument. But
as it stands, this very closely follows one of the examples in the gcc
manual, so it seems to primarily be a gcc bug.
Hans
> -----Original Message-----
> From: Per Bothner [mailto:per@bothner.com]
> In 
> function `bool
> compare_and_swap(volatile obj_addr_t*, unsigned int, 
> unsigned int)':
> /home/bothner/GNU/gcc/libjava/java/lang/natObject.cc:329: 
> inconsistent 
> operand
> constraints in an `asm'
> make[3]: *** [java/lang/natObject.lo] Error 1
>> The asm is:
>> inline static bool
> compare_and_swap(volatile obj_addr_t *addr,
>> 				obj_addr_t old,
> 						obj_addr_t new_val)
> {
> char result;
> __asm__ __volatile__("lock; cmpxchgl %2, %0; setz %1"
> 	 	: "=m"(*(addr)), "=q"(result)
> 		: "r" (new_val), "0"(*(addr)), "a"(old) : "memory");
> return (bool) result;
> }
>>> -- 
> 	--Per Bothner
> per@bothner.com http://www.bothner.com/per/
>


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /