Improved compile time checking to make runtime check consitent with lack of availability

pull/174/head
Jeffrey Walton 2016-05-06 05:20:56 -04:00
parent fe4019b942
commit f86aca7258
1 changed files with 11 additions and 4 deletions

15
cpu.cpp
View File

@ -269,16 +269,23 @@ void __attribute__ ((constructor)) DetectArmFeatures()
void DetectArmFeatures() void DetectArmFeatures()
#endif #endif
{ {
#if defined(__linux__) && defined(__aarch64__) #if defined(__linux__) && defined(__aarch64__) // ARM-64
const unsigned long hwcaps = getauxval(AT_HWCAP); const unsigned long hwcaps = getauxval(AT_HWCAP);
g_hasNEON = !!(hwcaps & HWCAP_ASIMD); g_hasNEON = !!(hwcaps & HWCAP_ASIMD);
# if defined(__ARM_FEATURE_CRC32)
g_hasCRC32 = !!(hwcaps & HWCAP_CRC32); g_hasCRC32 = !!(hwcaps & HWCAP_CRC32);
#elif defined(__linux__) # else
g_hasCRC32 = false;
# endif
#elif defined(__linux__) // ARM-32
const unsigned long hwcaps = getauxval(AT_HWCAP); const unsigned long hwcaps = getauxval(AT_HWCAP);
g_hasNEON = !!(hwcaps & HWCAP_ARM_NEON); g_hasNEON = !!(hwcaps & HWCAP_ARM_NEON);
// g_hasCRC32 = !!(hwcaps & HWCAP_ARM_CRC32); # if defined(__ARM_FEATURE_CRC32)
g_hasCRC32 = !!(hwcaps & HWCAP_ARM_CRC32);
# else
g_hasCRC32 = false; g_hasCRC32 = false;
#elif defined(_WIN32) && defined(_M_ARM) # endif
#elif defined(_WIN32) && defined(_M_ARM) // Microsoft ARM
g_hasNEON = true; g_hasNEON = true;
g_hasCRC32 = false; g_hasCRC32 = false;
#endif #endif