From 98c2fc5655618356f20251467804f09584a6815e Mon Sep 17 00:00:00 2001 From: AntoinePrv Date: Thu, 21 May 2026 19:03:25 +0200 Subject: [PATCH] Fix avx512vp cpuid --- .../xsimd/config/xsimd_cpu_features_x86.hpp | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/include/xsimd/config/xsimd_cpu_features_x86.hpp b/include/xsimd/config/xsimd_cpu_features_x86.hpp index dc98b549b..4332f6c89 100644 --- a/include/xsimd/config/xsimd_cpu_features_x86.hpp +++ b/include/xsimd/config/xsimd_cpu_features_x86.hpp @@ -857,7 +857,12 @@ namespace xsimd inline bool avx() const noexcept { return avx_enabled() && leaf1().all_bits_set(); } - inline bool avx_128() const noexcept { return sse_enabled() && leaf1().all_bits_set(); } + inline bool avx_128() const noexcept + { + // Avx 128 bit instructions use the same xmm registers from SSE so checking if those + // are enabled is sufficient. + return sse_enabled() && leaf1().all_bits_set(); + } inline bool aes_ni() const noexcept { return sse_enabled() && leaf1().all_bits_set(); } @@ -869,7 +874,12 @@ namespace xsimd inline bool avx2() const noexcept { return avx_enabled() && leaf7().all_bits_set(); } - inline bool avx2_128() const noexcept { return sse_enabled() && leaf7().all_bits_set(); } + inline bool avx2_128() const noexcept + { + // Avx 128 bit instructions use the same xmm registers from SSE so checking if those + // are enabled is sufficient. + return sse_enabled() && leaf7().all_bits_set(); + } inline bool bmi2() const noexcept { return leaf7().all_bits_set(); } @@ -893,11 +903,25 @@ namespace xsimd inline bool avx512bw() const noexcept { return avx512_enabled() && leaf7().all_bits_set(); } - inline bool avx512vl() const noexcept { return avx512_enabled() && leaf7().all_bits_set(); } + inline bool avx512vl() const noexcept + { + return xcr0().all_bits_set() + && leaf7().all_bits_set(); + } - inline bool avx512vl_128() const noexcept { return avx512vl() && osxsave(); } + inline bool avx512vl_128() const noexcept + { + // AVX512 128 bit instructions use the same xmm registers from SSE so checking if those + // are enabled is sufficient. + return sse_enabled() && avx512vl(); + } - inline bool avx512vl_256() const noexcept { return avx512vl_128(); } + inline bool avx512vl_256() const noexcept + { + // AVX512 256 bit instructions use the same ymm registers from AVX so checking if those + // are enabled is sufficient. + return avx_enabled() && avx512vl(); + } inline bool avx512vbmi() const noexcept { return avx512_enabled() && leaf7().all_bits_set(); }