+2011-06-27 Ivan Maidanski <ivmai@mail.ru> (really Jeremy Huddleston)
+
+ * src/atomic_ops/sysdeps/gcc/x86.h (AO_test_and_set_full):
+ Explicitly cast 0xff to unsigned char (otherwise LLVM v2.7 GAS
+ reports an error); don't recognize AO_XCHGB_RET_WORD.
+ * src/atomic_ops/sysdeps/gcc/x86_64.h (AO_test_and_set_full):
+ Ditto.
+
2011-06-15 Ivan Maidanski <ivmai@mail.ru>
* configure.ac, README: Change to version 7.2alpha7.
AO_INLINE AO_TS_VAL_t
AO_test_and_set_full(volatile AO_TS_t *addr)
{
-# ifdef AO_XCHGB_RET_WORD
- /* Workaround for a bug in LLVM v2.7 GAS. */
- unsigned oldval;
-# else
- unsigned char oldval;
-# endif
+ unsigned char oldval;
/* Note: the "xchg" instruction does not need a "lock" prefix */
__asm__ __volatile__("xchgb %0, %1"
: "=q"(oldval), "=m"(*addr)
- : "0"(0xff), "m"(*addr) : "memory");
+ : "0"((unsigned char)0xff), "m"(*addr) : "memory");
return (AO_TS_VAL_t)oldval;
}
#define AO_HAVE_test_and_set_full
AO_INLINE AO_TS_VAL_t
AO_test_and_set_full(volatile AO_TS_t *addr)
{
-# ifdef AO_XCHGB_RET_WORD
- /* Workaround for a bug in LLVM v2.7 GAS. */
- unsigned oldval;
-# else
- unsigned char oldval;
-# endif
+ unsigned char oldval;
/* Note: the "xchg" instruction does not need a "lock" prefix */
__asm__ __volatile__("xchgb %0, %1"
: "=q"(oldval), "=m"(*addr)
- : "0"(0xff), "m"(*addr) : "memory");
+ : "0"((unsigned char)0xff), "m"(*addr) : "memory");
return (AO_TS_VAL_t)oldval;
}
#define AO_HAVE_test_and_set_full