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;
 	}