@@ -2260,20 +2260,80 @@ StringMap<bool> sys::getHostCPUFeatures() {
2260
2260
uint32_t Sha2 = CAP_SHA1 | CAP_SHA2;
2261
2261
Features[" aes" ] = (crypto & Aes) == Aes;
2262
2262
Features[" sha2" ] = (crypto & Sha2) == Sha2;
2263
+
2264
+ // SVE support is disabled in for cores which are identified as supporting
2265
+ // SVE; disable SVE if we don't detect support at runtime.
2266
+ if (!Features.contains (" sve" ))
2267
+ Features[" sve" ] = false ;
2263
2268
#endif
2264
2269
2265
2270
return Features;
2266
2271
}
2267
2272
#elif defined(_WIN32) && (defined(__aarch64__) || defined(_M_ARM64) || \
2268
2273
defined (__arm64ec__) || defined(_M_ARM64EC))
2274
+ #ifndef PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE
2275
+ #define PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE 43
2276
+ #endif
2277
+ #ifndef PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE
2278
+ #define PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE 44
2279
+ #endif
2280
+ #ifndef PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE
2281
+ #define PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE 45
2282
+ #endif
2283
+ #ifndef PF_ARM_SVE_INSTRUCTIONS_AVAILABLE
2284
+ #define PF_ARM_SVE_INSTRUCTIONS_AVAILABLE 46
2285
+ #endif
2286
+ #ifndef PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE
2287
+ #define PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE 47
2288
+ #endif
2289
+ #ifndef PF_ARM_SVE_PMULL128_INSTRUCTIONS_AVAILABLE
2290
+ #define PF_ARM_SVE_PMULL128_INSTRUCTIONS_AVAILABLE 50
2291
+ #endif
2292
+ #ifndef PF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE
2293
+ #define PF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE 55
2294
+ #endif
2295
+ #ifndef PF_ARM_SVE_SM4_INSTRUCTIONS_AVAILABLE
2296
+ #define PF_ARM_SVE_SM4_INSTRUCTIONS_AVAILABLE 56
2297
+ #endif
2298
+ #ifndef PF_ARM_SVE_I8MM_INSTRUCTIONS_AVAILABLE
2299
+ #define PF_ARM_SVE_I8MM_INSTRUCTIONS_AVAILABLE 57
2300
+ #endif
2301
+ #ifndef PF_ARM_SVE_F32MM_INSTRUCTIONS_AVAILABLE
2302
+ #define PF_ARM_SVE_F32MM_INSTRUCTIONS_AVAILABLE 58
2303
+ #endif
2304
+ #ifndef PF_ARM_SVE_F64MM_INSTRUCTIONS_AVAILABLE
2305
+ #define PF_ARM_SVE_F64MM_INSTRUCTIONS_AVAILABLE 59
2306
+ #endif
2269
2307
StringMap<bool > sys::getHostCPUFeatures () {
2270
2308
StringMap<bool > Features;
2271
2309
2272
2310
// If we're asking the OS at runtime, believe what the OS says
2273
- Features[" neon" ] =
2274
- IsProcessorFeaturePresent (PF_ARM_NEON_INSTRUCTIONS_AVAILABLE);
2275
2311
Features[" crc" ] =
2276
2312
IsProcessorFeaturePresent (PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE);
2313
+ Features[" lse" ] =
2314
+ IsProcessorFeaturePresent (PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE);
2315
+ Features[" dotprod" ] =
2316
+ IsProcessorFeaturePresent (PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE);
2317
+ Features[" jscvt" ] =
2318
+ IsProcessorFeaturePresent (PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE);
2319
+ Features[" rcpc" ] =
2320
+ IsProcessorFeaturePresent (PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE);
2321
+ Features[" sve" ] =
2322
+ IsProcessorFeaturePresent (PF_ARM_SVE_INSTRUCTIONS_AVAILABLE);
2323
+ Features[" sve2" ] =
2324
+ IsProcessorFeaturePresent (PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE);
2325
+ Features[" sve-aes" ] =
2326
+ IsProcessorFeaturePresent (PF_ARM_SVE_PMULL128_INSTRUCTIONS_AVAILABLE);
2327
+ Features[" sve-sha3" ] =
2328
+ IsProcessorFeaturePresent (PF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE);
2329
+ Features[" sve-sm4" ] =
2330
+ IsProcessorFeaturePresent (PF_ARM_SVE_SM4_INSTRUCTIONS_AVAILABLE);
2331
+ Features[" f32mm" ] =
2332
+ IsProcessorFeaturePresent (PF_ARM_SVE_F32MM_INSTRUCTIONS_AVAILABLE);
2333
+ Features[" f64mm" ] =
2334
+ IsProcessorFeaturePresent (PF_ARM_SVE_F64MM_INSTRUCTIONS_AVAILABLE);
2335
+ Features[" i8mm" ] =
2336
+ IsProcessorFeaturePresent (PF_ARM_SVE_I8MM_INSTRUCTIONS_AVAILABLE);
2277
2337
2278
2338
// Avoid inferring "crypto" means more than the traditional AES + SHA2
2279
2339
bool TradCrypto =
0 commit comments