Skip to content

Commit 1bd00f0

Browse files
committed
Implement most of the ISA feature flags
1 parent 8b29d2e commit 1bd00f0

File tree

2 files changed

+65
-12
lines changed

2 files changed

+65
-12
lines changed

src/arm/windows/init.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -197,20 +197,21 @@ static void set_cpuinfo_isa_fields(void) {
197197

198198
cpuinfo_isa.sve = IsProcessorFeaturePresent(PF_ARM_SVE_INSTRUCTIONS_AVAILABLE) != 0;
199199
cpuinfo_isa.sve2 = IsProcessorFeaturePresent(PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE) != 0;
200-
201-
// TODO:
202-
// - i8mm
203-
// - jscvt
204-
// - fcma
205-
// - sme
206-
// - sme2
207-
// - sme2p1
200+
cpuinfo_isa.i8mm = IsProcessorFeaturePresent(PF_ARM_V82_I8MM_INSTRUCTIONS_AVAILABLE) != 0;
201+
cpuinfo_isa.jscvt = IsProcessorFeaturePresent(PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE) != 0;
202+
cpuinfo_isa.fcma = IsProcessorFeaturePresent(PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE) != 0;
203+
cpuinfo_isa.sme = IsProcessorFeaturePresent(PF_ARM_SME_INSTRUCTIONS_AVAILABLE) != 0;
204+
cpuinfo_isa.sme2 = IsProcessorFeaturePresent(PF_ARM_SME2_INSTRUCTIONS_AVAILABLE) != 0;
205+
cpuinfo_isa.sme2p1 = IsProcessorFeaturePresent(PF_ARM_SME2_1_INSTRUCTIONS_AVAILABLE) != 0;
206+
// I don't see
208207
// - sme_i16i32
209208
// - sme_bi32i32
210-
// - sme_b16b16
211-
// - sme_f16f16
212-
// - bf16
209+
// cpuinfo_isa.sme_bi32i32 = IsProcessorFeaturePresent(PF_ARM_SME_BI32I32_INSTRUCTIONS_AVAILABLE) != 0;
210+
cpuinfo_isa.sme_b16b16 = IsProcessorFeaturePresent(PF_ARM_SME_B16B16_INSTRUCTIONS_AVAILABLE) != 0;
211+
cpuinfo_isa.sme_f16f16 = IsProcessorFeaturePresent(PF_ARM_SME_F16F16_INSTRUCTIONS_AVAILABLE) != 0;
212+
cpuinfo_isa.bf16 = IsProcessorFeaturePresent(PF_ARM_V86_BF16_INSTRUCTIONS_AVAILABLE) != 0;
213213
// - fhm
214+
// Not available in Windows API:
214215
// - svelen
215216
// - smelen
216217

src/arm/windows/windows-arm-init.h

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,62 @@ struct woa_chip_info {
2020

2121
bool cpu_info_init_by_logical_sys_info(const struct woa_chip_info* chip_info, enum cpuinfo_vendor vendor);
2222

23+
24+
25+
#ifndef PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE
26+
#define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE (27)
27+
#endif
28+
29+
#ifndef PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE
30+
#define PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE (34)
31+
#endif
32+
33+
#ifndef PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE
34+
#define PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE (44)
35+
#endif
36+
2337
#ifndef PF_ARM_SVE_INSTRUCTIONS_AVAILABLE
2438
#define PF_ARM_SVE_INSTRUCTIONS_AVAILABLE (46)
2539
#endif
2640

2741
#ifndef PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE
2842
#define PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE (47)
29-
#endif
43+
#endif
44+
45+
#ifndef PF_ARM_SME_BI32I32_INSTRUCTIONS_AVAILABLE
46+
#define PF_ARM_SME_BI32I32_INSTRUCTIONS_AVAILABLE (55)
47+
#endif
48+
49+
#ifndef PF_ARM_V82_I8MM_INSTRUCTIONS_AVAILABLE
50+
#define PF_ARM_V82_I8MM_INSTRUCTIONS_AVAILABLE (66)
51+
#endif
52+
53+
#ifndef PF_ARM_V86_BF16_INSTRUCTIONS_AVAILABLE
54+
#define PF_ARM_V86_BF16_INSTRUCTIONS_AVAILABLE (68)
55+
#endif
56+
57+
#ifndef PF_ARM_SME_INSTRUCTIONS_AVAILABLE
58+
#define PF_ARM_SME_INSTRUCTIONS_AVAILABLE (70)
59+
#endif
60+
61+
#ifndef PF_ARM_SME2_INSTRUCTIONS_AVAILABLE
62+
#define PF_ARM_SME2_INSTRUCTIONS_AVAILABLE (71)
63+
#endif
64+
65+
#ifndef PF_ARM_SME2_1_INSTRUCTIONS_AVAILABLE
66+
#define PF_ARM_SME2_1_INSTRUCTIONS_AVAILABLE (72)
67+
#endif
68+
69+
#ifndef PF_ARM_SME2_2_INSTRUCTIONS_AVAILABLE
70+
#define PF_ARM_SME2_2_INSTRUCTIONS_AVAILABLE (73)
71+
#endif
72+
73+
#ifndef PF_ARM_SME_F16F16_INSTRUCTIONS_AVAILABLE
74+
#define PF_ARM_SME_F16F16_INSTRUCTIONS_AVAILABLE (83)
75+
#endif
76+
77+
#ifndef PF_ARM_SME_B16B16_INSTRUCTIONS_AVAILABLE
78+
#define PF_ARM_SME_B16B16_INSTRUCTIONS_AVAILABLE (84)
79+
#endif
80+
81+

0 commit comments

Comments
 (0)