1 #include "HalideRuntime.h"
2 #include "cpu_features.h"
3 
4 #define AT_HWCAP 16
5 #define AT_HWCAP2 26
6 
7 #define PPC_FEATURE_HAS_VSX 0x00000080
8 
9 #define PPC_FEATURE2_ARCH_2_07 0x80000000
10 
11 extern "C" unsigned long int getauxval(unsigned long int);
12 
13 namespace Halide {
14 namespace Runtime {
15 namespace Internal {
16 
halide_get_cpu_features()17 WEAK CpuFeatures halide_get_cpu_features() {
18     CpuFeatures features;
19     features.set_known(halide_target_feature_vsx);
20     features.set_known(halide_target_feature_power_arch_2_07);
21 
22     const unsigned long hwcap = getauxval(AT_HWCAP);
23     const unsigned long hwcap2 = getauxval(AT_HWCAP2);
24 
25     if (hwcap & PPC_FEATURE_HAS_VSX) {
26         features.set_available(halide_target_feature_vsx);
27     }
28     if (hwcap2 & PPC_FEATURE2_ARCH_2_07) {
29         features.set_available(halide_target_feature_power_arch_2_07);
30     }
31     return features;
32 }
33 
34 }  // namespace Internal
35 }  // namespace Runtime
36 }  // namespace Halide
37