AO_INLINE void
AO_nop_full(void)
{
- __asm__ __volatile__("mfence" : : : "memory");
+ __asm__ __volatile__ ("mfence" : : : "memory");
}
#define AO_HAVE_nop_full
#define AO_HAVE_or_full
AO_INLINE AO_TS_VAL_t
-AO_test_and_set_full(volatile AO_TS_t *addr)
+AO_test_and_set_full (volatile AO_TS_t *addr)
{
AO_TS_t oldval;
/* Note: the "xchg" instruction does not need a "lock" prefix */
- __asm__ __volatile__("xchg %0, %1"
- : "=q"(oldval), "=m"(*addr)
- : "0"(0xff) /* , "m"(*addr) */
- : "memory");
+ __asm__ __volatile__ ("xchg %b0, %1"
+ : "=q"(oldval), "=m"(*addr)
+ : "0"(0xff) /* , "m"(*addr) */
+ : "memory");
return (AO_TS_VAL_t)oldval;
}
/* Returns nonzero if the comparison succeeded. */
AO_INLINE int
-AO_compare_and_swap_full(volatile AO_t *addr,
- AO_t old, AO_t new_val)
+AO_compare_and_swap_full (volatile AO_t *addr, AO_t old, AO_t new_val)
{
char result;
- __asm__ __volatile__("lock; cmpxchgl %2, %0; setz %1"
- : "=m"(*addr), "=a"(result)
- : "r" (new_val), "a"(old) : "memory");
+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0; setz %1"
+ : "=m"(*addr), "=a"(result)
+ : "r" (new_val), "a"(old) : "memory");
return (int) result;
}
AO_nop_full(void)
{
/* Note: "mfence" (SSE2) is supported on all x86_64/amd64 chips. */
- __asm__ __volatile__("mfence" : : : "memory");
+ __asm__ __volatile__ ("mfence" : : : "memory");
}
#define AO_HAVE_nop_full
#define AO_HAVE_or_full
AO_INLINE AO_TS_VAL_t
-AO_test_and_set_full(volatile AO_TS_t *addr)
+AO_test_and_set_full (volatile AO_TS_t *addr)
{
AO_TS_t oldval;
/* Note: the "xchg" instruction does not need a "lock" prefix */
- __asm__ __volatile__("xchg %0, %1"
- : "=q"(oldval), "=m"(*addr)
- : "0"(0xff) /* , "m"(*addr) */
- : "memory");
+ __asm__ __volatile__ ("xchg %b0, %1"
+ : "=q"(oldval), "=m"(*addr)
+ : "0"(0xff) /* , "m"(*addr) */
+ : "memory");
return (AO_TS_VAL_t)oldval;
}
/* Returns nonzero if the comparison succeeded. */
AO_INLINE int
-AO_compare_and_swap_full(volatile AO_t *addr,
- AO_t old, AO_t new_val)
+AO_compare_and_swap_full (volatile AO_t *addr, AO_t old, AO_t new_val)
{
char result;
- __asm__ __volatile__("lock; cmpxchgq %2, %0; setz %1"
- : "=m"(*addr), "=a"(result)
- : "r" (new_val), "a"(old) : "memory");
+ __asm__ __volatile__ ("lock; cmpxchgq %2, %0; setz %1"
+ : "=m"(*addr), "=a"(result)
+ : "r" (new_val), "a"(old) : "memory");
return (int) result;
}
* Hoewever both are clearly useful in certain cases.
*/
AO_INLINE int
-AO_compare_double_and_swap_double_full(volatile AO_double_t *addr,
- AO_t old_val1, AO_t old_val2,
- AO_t new_val1, AO_t new_val2)
+AO_compare_double_and_swap_double_full (volatile AO_double_t *addr,
+ AO_t old_val1, AO_t old_val2,
+ AO_t new_val1, AO_t new_val2)
{
char result;
- __asm__ __volatile__("lock; cmpxchg16b %0; setz %1"
- : "=m"(*addr), "=a"(result)
- : "m"(*addr), "d" (old_val2), "a" (old_val1),
- "c" (new_val2), "b" (new_val1) : "memory");
+ __asm__ __volatile__ ("lock; cmpxchg16b %0; setz %1"
+ : "=m"(*addr), "=a"(result)
+ : "m"(*addr), "d" (old_val2), "a" (old_val1),
+ "c" (new_val2), "b" (new_val1) : "memory");
return (int) result;
}
#define AO_HAVE_compare_double_and_swap_double_full