diff options
| author | Peter Maydell | 2013-10-22 11:58:41 +0200 |
|---|---|---|
| committer | Anthony Liguori | 2013-11-21 17:01:06 +0100 |
| commit | 33effd3aab4a268fb573fd8d7e0fe0baed0cd61a (patch) | |
| tree | d1db0ea25147325133006bd66e0553070aee288a /include | |
| parent | target-i386: do not override nr_cores for -cpu host (diff) | |
| download | qemu-33effd3aab4a268fb573fd8d7e0fe0baed0cd61a.tar.gz qemu-33effd3aab4a268fb573fd8d7e0fe0baed0cd61a.tar.xz qemu-33effd3aab4a268fb573fd8d7e0fe0baed0cd61a.zip | |
atomic.h: Fix build with clang
clang defines __ATOMIC_SEQ_CST but its implementation of the
__atomic_exchange() builtin differs from that of gcc. Move the
__clang__ branch of the ifdef ladder to the top and fix its
implementation (there is no such builtin as __sync_exchange),
so we can compile with clang again.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 1382435921-18438-1-git-send-email-peter.maydell@linaro.org
Signed-off-by: Anthony Liguori <aliguori@amazon.com>
Diffstat (limited to 'include')
| -rw-r--r-- | include/qemu/atomic.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/include/qemu/atomic.h b/include/qemu/atomic.h index 0aa8913301..492bce1c1b 100644 --- a/include/qemu/atomic.h +++ b/include/qemu/atomic.h @@ -168,14 +168,14 @@ #endif #ifndef atomic_xchg -#ifdef __ATOMIC_SEQ_CST +#if defined(__clang__) +#define atomic_xchg(ptr, i) __sync_swap(ptr, i) +#elif defined(__ATOMIC_SEQ_CST) #define atomic_xchg(ptr, i) ({ \ typeof(*ptr) _new = (i), _old; \ __atomic_exchange(ptr, &_new, &_old, __ATOMIC_SEQ_CST); \ _old; \ }) -#elif defined __clang__ -#define atomic_xchg(ptr, i) __sync_exchange(ptr, i) #else /* __sync_lock_test_and_set() is documented to be an acquire barrier only. */ #define atomic_xchg(ptr, i) (smp_mb(), __sync_lock_test_and_set(ptr, i)) |
