@@ -21,24 +21,24 @@ extern "C" unsigned long getauxval(unsigned long type);
21
21
22
22
namespace {
23
23
24
- void set_platform_features (CpuFeatures & features) {
24
+ void set_platform_features (CpuFeatures * features) {
25
25
unsigned long hwcaps = getauxval (AT_HWCAP);
26
26
unsigned long hwcaps2 = getauxval (AT_HWCAP2);
27
27
28
28
if (hwcaps & HWCAP_ASIMDDP) {
29
- features. set_available ( halide_target_feature_arm_dot_prod);
29
+ halide_set_available_cpu_feature (features, halide_target_feature_arm_dot_prod);
30
30
}
31
31
32
32
if (hwcaps & HWCAP_ASIMDHP) {
33
- features. set_available ( halide_target_feature_arm_fp16);
33
+ halide_set_available_cpu_feature (features, halide_target_feature_arm_fp16);
34
34
}
35
35
36
36
if (hwcaps & HWCAP_SVE) {
37
- features. set_available ( halide_target_feature_sve);
37
+ halide_set_available_cpu_feature (features, halide_target_feature_sve);
38
38
}
39
39
40
40
if (hwcaps2 & HWCAP2_SVE2) {
41
- features. set_available ( halide_target_feature_sve2);
41
+ halide_set_available_cpu_feature (features, halide_target_feature_sve2);
42
42
}
43
43
}
44
44
@@ -56,13 +56,13 @@ bool sysctl_is_set(const char *name) {
56
56
return sysctlbyname (name, &enabled, &enabled_len, nullptr , 0 ) == 0 && enabled;
57
57
}
58
58
59
- void set_platform_features (CpuFeatures & features) {
59
+ void set_platform_features (CpuFeatures * features) {
60
60
if (sysctl_is_set (" hw.optional.arm.FEAT_DotProd" )) {
61
- features. set_available ( halide_target_feature_arm_dot_prod);
61
+ halide_set_available_cpu_feature (features, halide_target_feature_arm_dot_prod);
62
62
}
63
63
64
64
if (sysctl_is_set (" hw.optional.arm.FEAT_FP16" )) {
65
- features. set_available ( halide_target_feature_arm_fp16);
65
+ halide_set_available_cpu_feature (features, halide_target_feature_arm_fp16);
66
66
}
67
67
}
68
68
@@ -84,20 +84,20 @@ extern "C" BOOL IsProcessorFeaturePresent(DWORD feature);
84
84
85
85
namespace {
86
86
87
- void set_platform_features (CpuFeatures & features) {
87
+ void set_platform_features (CpuFeatures * features) {
88
88
// This is the strategy used by Google's cpuinfo library for
89
89
// detecting fp16 arithmetic support on Windows.
90
90
if (!IsProcessorFeaturePresent (PF_FLOATING_POINT_EMULATED) &&
91
91
IsProcessorFeaturePresent (PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE)) {
92
- features. set_available ( halide_target_feature_arm_fp16);
92
+ halide_set_available_cpu_feature (features, halide_target_feature_arm_fp16);
93
93
}
94
94
95
95
if (IsProcessorFeaturePresent (PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE)) {
96
- features. set_available ( halide_target_feature_arm_dot_prod);
96
+ halide_set_available_cpu_feature (features, halide_target_feature_arm_dot_prod);
97
97
}
98
98
99
99
if (IsProcessorFeaturePresent (PF_ARM_SVE_INSTRUCTIONS_AVAILABLE)) {
100
- features. set_available ( halide_target_feature_sve);
100
+ halide_set_available_cpu_feature (features, halide_target_feature_sve);
101
101
}
102
102
}
103
103
@@ -107,28 +107,27 @@ void set_platform_features(CpuFeatures &features) {
107
107
108
108
namespace {
109
109
110
- void set_platform_features (CpuFeatures & ) {
110
+ void set_platform_features (CpuFeatures * ) {
111
111
}
112
112
113
113
} // namespace
114
114
115
115
#endif
116
116
117
- WEAK CpuFeatures halide_get_cpu_features () {
118
- CpuFeatures features;
119
- features.set_known (halide_target_feature_arm_dot_prod);
120
- features.set_known (halide_target_feature_arm_fp16);
121
- features.set_known (halide_target_feature_armv7s);
122
- features.set_known (halide_target_feature_no_neon);
123
- features.set_known (halide_target_feature_sve);
124
- features.set_known (halide_target_feature_sve2);
117
+ extern " C" WEAK int halide_get_cpu_features (CpuFeatures *features) {
118
+ halide_set_known_cpu_feature (features, halide_target_feature_arm_dot_prod);
119
+ halide_set_known_cpu_feature (features, halide_target_feature_arm_fp16);
120
+ halide_set_known_cpu_feature (features, halide_target_feature_armv7s);
121
+ halide_set_known_cpu_feature (features, halide_target_feature_no_neon);
122
+ halide_set_known_cpu_feature (features, halide_target_feature_sve);
123
+ halide_set_known_cpu_feature (features, halide_target_feature_sve2);
125
124
126
125
// All ARM architectures support "No Neon".
127
- features. set_available ( halide_target_feature_no_neon);
126
+ halide_set_available_cpu_feature (features, halide_target_feature_no_neon);
128
127
129
128
set_platform_features (features);
130
129
131
- return features ;
130
+ return halide_error_code_success ;
132
131
}
133
132
134
133
} // namespace Internal
0 commit comments