summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/sanitizer_common
diff options
context:
space:
mode:
Diffstat (limited to 'compiler-rt/lib/sanitizer_common')
-rw-r--r--compiler-rt/lib/sanitizer_common/sanitizer_atomic_msvc.h21
1 files changed, 14 insertions, 7 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_atomic_msvc.h b/compiler-rt/lib/sanitizer_common/sanitizer_atomic_msvc.h
index 6bad94e3592..cf49631a75e 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_atomic_msvc.h
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_atomic_msvc.h
@@ -15,7 +15,14 @@
#ifndef SANITIZER_ATOMIC_MSVC_H
#define SANITIZER_ATOMIC_MSVC_H
-#include <intrin.h>
+void _ReadWriteBarrier();
+#pragma intrinsic(_ReadWriteBarrier)
+void _mm_mfence();
+#pragma intrinsic(_mm_mfence)
+void _mm_pause();
+#pragma intrinsic(_mm_pause)
+long _InterlockedExchangeAdd(long volatile * Addend, long Value); // NOLINT
+#pragma intrinsic(_InterlockedExchangeAdd)
namespace __sanitizer {
@@ -79,9 +86,9 @@ INLINE u8 atomic_exchange(volatile atomic_uint8_t *a,
DCHECK(!((uptr)a % sizeof(*a)));
__asm {
mov eax, a
- mov cx, v
- xchg [eax], cx // NOLINT
- mov v, cx
+ mov cl, v
+ xchg [eax], cl // NOLINT
+ mov v, cl
}
return v;
}
@@ -92,9 +99,9 @@ INLINE u16 atomic_exchange(volatile atomic_uint16_t *a,
DCHECK(!((uptr)a % sizeof(*a)));
__asm {
mov eax, a
- mov cl, v
- xchg [eax], cl // NOLINT
- mov v, cl
+ mov cx, v
+ xchg [eax], cx // NOLINT
+ mov v, cx
}
return v;
}
OpenPOWER on IntegriCloud