summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qsimd_x86_p.h
blob: 2434e2b7977bd7b89d4bb142af8fbe06c7190b68 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
// This is a generated file. DO NOT EDIT.
// Please see util/x86simdgen/generate.pl
#ifndef QSIMD_P_H
#  error "Please include <private/qsimd_p.h> instead"
#endif
#ifndef QSIMD_X86_P_H
#define QSIMD_X86_P_H

#include "qsimd_p.h"

//
//  W A R N I N G
//  -------------
//
// This file is not part of the Qt API.  It exists purely as an
// implementation detail.  This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//

QT_BEGIN_NAMESPACE

// used only to indicate that the CPU detection was initialized
#define QSimdInitialized                            (Q_UINT64_C(1) << 0)

// in CPUID Leaf 1, EDX:
#define CpuFeatureSSE2                              (Q_UINT64_C(1) << 1)
#define QT_FUNCTION_TARGET_STRING_SSE2              "sse2"

// in CPUID Leaf 1, ECX:
#define CpuFeatureSSE3                              (Q_UINT64_C(1) << 2)
#define QT_FUNCTION_TARGET_STRING_SSE3              "sse3"
#define CpuFeatureSSSE3                             (Q_UINT64_C(1) << 3)
#define QT_FUNCTION_TARGET_STRING_SSSE3             "ssse3"
#define CpuFeatureFMA                               (Q_UINT64_C(1) << 4)
#define QT_FUNCTION_TARGET_STRING_FMA               "fma"
#define CpuFeatureSSE4_1                            (Q_UINT64_C(1) << 5)
#define QT_FUNCTION_TARGET_STRING_SSE4_1            "sse4.1"
#define CpuFeatureSSE4_2                            (Q_UINT64_C(1) << 6)
#define QT_FUNCTION_TARGET_STRING_SSE4_2            "sse4.2"
#define CpuFeatureMOVBE                             (Q_UINT64_C(1) << 7)
#define QT_FUNCTION_TARGET_STRING_MOVBE             "movbe"
#define CpuFeaturePOPCNT                            (Q_UINT64_C(1) << 8)
#define QT_FUNCTION_TARGET_STRING_POPCNT            "popcnt"
#define CpuFeatureAES                               (Q_UINT64_C(1) << 9)
#define QT_FUNCTION_TARGET_STRING_AES               "aes,sse4.2"
#define CpuFeatureAVX                               (Q_UINT64_C(1) << 10)
#define QT_FUNCTION_TARGET_STRING_AVX               "avx"
#define CpuFeatureF16C                              (Q_UINT64_C(1) << 11)
#define QT_FUNCTION_TARGET_STRING_F16C              "f16c"
#define CpuFeatureRDRND                             (Q_UINT64_C(1) << 12)
#define QT_FUNCTION_TARGET_STRING_RDRND             "rdrnd"

// in CPUID Leaf 7, Sub-leaf 0, EBX:
#define CpuFeatureBMI                               (Q_UINT64_C(1) << 13)
#define QT_FUNCTION_TARGET_STRING_BMI               "bmi"
#define CpuFeatureHLE                               (Q_UINT64_C(1) << 14)
#define QT_FUNCTION_TARGET_STRING_HLE               "hle"
#define CpuFeatureAVX2                              (Q_UINT64_C(1) << 15)
#define QT_FUNCTION_TARGET_STRING_AVX2              "avx2"
#define CpuFeatureBMI2                              (Q_UINT64_C(1) << 16)
#define QT_FUNCTION_TARGET_STRING_BMI2              "bmi2"
#define CpuFeatureRTM                               (Q_UINT64_C(1) << 17)
#define QT_FUNCTION_TARGET_STRING_RTM               "rtm"
#define CpuFeatureAVX512F                           (Q_UINT64_C(1) << 18)
#define QT_FUNCTION_TARGET_STRING_AVX512F           "avx512f"
#define CpuFeatureAVX512DQ                          (Q_UINT64_C(1) << 19)
#define QT_FUNCTION_TARGET_STRING_AVX512DQ          "avx512dq"
#define CpuFeatureRDSEED                            (Q_UINT64_C(1) << 20)
#define QT_FUNCTION_TARGET_STRING_RDSEED            "rdseed"
#define CpuFeatureAVX512IFMA                        (Q_UINT64_C(1) << 21)
#define QT_FUNCTION_TARGET_STRING_AVX512IFMA        "avx512ifma"
#define CpuFeatureAVX512PF                          (Q_UINT64_C(1) << 22)
#define QT_FUNCTION_TARGET_STRING_AVX512PF          "avx512pf"
#define CpuFeatureAVX512ER                          (Q_UINT64_C(1) << 23)
#define QT_FUNCTION_TARGET_STRING_AVX512ER          "avx512er"
#define CpuFeatureAVX512CD                          (Q_UINT64_C(1) << 24)
#define QT_FUNCTION_TARGET_STRING_AVX512CD          "avx512cd"
#define CpuFeatureSHA                               (Q_UINT64_C(1) << 25)
#define QT_FUNCTION_TARGET_STRING_SHA               "sha"
#define CpuFeatureAVX512BW                          (Q_UINT64_C(1) << 26)
#define QT_FUNCTION_TARGET_STRING_AVX512BW          "avx512bw"
#define CpuFeatureAVX512VL                          (Q_UINT64_C(1) << 27)
#define QT_FUNCTION_TARGET_STRING_AVX512VL          "avx512vl"

// in CPUID Leaf 7, Sub-leaf 0, ECX:
#define CpuFeatureAVX512VBMI                        (Q_UINT64_C(1) << 28)
#define QT_FUNCTION_TARGET_STRING_AVX512VBMI        "avx512vbmi"
#define CpuFeatureAVX512VBMI2                       (Q_UINT64_C(1) << 29)
#define QT_FUNCTION_TARGET_STRING_AVX512VBMI2       "avx512vbmi2"
#define CpuFeatureGFNI                              (Q_UINT64_C(1) << 30)
#define QT_FUNCTION_TARGET_STRING_GFNI              "gfni"
#define CpuFeatureVAES                              (Q_UINT64_C(1) << 31)
#define QT_FUNCTION_TARGET_STRING_VAES              "vaes"
#define CpuFeatureAVX512VNNI                        (Q_UINT64_C(1) << 32)
#define QT_FUNCTION_TARGET_STRING_AVX512VNNI        "avx512vnni"
#define CpuFeatureAVX512BITALG                      (Q_UINT64_C(1) << 33)
#define QT_FUNCTION_TARGET_STRING_AVX512BITALG      "avx512bitalg"
#define CpuFeatureAVX512VPOPCNTDQ                   (Q_UINT64_C(1) << 34)
#define QT_FUNCTION_TARGET_STRING_AVX512VPOPCNTDQ   "avx512vpopcntdq"

// in CPUID Leaf 7, Sub-leaf 0, EDX:
#define CpuFeatureAVX5124NNIW                       (Q_UINT64_C(1) << 35)
#define QT_FUNCTION_TARGET_STRING_AVX5124NNIW       "avx5124nniw"
#define CpuFeatureAVX5124FMAPS                      (Q_UINT64_C(1) << 36)
#define QT_FUNCTION_TARGET_STRING_AVX5124FMAPS      "avx5124fmaps"

static const quint64 qCompilerCpuFeatures = 0
#ifdef __SSE2__
         | CpuFeatureSSE2
#endif
#ifdef __SSE3__
         | CpuFeatureSSE3
#endif
#ifdef __SSSE3__
         | CpuFeatureSSSE3
#endif
#ifdef __FMA__
         | CpuFeatureFMA
#endif
#ifdef __SSE4_1__
         | CpuFeatureSSE4_1
#endif
#ifdef __SSE4_2__
         | CpuFeatureSSE4_2
#endif
#ifdef __MOVBE__
         | CpuFeatureMOVBE
#endif
#ifdef __POPCNT__
         | CpuFeaturePOPCNT
#endif
#ifdef __AES__
         | CpuFeatureAES
#endif
#ifdef __AVX__
         | CpuFeatureAVX
#endif
#ifdef __F16C__
         | CpuFeatureF16C
#endif
#ifdef __RDRND__
         | CpuFeatureRDRND
#endif
#ifdef __BMI__
         | CpuFeatureBMI
#endif
#ifdef __HLE__
         | CpuFeatureHLE
#endif
#ifdef __AVX2__
         | CpuFeatureAVX2
#endif
#ifdef __BMI2__
         | CpuFeatureBMI2
#endif
#ifdef __RTM__
         | CpuFeatureRTM
#endif
#ifdef __AVX512F__
         | CpuFeatureAVX512F
#endif
#ifdef __AVX512DQ__
         | CpuFeatureAVX512DQ
#endif
#ifdef __RDSEED__
         | CpuFeatureRDSEED
#endif
#ifdef __AVX512IFMA__
         | CpuFeatureAVX512IFMA
#endif
#ifdef __AVX512PF__
         | CpuFeatureAVX512PF
#endif
#ifdef __AVX512ER__
         | CpuFeatureAVX512ER
#endif
#ifdef __AVX512CD__
         | CpuFeatureAVX512CD
#endif
#ifdef __SHA__
         | CpuFeatureSHA
#endif
#ifdef __AVX512BW__
         | CpuFeatureAVX512BW
#endif
#ifdef __AVX512VL__
         | CpuFeatureAVX512VL
#endif
#ifdef __AVX512VBMI__
         | CpuFeatureAVX512VBMI
#endif
#ifdef __AVX512VBMI2__
         | CpuFeatureAVX512VBMI2
#endif
#ifdef __GFNI__
         | CpuFeatureGFNI
#endif
#ifdef __VAES__
         | CpuFeatureVAES
#endif
#ifdef __AVX512VNNI__
         | CpuFeatureAVX512VNNI
#endif
#ifdef __AVX512BITALG__
         | CpuFeatureAVX512BITALG
#endif
#ifdef __AVX512VPOPCNTDQ__
         | CpuFeatureAVX512VPOPCNTDQ
#endif
#ifdef __AVX5124NNIW__
         | CpuFeatureAVX5124NNIW
#endif
#ifdef __AVX5124FMAPS__
         | CpuFeatureAVX5124FMAPS
#endif
        ;

QT_END_NAMESPACE

#endif // QSIMD_X86_P_H