From 0776d764a411217bc42a4a442717ee64508638a4 Mon Sep 17 00:00:00 2001 From: Billy Laws Date: Sat, 9 Mar 2024 05:43:46 +0000 Subject: [PATCH] build: Support building for ARM64EC When targeting ARM64EC, both __x86_64__ and _M_X86_64 are defined but not all x86 intrinsics are present, treat EC as regular ARM64 so the native intrinsics are used instead. --- src/d3d9/d3d9_device.cpp | 2 +- src/util/util_bit.h | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index bfbbe2a4..5b862c05 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -5355,7 +5355,7 @@ namespace dxvk { // Round to nearest _controlfp(_RC_NEAR, _MCW_RC); -#elif (defined(__GNUC__) || defined(__MINGW32__)) && (defined(__i386__) || defined(__x86_64__) || defined(__ia64)) +#elif (defined(__GNUC__) || defined(__MINGW32__)) && (defined(__i386__) || (defined(__x86_64__) && !defined(__arm64ec__)) || defined(__ia64)) // For GCC/MinGW we can use inline asm to set it. // This only works for x86 and x64 processors however. diff --git a/src/util/util_bit.h b/src/util/util_bit.h index 9f43a9f0..1df6c17f 100644 --- a/src/util/util_bit.h +++ b/src/util/util_bit.h @@ -1,11 +1,12 @@ #pragma once -#if defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86) || defined(__e2k__) +#if (defined(__x86_64__) && !defined(__arm64ec__)) || (defined(_M_X64) && !defined(_M_ARM64EC)) \ + || defined(__i386__) || defined(_M_IX86) || defined(__e2k__) #define DXVK_ARCH_X86 #if defined(__x86_64__) || defined(_M_X64) || defined(__e2k__) #define DXVK_ARCH_X86_64 #endif -#elif defined(__aarch64__) || defined(_M_ARM64) +#elif defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) #define DXVK_ARCH_ARM64 #else #error "Unknown CPU Architecture"