From b0f529381ec259ba0348f4ac5ee3e1227dc49805 Mon Sep 17 00:00:00 2001
From: Esme Povirk <[EMAIL REDACTED]>
Date: Fri, 17 Jul 2026 20:15:59 +0000
Subject: [PATCH] Fix build on arm64ec.
(cherry picked from commit 3fc8509b367231cd2e840c0ff76e4efc8e405f6e)
---
include/SDL3/SDL_atomic.h | 2 +-
src/cpuinfo/SDL_cpuinfo.c | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/SDL3/SDL_atomic.h b/include/SDL3/SDL_atomic.h
index f1a8e0638d446..40521c1dbae33 100644
--- a/include/SDL3/SDL_atomic.h
+++ b/include/SDL3/SDL_atomic.h
@@ -355,7 +355,7 @@ typedef void (*SDL_KernelMemoryBarrierFunc)();
*/
#define SDL_CPUPauseInstruction() DoACPUPauseInACompilerAndArchitectureSpecificWay
-#elif (defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))
+#elif (defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__)) && !defined(__arm64ec__)
#define SDL_CPUPauseInstruction() __asm__ __volatile__("pause\n") /* Some assemblers can't do REP NOP, so go with PAUSE. */
#elif (defined(__arm__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7) || defined(__aarch64__)
#define SDL_CPUPauseInstruction() __asm__ __volatile__("yield" ::: "memory")
diff --git a/src/cpuinfo/SDL_cpuinfo.c b/src/cpuinfo/SDL_cpuinfo.c
index 966a5ae79ac5c..a0bae62721b13 100644
--- a/src/cpuinfo/SDL_cpuinfo.c
+++ b/src/cpuinfo/SDL_cpuinfo.c
@@ -153,7 +153,7 @@ static int CPU_haveCPUID(void)
:
: "%eax", "%ecx"
);
-#elif (defined(__GNUC__) || defined(__llvm__)) && defined(__x86_64__)
+#elif (defined(__GNUC__) || defined(__llvm__)) && defined(__x86_64__) && !defined(__arm64ec__)
/* Technically, if this is being compiled under __x86_64__ then it has
CPUid by definition. But it's nice to be able to prove it. :) */
__asm__ (
@@ -236,7 +236,7 @@ static int CPU_haveCPUID(void)
" popl %%ebx \n" \
: "=a"(a), "=S"(b), "=c"(c), "=d"(d) \
: "a"(func))
-#elif (defined(__GNUC__) || defined(__llvm__)) && defined(__x86_64__)
+#elif (defined(__GNUC__) || defined(__llvm__)) && defined(__x86_64__) && !defined(__arm64ec__)
#define cpuid(func, a, b, c, d) \
__asm__ __volatile__( \
" pushq %%rbx \n" \
@@ -303,7 +303,7 @@ static void CPU_calcCPUIDFeatures(void)
// Check to make sure we can call xgetbv
if (c & 0x08000000) {
// Call xgetbv to see if YMM (etc) register state is saved
-#if (defined(__GNUC__) || defined(__llvm__)) && (defined(__i386__) || defined(__x86_64__))
+#if (defined(__GNUC__) || defined(__llvm__)) && (defined(__i386__) || defined(__x86_64__)) && !defined(__arm64ec__)
__asm__(".byte 0x0f, 0x01, 0xd0"
: "=a"(a)
: "c"(0)