summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/sanitizer_common/sanitizer_atomic_clang.h
diff options
context:
space:
mode:
authorSimon Dardis <simon.dardis@mips.com>2017-12-21 19:01:32 +0000
committerSimon Dardis <simon.dardis@mips.com>2017-12-21 19:01:32 +0000
commit6e62834fef8b93428de0aaf7f926a41fc4ebe22e (patch)
tree58e363b0927bc0a57accf8c7abc996af2afd6070 /compiler-rt/lib/sanitizer_common/sanitizer_atomic_clang.h
parent410a289b79c675b3ae43fb85cbcf7a4371d869a5 (diff)
downloadbcm5719-llvm-6e62834fef8b93428de0aaf7f926a41fc4ebe22e.tar.gz
bcm5719-llvm-6e62834fef8b93428de0aaf7f926a41fc4ebe22e.zip
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. llvm-svn: 321292
Diffstat (limited to 'compiler-rt/lib/sanitizer_common/sanitizer_atomic_clang.h')
-rw-r--r--compiler-rt/lib/sanitizer_common/sanitizer_atomic_clang.h17
1 files changed, 10 insertions, 7 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_atomic_clang.h b/compiler-rt/lib/sanitizer_common/sanitizer_atomic_clang.h
index cd41c920f1b..65b3a38f0d5 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_atomic_clang.h
+++ b/compiler-rt/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
OpenPOWER on IntegriCloud