Mercurial > vec
diff src/cpu.c @ 28:c6c99ab1088a
*: add min/max functions and a big big refactor (again)
agh, this time I added a few more implementations (and generally
made the code just a little faster...)
author | Paper <paper@tflc.us> |
---|---|
date | Thu, 24 Apr 2025 00:54:02 -0400 |
parents | 92156fe32755 |
children | bf6ad516f1e6 |
line wrap: on
line diff
--- a/src/cpu.c Mon Nov 25 00:33:02 2024 -0500 +++ b/src/cpu.c Thu Apr 24 00:54:02 2025 -0400 @@ -362,7 +362,29 @@ if (vec_CPU_OSSavesYMM && (vec_CPU_CPUIDMaxFunction >= 7)) { int a, b, c, d; VEC_CPU_CPUID(7, a, b, c, d); - return b & 0x00000020; + return b & 0x00010000; + (void)a, (void)c, (void)d; + } + return 0; +} + +static inline int vec_CPU_have_AVX512DQ(void) +{ + if (vec_CPU_OSSavesYMM && (vec_CPU_CPUIDMaxFunction >= 7)) { + int a, b, c, d; + VEC_CPU_CPUID(7, a, b, c, d); + return b & 0x00020000; + (void)a, (void)c, (void)d; + } + return 0; +} + +static inline int vec_CPU_have_AVX512BW(void) +{ + if (vec_CPU_OSSavesYMM && (vec_CPU_CPUIDMaxFunction >= 7)) { + int a, b, c, d; + VEC_CPU_CPUID(7, a, b, c, d); + return b & 0x40000000; (void)a, (void)c, (void)d; } return 0; @@ -491,6 +513,10 @@ vec_CPU_features |= VEC_CPU_HAS_AVX2; if (vec_CPU_have_AVX512F()) vec_CPU_features |= VEC_CPU_HAS_AVX512F; + if (vec_CPU_have_AVX512BW()) + vec_CPU_features |= VEC_CPU_HAS_AVX512BW; + if (vec_CPU_have_AVX512DQ()) + vec_CPU_features |= VEC_CPU_HAS_AVX512DQ; if (vec_CPU_have_NEON()) vec_CPU_features |= VEC_CPU_HAS_NEON; }