From ef9188fa6524c63d59c107a0a5936cb50dbc9bb6 Mon Sep 17 00:00:00 2001 From: Ruijie Shi Date: Wed, 29 Apr 2026 16:41:33 -0700 Subject: [PATCH 1/3] Skip including cpuid.h under Windows Clang build where _MSC_VER is defined --- Inc/DirectXMath.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Inc/DirectXMath.h b/Inc/DirectXMath.h index cd6dfcc..417f34f 100644 --- a/Inc/DirectXMath.h +++ b/Inc/DirectXMath.h @@ -124,7 +124,7 @@ #pragma warning(pop) #endif -#if (defined(__clang__) || defined(__GNUC__)) && (__x86_64__ || __i386__) && !defined(__MINGW32__) +#if (defined(__clang__) || defined(__GNUC__)) && (__x86_64__ || __i386__) && !defined(__MINGW32__) && !defined(_MSC_VER) #include #endif From 7907aa53bb6d6a3bcf7a28394a16109df2b6b8cc Mon Sep 17 00:00:00 2001 From: Ruijie Shi Date: Thu, 30 Apr 2026 09:14:44 -0700 Subject: [PATCH 2/3] Skip _cpuid_count usage under Windows Clang-cl build --- Extensions/DirectXMathAVX2.h | 2 +- Inc/DirectXMathMisc.inl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Extensions/DirectXMathAVX2.h b/Extensions/DirectXMathAVX2.h index 57a7b26..3ea598a 100644 --- a/Extensions/DirectXMathAVX2.h +++ b/Extensions/DirectXMathAVX2.h @@ -48,7 +48,7 @@ namespace DirectX if ((CPUInfo[2] & 0x38081001) != 0x38081001) return false; - #if defined(__clang__) || defined(__GNUC__) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid_count(7, 0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuidex(CPUInfo, 7, 0); diff --git a/Inc/DirectXMathMisc.inl b/Inc/DirectXMathMisc.inl index 5a38db1..71ca154 100644 --- a/Inc/DirectXMathMisc.inl +++ b/Inc/DirectXMathMisc.inl @@ -2022,7 +2022,7 @@ inline bool XMVerifyCPUSupport() noexcept return false; // No SSE2/SSE support #if defined(__AVX2__) || defined(_XM_AVX2_INTRINSICS_) -#if defined(__clang__) || defined(__GNUC__) +#if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid_count(7, 0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuidex(CPUInfo, 7, 0); From 40b6ee7f8da28d1a95bf80eaa263dee30c064f11 Mon Sep 17 00:00:00 2001 From: Ruijie Shi Date: Fri, 1 May 2026 15:49:01 -0700 Subject: [PATCH 3/3] Address PR feedback --- Extensions/DirectXMathAVX.h | 4 ++-- Extensions/DirectXMathAVX2.h | 4 ++-- Extensions/DirectXMathBE.h | 4 ++-- Extensions/DirectXMathF16C.h | 4 ++-- Extensions/DirectXMathFMA3.h | 4 ++-- Extensions/DirectXMathFMA4.h | 12 ++++++------ Extensions/DirectXMathSSE3.h | 4 ++-- Extensions/DirectXMathSSE4.h | 4 ++-- Inc/DirectXMathMisc.inl | 4 ++-- 9 files changed, 22 insertions(+), 22 deletions(-) diff --git a/Extensions/DirectXMathAVX.h b/Extensions/DirectXMathAVX.h index b9ae7eb..ace043b 100644 --- a/Extensions/DirectXMathAVX.h +++ b/Extensions/DirectXMathAVX.h @@ -28,7 +28,7 @@ namespace DirectX // See https://msdn.microsoft.com/en-us/library/hskdteyh.aspx int CPUInfo[4] = { -1 }; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 0); @@ -37,7 +37,7 @@ namespace DirectX if (CPUInfo[0] < 1) return false; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(1, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 1); diff --git a/Extensions/DirectXMathAVX2.h b/Extensions/DirectXMathAVX2.h index 3ea598a..c149762 100644 --- a/Extensions/DirectXMathAVX2.h +++ b/Extensions/DirectXMathAVX2.h @@ -29,7 +29,7 @@ namespace DirectX // See https://msdn.microsoft.com/en-us/library/hskdteyh.aspx int CPUInfo[4] = { -1 }; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 0); @@ -38,7 +38,7 @@ namespace DirectX if (CPUInfo[0] < 7) return false; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(1, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 1); diff --git a/Extensions/DirectXMathBE.h b/Extensions/DirectXMathBE.h index e5fedda..4e30a18 100644 --- a/Extensions/DirectXMathBE.h +++ b/Extensions/DirectXMathBE.h @@ -59,7 +59,7 @@ namespace DirectX // See https://msdn.microsoft.com/en-us/library/hskdteyh.aspx int CPUInfo[4] = { -1 }; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 0); @@ -68,7 +68,7 @@ namespace DirectX if (CPUInfo[0] < 1) return false; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(1, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 1); diff --git a/Extensions/DirectXMathF16C.h b/Extensions/DirectXMathF16C.h index eb6c47c..80a1c5e 100644 --- a/Extensions/DirectXMathF16C.h +++ b/Extensions/DirectXMathF16C.h @@ -29,7 +29,7 @@ namespace DirectX // See https://msdn.microsoft.com/en-us/library/hskdteyh.aspx int CPUInfo[4] = { -1 }; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 0); @@ -38,7 +38,7 @@ namespace DirectX if (CPUInfo[0] < 1) return false; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(1, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 1); diff --git a/Extensions/DirectXMathFMA3.h b/Extensions/DirectXMathFMA3.h index 9f8f30e..db24bc3 100644 --- a/Extensions/DirectXMathFMA3.h +++ b/Extensions/DirectXMathFMA3.h @@ -28,7 +28,7 @@ namespace DirectX // See https://msdn.microsoft.com/en-us/library/hskdteyh.aspx int CPUInfo[4] = { -1 }; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 0); @@ -37,7 +37,7 @@ namespace DirectX if (CPUInfo[0] < 1) return false; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(1, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 1); diff --git a/Extensions/DirectXMathFMA4.h b/Extensions/DirectXMathFMA4.h index 1c35751..1fc15c4 100644 --- a/Extensions/DirectXMathFMA4.h +++ b/Extensions/DirectXMathFMA4.h @@ -33,7 +33,7 @@ namespace DirectX // See https://msdn.microsoft.com/en-us/library/hskdteyh.aspx int CPUInfo[4] = { -1 }; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 0); @@ -42,7 +42,7 @@ namespace DirectX if (CPUInfo[0] < 1) return false; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(1, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 1); @@ -52,20 +52,20 @@ namespace DirectX if ((CPUInfo[2] & 0x18000000) != 0x18000000) return false; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(0x80000000, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else - __cpuid(CPUInfo, 0x80000000); + __cpuid(CPUInfo, static_cast(0x80000000)); #endif if (uint32_t(CPUInfo[0]) < 0x80000001u) return false; // We check for FMA4 - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(0x80000001, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else - __cpuid(CPUInfo, 0x80000001); + __cpuid(CPUInfo, static_cast(0x80000001)); #endif return (CPUInfo[2] & 0x10000); diff --git a/Extensions/DirectXMathSSE3.h b/Extensions/DirectXMathSSE3.h index 8f2ec71..1e57916 100644 --- a/Extensions/DirectXMathSSE3.h +++ b/Extensions/DirectXMathSSE3.h @@ -29,7 +29,7 @@ namespace DirectX // See https://msdn.microsoft.com/en-us/library/hskdteyh.aspx int CPUInfo[4] = { -1 }; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 0); @@ -37,7 +37,7 @@ namespace DirectX if (CPUInfo[0] < 1) return false; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(1, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 1); diff --git a/Extensions/DirectXMathSSE4.h b/Extensions/DirectXMathSSE4.h index 2f45905..5c51131 100644 --- a/Extensions/DirectXMathSSE4.h +++ b/Extensions/DirectXMathSSE4.h @@ -29,7 +29,7 @@ namespace DirectX // See https://msdn.microsoft.com/en-us/library/hskdteyh.aspx int CPUInfo[4] = { -1 }; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 0); @@ -37,7 +37,7 @@ namespace DirectX if (CPUInfo[0] < 1) return false; - #if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) + #if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(1, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 1); diff --git a/Inc/DirectXMathMisc.inl b/Inc/DirectXMathMisc.inl index 71ca154..49c449b 100644 --- a/Inc/DirectXMathMisc.inl +++ b/Inc/DirectXMathMisc.inl @@ -1973,7 +1973,7 @@ inline bool XMVerifyCPUSupport() noexcept { #if defined(_XM_SSE_INTRINSICS_) && !defined(__powerpc64__) && !defined(_XM_NO_INTRINSICS_) int CPUInfo[4] = { -1 }; -#if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) +#if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 0); @@ -1987,7 +1987,7 @@ inline bool XMVerifyCPUSupport() noexcept return false; #endif -#if (defined(__clang__) || defined(__GNUC__)) && defined(__cpuid) +#if (defined(__clang__) || defined(__GNUC__)) && !defined(_MSC_VER) __cpuid(1, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #else __cpuid(CPUInfo, 1);