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()17WEAK 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