@@ -132,35 +132,7 @@ void ffCPUDetectByCpuid(FFCPUResult* cpu)
132
132
#ifdef __linux__
133
133
#include "common/io/io.h"
134
134
#include <elf.h>
135
- #include <asm/hwcap.h>
136
-
137
- #ifndef HWCAP2_SME
138
- #define HWCAP2_SME (1UL << 23)
139
- #endif
140
- #ifndef HWCAP2_SME2
141
- #define HWCAP2_SME2 (1UL << 37)
142
- #endif
143
- #ifndef HWCAP2_CSSC
144
- #define HWCAP2_CSSC (1UL << 34)
145
- #endif
146
- #ifndef HWCAP2_SME2P1
147
- #define HWCAP2_SME2P1 (1UL << 38)
148
- #endif
149
- #ifndef HWCAP2_MOPS
150
- #define HWCAP2_MOPS (1UL << 43)
151
- #endif
152
- #ifndef HWCAP2_F8E4M3
153
- #define HWCAP2_F8E4M3 (1UL << 55)
154
- #endif
155
- #ifndef HWCAP2_F8E5M2
156
- #define HWCAP2_F8E5M2 (1UL << 56)
157
- #endif
158
- #ifndef HWCAP_CMPBR
159
- #define HWCAP_CMPBR (1UL << 33)
160
- #endif
161
- #ifndef HWCAP_FPRCVT
162
- #define HWCAP_FPRCVT (1UL << 34)
163
- #endif
135
+ // #include <asm/hwcap.h>
164
136
165
137
void ffCPUDetectByCpuid (FFCPUResult * cpu )
166
138
{
@@ -188,69 +160,69 @@ void ffCPUDetectByCpuid(FFCPUResult* cpu)
188
160
cpu -> march = "unknown" ;
189
161
190
162
// ARMv8-A
191
- bool has_fp = (hwcap & HWCAP_FP ) != 0 ;
192
- bool has_asimd = (hwcap & HWCAP_ASIMD ) != 0 ;
163
+ bool has_fp = (hwcap & ( 1 << 0 ) /* HWCAP_FP */ ) != 0 ;
164
+ bool has_asimd = (hwcap & ( 1 << 1 ) /* HWCAP_ASIMD */ ) != 0 ;
193
165
194
166
// ARMv8.1-A
195
- bool has_atomics = (hwcap & HWCAP_ATOMICS ) != 0 ; // optional from v8.0
196
- bool has_crc32 = (hwcap & HWCAP_CRC32 ) != 0 ; // optional from v8.0
197
- bool has_asimdrdm = (hwcap & HWCAP_ASIMDRDM ) != 0 ; // optional from v8.0
167
+ bool has_atomics = (hwcap & ( 1 << 8 ) /* HWCAP_ATOMICS */ ) != 0 ; // optional from v8.0
168
+ bool has_crc32 = (hwcap & ( 1 << 7 ) /* HWCAP_CRC32 */ ) != 0 ; // optional from v8.0
169
+ bool has_asimdrdm = (hwcap & ( 1 << 12 ) /* HWCAP_ASIMDRDM */ ) != 0 ; // optional from v8.0
198
170
199
171
// ARMv8.2-A
200
- bool has_fphp = (hwcap & HWCAP_FPHP ) != 0 ; // optional
201
- bool has_dcpop = (hwcap & HWCAP_DCPOP ) != 0 ; // DC CVAP, optional from v8.1
172
+ bool has_fphp = (hwcap & ( 1 << 9 ) /* HWCAP_FPHP */ ) != 0 ; // optional
173
+ bool has_dcpop = (hwcap & ( 1 << 16 ) /* HWCAP_DCPOP */ ) != 0 ; // DC CVAP, optional from v8.1
202
174
203
175
// ARMv8.3-A
204
- bool has_paca = (hwcap & HWCAP_PACA ) != 0 ; // optional from v8.2
205
- bool has_lrcpc = (hwcap & HWCAP_LRCPC ) != 0 ; // optional from v8.2
206
- bool has_fcma = (hwcap & HWCAP_FCMA ) != 0 ; // optional from v8.2
207
- bool has_jscvt = (hwcap & HWCAP_JSCVT ) != 0 ; // optional from v8.2
176
+ bool has_paca = (hwcap & ( 1 << 30 ) /* HWCAP_PACA */ ) != 0 ; // optional from v8.2
177
+ bool has_lrcpc = (hwcap & ( 1 << 15 ) /* HWCAP_LRCPC */ ) != 0 ; // optional from v8.2
178
+ bool has_fcma = (hwcap & ( 1 << 14 ) /* HWCAP_FCMA */ ) != 0 ; // optional from v8.2
179
+ bool has_jscvt = (hwcap & ( 1 << 13 ) /* HWCAP_JSCVT */ ) != 0 ; // optional from v8.2
208
180
209
181
// ARMv8.4-A
210
- bool has_dit = (hwcap & HWCAP_DIT ) != 0 ; // optional from v8.3
211
- bool has_flagm = (hwcap & HWCAP_FLAGM ) != 0 ; // optional from v8.1
212
- bool has_ilrcpc = (hwcap & HWCAP_ILRCPC ) != 0 ; // optional from v8.2
182
+ bool has_dit = (hwcap & ( 1 << 24 ) /* HWCAP_DIT */ ) != 0 ; // optional from v8.3
183
+ bool has_flagm = (hwcap & ( 1 << 27 ) /* HWCAP_FLAGM */ ) != 0 ; // optional from v8.1
184
+ bool has_ilrcpc = (hwcap & ( 1 << 26 ) /* HWCAP_ILRCPC */ ) != 0 ; // optional from v8.2
213
185
214
186
// ARMv8.5-A
215
- bool has_bti = (hwcap2 & HWCAP2_BTI ) != 0 ; // optional from v8.4
216
- bool has_sb = (hwcap & HWCAP_SB ) != 0 ; // optional from v8.0
217
- bool has_dcpodp = (hwcap2 & HWCAP2_DCPODP ) != 0 ; // optional from v8.1
218
- bool has_flagm2 = (hwcap2 & HWCAP2_FLAGM2 ) != 0 ; // optional from v8.4
219
- bool has_frint = (hwcap2 & HWCAP2_FRINT ) != 0 ; // optional from v8.4
187
+ bool has_bti = (hwcap2 & ( 1 << 17 ) /* HWCAP2_BTI */ ) != 0 ; // optional from v8.4
188
+ bool has_sb = (hwcap & ( 1 << 29 ) /* HWCAP_SB */ ) != 0 ; // optional from v8.0
189
+ bool has_dcpodp = (hwcap2 & ( 1 << 0 ) /* HWCAP2_DCPODP */ ) != 0 ; // optional from v8.1
190
+ bool has_flagm2 = (hwcap2 & ( 1 << 7 ) /* HWCAP2_FLAGM2 */ ) != 0 ; // optional from v8.4
191
+ bool has_frint = (hwcap2 & ( 1 << 8 ) /* HWCAP2_FRINT */ ) != 0 ; // optional from v8.4
220
192
221
193
// ARMv9.0-A
222
- bool has_sve2 = (hwcap2 & HWCAP2_SVE2 ) != 0 ;
194
+ bool has_sve2 = (hwcap2 & ( 1 << 1 ) /* HWCAP2_SVE2 */ ) != 0 ;
223
195
224
196
// ARMv9.1-A
225
197
// ARMv8.6-A
226
- bool has_bf16 = (hwcap2 & HWCAP2_BF16 ) != 0 ; // optional from v8.2
227
- bool has_i8mm = (hwcap2 & HWCAP2_I8MM ) != 0 ; // optional from v8.1
198
+ bool has_bf16 = (hwcap2 & ( 1 << 14 ) /* HWCAP2_BF16 */ ) != 0 ; // optional from v8.2
199
+ bool has_i8mm = (hwcap2 & ( 1 << 13 ) /* HWCAP2_I8MM */ ) != 0 ; // optional from v8.1
228
200
229
201
// ARMv8.7-A
230
- bool has_afp = (hwcap2 & HWCAP2_AFP ) != 0 ; // optional from v8.6
202
+ bool has_afp = (hwcap2 & ( 1 << 20 ) /* HWCAP2_AFP */ ) != 0 ; // optional from v8.6
231
203
232
204
// ARMv9.2-A
233
- bool has_sme = (hwcap2 & HWCAP2_SME ) != 0 ;
205
+ bool has_sme = (hwcap2 & ( 1 << 23 ) /* HWCAP2_SME */ ) != 0 ;
234
206
235
207
// ARMv9.3-A
236
- bool has_sme2 = (hwcap2 & HWCAP2_SME2 ) != 0 ; // optional from v9.2
208
+ bool has_sme2 = (hwcap2 & ( 1UL << 37 ) /* HWCAP2_SME2 */ ) != 0 ; // optional from v9.2
237
209
238
210
// ARMv8.8-A
239
- bool has_mops = (hwcap2 & HWCAP2_MOPS ) != 0 ; // optional from v8.7
211
+ bool has_mops = (hwcap2 & ( 1UL << 43 ) /* HWCAP2_MOPS */ ) != 0 ; // optional from v8.7
240
212
241
213
// ARMv8.9-A
242
- bool has_cssc = (hwcap2 & HWCAP2_CSSC ) != 0 ; // optional from v8.7
214
+ bool has_cssc = (hwcap2 & ( 1UL << 34 ) /* HWCAP2_CSSC */ ) != 0 ; // optional from v8.7
243
215
244
216
// ARMv9.4-A
245
- bool has_sme2p1 = (hwcap2 & HWCAP2_SME2P1 ) != 0 ; // optional from v9.2
217
+ bool has_sme2p1 = (hwcap2 & ( 1UL << 38 ) /* HWCAP2_SME2P1 */ ) != 0 ; // optional from v9.2
246
218
247
219
// ARMv9.5-A
248
- bool has_f8e4m3 = (hwcap2 & HWCAP2_F8E4M3 ) != 0 ; // optional from v9.2
249
- bool has_f8e5m2 = (hwcap2 & HWCAP2_F8E5M2 ) != 0 ; // optional from v9.2
220
+ bool has_f8e4m3 = (hwcap2 & ( 1UL << 55 ) /* HWCAP2_F8E4M3 */ ) != 0 ; // optional from v9.2
221
+ bool has_f8e5m2 = (hwcap2 & ( 1UL << 56 ) /* HWCAP2_F8E5M2 */ ) != 0 ; // optional from v9.2
250
222
251
223
// ARMv9.6-A
252
- bool has_cmpbr = (hwcap & HWCAP_CMPBR ) != 0 ; // optional from v9.5
253
- bool has_fprcvt = (hwcap & HWCAP_FPRCVT ) != 0 ; // optional from v9.5
224
+ bool has_cmpbr = (hwcap & ( 1UL << 33 ) /* HWCAP_CMPBR */ ) != 0 ; // optional from v9.5
225
+ bool has_fprcvt = (hwcap & ( 1UL << 34 ) /* HWCAP_FPRCVT */ ) != 0 ; // optional from v9.5
254
226
255
227
if (has_sve2 || has_sme ) {
256
228
// ARMv9
0 commit comments