diff options
author | Simon Dardis <simon.dardis@mips.com> | 2017-12-21 19:01:32 +0000 |
---|---|---|
committer | Simon Dardis <simon.dardis@mips.com> | 2017-12-21 19:01:32 +0000 |
commit | 128f286f13d7b9326d2cb82b898338e6d8fd98f7 (patch) | |
tree | 283f3d8d6ad8d29bef47523e3fd5fad26f71e464 /lib/sanitizer_common/sanitizer_atomic_clang.h | |
parent | 5d934695c27ac0a5e81340dda48f8ae80e53fbb9 (diff) |
Revert "[mips][compiler-rt] Provide 64bit atomic add and sub"
This reverts commit r321260. It appears to have broken the sanitizer
bot sanitizer-ppc64be-linux.
http://lab.llvm.org:8011/builders/sanitizer-ppc64be-linux/builds/5029
Reverting to see if the buildbot turns green.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@321292 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_atomic_clang.h')
-rw-r--r-- | lib/sanitizer_common/sanitizer_atomic_clang.h | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/lib/sanitizer_common/sanitizer_atomic_clang.h b/lib/sanitizer_common/sanitizer_atomic_clang.h index cd41c920f..65b3a38f0 100644 --- a/lib/sanitizer_common/sanitizer_atomic_clang.h +++ b/lib/sanitizer_common/sanitizer_atomic_clang.h @@ -78,7 +78,17 @@ INLINE bool atomic_compare_exchange_strong(volatile T *a, typename T::Type *cmp, typedef typename T::Type Type; Type cmpv = *cmp; Type prev; +#if defined(_MIPS_SIM) && _MIPS_SIM == _ABIO32 + if (sizeof(*a) == 8) { + Type volatile *val_ptr = const_cast<Type volatile *>(&a->val_dont_use); + prev = __mips_sync_val_compare_and_swap<u64>( + reinterpret_cast<u64 volatile *>(val_ptr), (u64)cmpv, (u64)xchg); + } else { + prev = __sync_val_compare_and_swap(&a->val_dont_use, cmpv, xchg); + } +#else prev = __sync_val_compare_and_swap(&a->val_dont_use, cmpv, xchg); +#endif if (prev == cmpv) return true; *cmp = prev; return false; @@ -94,13 +104,6 @@ INLINE bool atomic_compare_exchange_weak(volatile T *a, } // namespace __sanitizer -// This include provides explicit template instantiations for atomic_uint64_t -// on MIPS32, which does not directly support 8 byte atomics. It has to -// proceed the template definitions above. -#if defined(_MIPS_SIM) && defined(_ABIO32) - #include "sanitizer_atomic_clang_mips.h" -#endif - #undef ATOMIC_ORDER #endif // SANITIZER_ATOMIC_CLANG_H |