|
18 | 18 | #ifndef PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE |
19 | 19 | #define PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE 47 |
20 | 20 | #endif |
| 21 | +#ifndef PF_ARM_SVE2_1_INSTRUCTIONS_AVAILABLE |
| 22 | +#define PF_ARM_SVE2_1_INSTRUCTIONS_AVAILABLE 48 |
| 23 | +#endif |
21 | 24 | #ifndef PF_ARM_SVE_PMULL128_INSTRUCTIONS_AVAILABLE |
22 | 25 | #define PF_ARM_SVE_PMULL128_INSTRUCTIONS_AVAILABLE 50 |
23 | 26 | #endif |
| 27 | +#ifndef PF_ARM_SVE_BITPERM_INSTRUCTIONS_AVAILABLE |
| 28 | +#define PF_ARM_SVE_BITPERM_INSTRUCTIONS_AVAILABLE 51 |
| 29 | +#endif |
24 | 30 | #ifndef PF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE |
25 | 31 | #define PF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE 55 |
26 | 32 | #endif |
27 | 33 | #ifndef PF_ARM_SVE_SM4_INSTRUCTIONS_AVAILABLE |
28 | 34 | #define PF_ARM_SVE_SM4_INSTRUCTIONS_AVAILABLE 56 |
29 | 35 | #endif |
30 | | -#ifndef PF_ARM_SVE_I8MM_INSTRUCTIONS_AVAILABLE |
31 | | -#define PF_ARM_SVE_I8MM_INSTRUCTIONS_AVAILABLE 57 |
32 | | -#endif |
33 | 36 | #ifndef PF_ARM_SVE_F32MM_INSTRUCTIONS_AVAILABLE |
34 | 37 | #define PF_ARM_SVE_F32MM_INSTRUCTIONS_AVAILABLE 58 |
35 | 38 | #endif |
36 | 39 | #ifndef PF_ARM_SVE_F64MM_INSTRUCTIONS_AVAILABLE |
37 | 40 | #define PF_ARM_SVE_F64MM_INSTRUCTIONS_AVAILABLE 59 |
38 | 41 | #endif |
| 42 | +#ifndef PF_ARM_V82_I8MM_INSTRUCTIONS_AVAILABLE |
| 43 | +#define PF_ARM_V82_I8MM_INSTRUCTIONS_AVAILABLE 66 |
| 44 | +#endif |
| 45 | +#ifndef PF_ARM_V82_FP16_INSTRUCTIONS_AVAILABLE |
| 46 | +#define PF_ARM_V82_FP16_INSTRUCTIONS_AVAILABLE 67 |
| 47 | +#endif |
| 48 | +#ifndef PF_ARM_V82_FP16_INSTRUCTIONS_AVAILABLE |
| 49 | +#define PF_ARM_V86_BF16_INSTRUCTIONS_AVAILABLE 68 |
| 50 | +#endif |
| 51 | +#ifndef PF_ARM_SME_INSTRUCTIONS_AVAILABLE |
| 52 | +#define PF_ARM_SME_INSTRUCTIONS_AVAILABLE 70 |
| 53 | +#endif |
| 54 | +#ifndef PF_ARM_SME2_INSTRUCTIONS_AVAILABLE |
| 55 | +#define PF_ARM_SME2_INSTRUCTIONS_AVAILABLE 71 |
| 56 | +#endif |
| 57 | +#ifndef PF_ARM_SME_F64F64_INSTRUCTIONS_AVAILABLE |
| 58 | +#define PF_ARM_SME_F64F64_INSTRUCTIONS_AVAILABLE 85 |
| 59 | +#endif |
| 60 | +#ifndef PF_ARM_SME_I16I64_INSTRUCTIONS_AVAILABLE |
| 61 | +#define PF_ARM_SME_I16I64_INSTRUCTIONS_AVAILABLE 86 |
| 62 | +#endif |
39 | 63 |
|
40 | 64 | void __init_cpu_features_resolver(unsigned long hwcap, |
41 | 65 | const __ifunc_arg_t *arg) {} |
@@ -68,15 +92,30 @@ void CONSTRUCTOR_ATTRIBUTE __init_cpu_features(void) { |
68 | 92 | {PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE, FEAT_RCPC}, |
69 | 93 | {PF_ARM_SVE_INSTRUCTIONS_AVAILABLE, FEAT_SVE}, |
70 | 94 | {PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE, FEAT_SVE2}, |
| 95 | + {PF_ARM_SVE2_1_INSTRUCTIONS_AVAILABLE, FEAT_SVE2_1}, |
71 | 96 | {PF_ARM_SVE_PMULL128_INSTRUCTIONS_AVAILABLE, FEAT_SVE_PMULL128}, |
| 97 | + {PF_ARM_SVE_BITPERM_INSTRUCTIONS_AVAILABLE, FEAT_SVE_BITPERM}, |
72 | 98 | {PF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE, FEAT_SVE_SHA3}, |
73 | 99 | {PF_ARM_SVE_SM4_INSTRUCTIONS_AVAILABLE, FEAT_SVE_SM4}, |
74 | 100 | {PF_ARM_SVE_F32MM_INSTRUCTIONS_AVAILABLE, FEAT_SVE_F32MM}, |
75 | 101 | {PF_ARM_SVE_F64MM_INSTRUCTIONS_AVAILABLE, FEAT_SVE_F64MM}, |
76 | | - // There is no I8MM flag, but when SVE_I8MM is available, I8MM is too. |
77 | | - {PF_ARM_SVE_I8MM_INSTRUCTIONS_AVAILABLE, FEAT_I8MM}, |
| 102 | + {PF_ARM_V82_I8MM_INSTRUCTIONS_AVAILABLE, FEAT_I8MM}, |
| 103 | + {PF_ARM_V82_FP16_INSTRUCTIONS_AVAILABLE, FEAT_FP16}, |
| 104 | + {PF_ARM_V86_BF16_INSTRUCTIONS_AVAILABLE, FEAT_BF16}, |
| 105 | + {PF_ARM_SME_INSTRUCTIONS_AVAILABLE, FEAT_SME}, |
| 106 | + {PF_ARM_SME2_INSTRUCTIONS_AVAILABLE, FEAT_SME2}, |
| 107 | + {PF_ARM_SME_I16I64_INSTRUCTIONS_AVAILABLE, FEAT_SME_I64}, |
| 108 | + {PF_ARM_SME_F16F64_INSTRUCTIONS_AVAILABLE, FEAT_SME_F64}, |
78 | 109 | }; |
79 | 110 |
|
| 111 | + // The following features are never detected because there is no known way |
| 112 | + // to detect them on Windows: |
| 113 | + // |
| 114 | + // FEAT_RNG, FEAT_FLAGM, FEAT_FLAGM2, FEAT_FP16FML, FEAT_RDM, FEAT_CSSC, |
| 115 | + // FEAT_DIT, FEAT_DPB, FEAT_DPB2, FEAT_FCMA, FEAT_RCPC2, FEAT_FRINTTS, |
| 116 | + // FEAT_MEMTAG2, FEAT_SB, FEAT_SSBS2, FEAT_BTI, FEAT_WFXT, FEAT_RCPC3, |
| 117 | + // FEAT_MOPS. |
| 118 | + |
80 | 119 | for (size_t I = 0, E = sizeof(FeatMap) / sizeof(FeatMap[0]); I != E; ++I) |
81 | 120 | if (IsProcessorFeaturePresent(FeatMap[I].WinApiFeature)) |
82 | 121 | setCPUFeature(FeatMap[I].CPUFeature); |
|
0 commit comments