headers: Implement __debugbreak, MemoryBarrier and YieldProcessor for armv7 and aarch64
Signed-off-by: Martin Storsjö <martin@martin.st>
diff --git a/mingw-w64-headers/crt/_mingw.h.in b/mingw-w64-headers/crt/_mingw.h.in
index 01eff66..25513d7 100644
--- a/mingw-w64-headers/crt/_mingw.h.in
+++ b/mingw-w64-headers/crt/_mingw.h.in
@@ -580,7 +580,15 @@
void __cdecl __debugbreak(void);
__MINGW_INTRIN_INLINE void __cdecl __debugbreak(void)
{
+#if defined(__i386__) || defined(__x86_64__)
__asm__ __volatile__("int {$}3":);
+#elif defined(__arm__)
+ __asm__ __volatile__("udf #1");
+#elif defined(__aarch64__)
+ __asm__ __volatile__("brk #0xf000");
+#else
+ __asm__ __volatile__("unimplemented");
+#endif
}
#endif
#endif
diff --git a/mingw-w64-headers/include/winnt.h b/mingw-w64-headers/include/winnt.h
index 0decf49..5133c1f 100644
--- a/mingw-w64-headers/include/winnt.h
+++ b/mingw-w64-headers/include/winnt.h
@@ -1846,6 +1846,9 @@
#define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePointer
#define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePointer
+#define YieldProcessor() __asm__ __volatile__("dmb ishst\n\tyield":::"memory")
+#define MemoryBarrier() __asm__ __volatile__("dmb":::"memory")
+
#ifdef __cplusplus
}
#endif
@@ -2055,6 +2058,9 @@
#define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePointer
#define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePointer
+#define YieldProcessor() __asm__ __volatile__("dmb ishst\n\tyield":::"memory")
+#define MemoryBarrier() __asm__ __volatile__("dmb sy":::"memory")
+
#ifdef __cplusplus
}
#endif