summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qsimd_x86_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/tools/qsimd_x86_p.h')
-rw-r--r--src/corelib/tools/qsimd_x86_p.h161
1 files changed, 79 insertions, 82 deletions
diff --git a/src/corelib/tools/qsimd_x86_p.h b/src/corelib/tools/qsimd_x86_p.h
index 45d5f2895f..c165ee0b56 100644
--- a/src/corelib/tools/qsimd_x86_p.h
+++ b/src/corelib/tools/qsimd_x86_p.h
@@ -59,169 +59,166 @@ QT_BEGIN_NAMESPACE
#define QT_FUNCTION_TARGET_STRING_AVX5124NNIW "avx5124nniw"
#define QT_FUNCTION_TARGET_STRING_AVX5124FMAPS "avx5124fmaps"
-enum CPUFeatures {
- // in CPUID Leaf 1, EDX:
- CpuFeatureSSE2 = 1,
+// used only to indicate that the CPU detection was initialized
+static const quint64 QSimdInitialized = Q_UINT64_C(1) << 0;
- // in CPUID Leaf 1, ECX:
- CpuFeatureSSE3 = 2,
- CpuFeatureSSSE3 = 3,
- CpuFeatureFMA = 4,
- CpuFeatureSSE4_1 = 5,
- CpuFeatureSSE4_2 = 6,
- CpuFeatureMOVBE = 7,
- CpuFeaturePOPCNT = 8,
- CpuFeatureAES = 9,
- CpuFeatureAVX = 10,
- CpuFeatureF16C = 11,
- CpuFeatureRDRND = 12,
+// in CPUID Leaf 1, EDX:
+static const quint64 CpuFeatureSSE2 = Q_UINT64_C(1) << 1;
- // in CPUID Leaf 7, Sub-leaf 0, EBX:
- CpuFeatureBMI = 13,
- CpuFeatureHLE = 14,
- CpuFeatureAVX2 = 15,
- CpuFeatureBMI2 = 16,
- CpuFeatureRTM = 17,
- CpuFeatureAVX512F = 18,
- CpuFeatureAVX512DQ = 19,
- CpuFeatureRDSEED = 20,
- CpuFeatureAVX512IFMA = 21,
- CpuFeatureAVX512PF = 22,
- CpuFeatureAVX512ER = 23,
- CpuFeatureAVX512CD = 24,
- CpuFeatureSHA = 25,
- CpuFeatureAVX512BW = 26,
- CpuFeatureAVX512VL = 27,
+// in CPUID Leaf 1, ECX:
+static const quint64 CpuFeatureSSE3 = Q_UINT64_C(1) << 2;
+static const quint64 CpuFeatureSSSE3 = Q_UINT64_C(1) << 3;
+static const quint64 CpuFeatureFMA = Q_UINT64_C(1) << 4;
+static const quint64 CpuFeatureSSE4_1 = Q_UINT64_C(1) << 5;
+static const quint64 CpuFeatureSSE4_2 = Q_UINT64_C(1) << 6;
+static const quint64 CpuFeatureMOVBE = Q_UINT64_C(1) << 7;
+static const quint64 CpuFeaturePOPCNT = Q_UINT64_C(1) << 8;
+static const quint64 CpuFeatureAES = Q_UINT64_C(1) << 9;
+static const quint64 CpuFeatureAVX = Q_UINT64_C(1) << 10;
+static const quint64 CpuFeatureF16C = Q_UINT64_C(1) << 11;
+static const quint64 CpuFeatureRDRND = Q_UINT64_C(1) << 12;
- // in CPUID Leaf 7, Sub-leaf 0, ECX:
- CpuFeatureAVX512VBMI = 28,
- CpuFeatureAVX512VBMI2 = 29,
- CpuFeatureGFNI = 30,
- CpuFeatureVAES = 31,
- CpuFeatureAVX512VNNI = 32,
- CpuFeatureAVX512BITALG = 33,
- CpuFeatureAVX512VPOPCNTDQ = 34,
+// in CPUID Leaf 7, Sub-leaf 0, EBX:
+static const quint64 CpuFeatureBMI = Q_UINT64_C(1) << 13;
+static const quint64 CpuFeatureHLE = Q_UINT64_C(1) << 14;
+static const quint64 CpuFeatureAVX2 = Q_UINT64_C(1) << 15;
+static const quint64 CpuFeatureBMI2 = Q_UINT64_C(1) << 16;
+static const quint64 CpuFeatureRTM = Q_UINT64_C(1) << 17;
+static const quint64 CpuFeatureAVX512F = Q_UINT64_C(1) << 18;
+static const quint64 CpuFeatureAVX512DQ = Q_UINT64_C(1) << 19;
+static const quint64 CpuFeatureRDSEED = Q_UINT64_C(1) << 20;
+static const quint64 CpuFeatureAVX512IFMA = Q_UINT64_C(1) << 21;
+static const quint64 CpuFeatureAVX512PF = Q_UINT64_C(1) << 22;
+static const quint64 CpuFeatureAVX512ER = Q_UINT64_C(1) << 23;
+static const quint64 CpuFeatureAVX512CD = Q_UINT64_C(1) << 24;
+static const quint64 CpuFeatureSHA = Q_UINT64_C(1) << 25;
+static const quint64 CpuFeatureAVX512BW = Q_UINT64_C(1) << 26;
+static const quint64 CpuFeatureAVX512VL = Q_UINT64_C(1) << 27;
- // in CPUID Leaf 7, Sub-leaf 0, EDX:
- CpuFeatureAVX5124NNIW = 35,
- CpuFeatureAVX5124FMAPS = 36,
+// in CPUID Leaf 7, Sub-leaf 0, ECX:
+static const quint64 CpuFeatureAVX512VBMI = Q_UINT64_C(1) << 28;
+static const quint64 CpuFeatureAVX512VBMI2 = Q_UINT64_C(1) << 29;
+static const quint64 CpuFeatureGFNI = Q_UINT64_C(1) << 30;
+static const quint64 CpuFeatureVAES = Q_UINT64_C(1) << 31;
+static const quint64 CpuFeatureAVX512VNNI = Q_UINT64_C(1) << 32;
+static const quint64 CpuFeatureAVX512BITALG = Q_UINT64_C(1) << 33;
+static const quint64 CpuFeatureAVX512VPOPCNTDQ = Q_UINT64_C(1) << 34;
- // used only to indicate that the CPU detection was initialized
- QSimdInitialized = 1
-};
+// in CPUID Leaf 7, Sub-leaf 0, EDX:
+static const quint64 CpuFeatureAVX5124NNIW = Q_UINT64_C(1) << 35;
+static const quint64 CpuFeatureAVX5124FMAPS = Q_UINT64_C(1) << 36;
static const quint64 qCompilerCpuFeatures = 0
#ifdef __SSE2__
- | (Q_UINT64_C(1) << CpuFeatureSSE2)
+ | (Q_UINT64_C(1) << 1) // CpuFeatureSSE2
#endif
#ifdef __SSE3__
- | (Q_UINT64_C(1) << CpuFeatureSSE3)
+ | (Q_UINT64_C(1) << 2) // CpuFeatureSSE3
#endif
#ifdef __SSSE3__
- | (Q_UINT64_C(1) << CpuFeatureSSSE3)
+ | (Q_UINT64_C(1) << 3) // CpuFeatureSSSE3
#endif
#ifdef __FMA__
- | (Q_UINT64_C(1) << CpuFeatureFMA)
+ | (Q_UINT64_C(1) << 4) // CpuFeatureFMA
#endif
#ifdef __SSE4_1__
- | (Q_UINT64_C(1) << CpuFeatureSSE4_1)
+ | (Q_UINT64_C(1) << 5) // CpuFeatureSSE4_1
#endif
#ifdef __SSE4_2__
- | (Q_UINT64_C(1) << CpuFeatureSSE4_2)
+ | (Q_UINT64_C(1) << 6) // CpuFeatureSSE4_2
#endif
#ifdef __MOVBE__
- | (Q_UINT64_C(1) << CpuFeatureMOVBE)
+ | (Q_UINT64_C(1) << 7) // CpuFeatureMOVBE
#endif
#ifdef __POPCNT__
- | (Q_UINT64_C(1) << CpuFeaturePOPCNT)
+ | (Q_UINT64_C(1) << 8) // CpuFeaturePOPCNT
#endif
#ifdef __AES__
- | (Q_UINT64_C(1) << CpuFeatureAES)
+ | (Q_UINT64_C(1) << 9) // CpuFeatureAES
#endif
#ifdef __AVX__
- | (Q_UINT64_C(1) << CpuFeatureAVX)
+ | (Q_UINT64_C(1) << 10) // CpuFeatureAVX
#endif
#ifdef __F16C__
- | (Q_UINT64_C(1) << CpuFeatureF16C)
+ | (Q_UINT64_C(1) << 11) // CpuFeatureF16C
#endif
#ifdef __RDRND__
- | (Q_UINT64_C(1) << CpuFeatureRDRND)
+ | (Q_UINT64_C(1) << 12) // CpuFeatureRDRND
#endif
#ifdef __BMI__
- | (Q_UINT64_C(1) << CpuFeatureBMI)
+ | (Q_UINT64_C(1) << 13) // CpuFeatureBMI
#endif
#ifdef __HLE__
- | (Q_UINT64_C(1) << CpuFeatureHLE)
+ | (Q_UINT64_C(1) << 14) // CpuFeatureHLE
#endif
#ifdef __AVX2__
- | (Q_UINT64_C(1) << CpuFeatureAVX2)
+ | (Q_UINT64_C(1) << 15) // CpuFeatureAVX2
#endif
#ifdef __BMI2__
- | (Q_UINT64_C(1) << CpuFeatureBMI2)
+ | (Q_UINT64_C(1) << 16) // CpuFeatureBMI2
#endif
#ifdef __RTM__
- | (Q_UINT64_C(1) << CpuFeatureRTM)
+ | (Q_UINT64_C(1) << 17) // CpuFeatureRTM
#endif
#ifdef __AVX512F__
- | (Q_UINT64_C(1) << CpuFeatureAVX512F)
+ | (Q_UINT64_C(1) << 18) // CpuFeatureAVX512F
#endif
#ifdef __AVX512DQ__
- | (Q_UINT64_C(1) << CpuFeatureAVX512DQ)
+ | (Q_UINT64_C(1) << 19) // CpuFeatureAVX512DQ
#endif
#ifdef __RDSEED__
- | (Q_UINT64_C(1) << CpuFeatureRDSEED)
+ | (Q_UINT64_C(1) << 20) // CpuFeatureRDSEED
#endif
#ifdef __AVX512IFMA__
- | (Q_UINT64_C(1) << CpuFeatureAVX512IFMA)
+ | (Q_UINT64_C(1) << 21) // CpuFeatureAVX512IFMA
#endif
#ifdef __AVX512PF__
- | (Q_UINT64_C(1) << CpuFeatureAVX512PF)
+ | (Q_UINT64_C(1) << 22) // CpuFeatureAVX512PF
#endif
#ifdef __AVX512ER__
- | (Q_UINT64_C(1) << CpuFeatureAVX512ER)
+ | (Q_UINT64_C(1) << 23) // CpuFeatureAVX512ER
#endif
#ifdef __AVX512CD__
- | (Q_UINT64_C(1) << CpuFeatureAVX512CD)
+ | (Q_UINT64_C(1) << 24) // CpuFeatureAVX512CD
#endif
#ifdef __SHA__
- | (Q_UINT64_C(1) << CpuFeatureSHA)
+ | (Q_UINT64_C(1) << 25) // CpuFeatureSHA
#endif
#ifdef __AVX512BW__
- | (Q_UINT64_C(1) << CpuFeatureAVX512BW)
+ | (Q_UINT64_C(1) << 26) // CpuFeatureAVX512BW
#endif
#ifdef __AVX512VL__
- | (Q_UINT64_C(1) << CpuFeatureAVX512VL)
+ | (Q_UINT64_C(1) << 27) // CpuFeatureAVX512VL
#endif
#ifdef __AVX512VBMI__
- | (Q_UINT64_C(1) << CpuFeatureAVX512VBMI)
+ | (Q_UINT64_C(1) << 28) // CpuFeatureAVX512VBMI
#endif
#ifdef __AVX512VBMI2__
- | (Q_UINT64_C(1) << CpuFeatureAVX512VBMI2)
+ | (Q_UINT64_C(1) << 29) // CpuFeatureAVX512VBMI2
#endif
#ifdef __GFNI__
- | (Q_UINT64_C(1) << CpuFeatureGFNI)
+ | (Q_UINT64_C(1) << 30) // CpuFeatureGFNI
#endif
#ifdef __VAES__
- | (Q_UINT64_C(1) << CpuFeatureVAES)
+ | (Q_UINT64_C(1) << 31) // CpuFeatureVAES
#endif
#ifdef __AVX512VNNI__
- | (Q_UINT64_C(1) << CpuFeatureAVX512VNNI)
+ | (Q_UINT64_C(1) << 32) // CpuFeatureAVX512VNNI
#endif
#ifdef __AVX512BITALG__
- | (Q_UINT64_C(1) << CpuFeatureAVX512BITALG)
+ | (Q_UINT64_C(1) << 33) // CpuFeatureAVX512BITALG
#endif
#ifdef __AVX512VPOPCNTDQ__
- | (Q_UINT64_C(1) << CpuFeatureAVX512VPOPCNTDQ)
+ | (Q_UINT64_C(1) << 34) // CpuFeatureAVX512VPOPCNTDQ
#endif
#ifdef __AVX5124NNIW__
- | (Q_UINT64_C(1) << CpuFeatureAVX5124NNIW)
+ | (Q_UINT64_C(1) << 35) // CpuFeatureAVX5124NNIW
#endif
#ifdef __AVX5124FMAPS__
- | (Q_UINT64_C(1) << CpuFeatureAVX5124FMAPS)
+ | (Q_UINT64_C(1) << 36) // CpuFeatureAVX5124FMAPS
#endif
;
QT_END_NAMESPACE
#endif // QSIMD_X86_P_H
-