--- a/config.h.in +++ b/config.h.in @@ -45,6 +45,9 @@ /* Define to 1 if you have the `arc4random_uniform' function. */ #undef HAVE_ARC4RANDOM_UNIFORM +/* Define if the ARM yield instruction is available */ +#undef HAVE_ARM_YIELD + /* Define to 1 if the compiler supports __builtin_clz. */ #undef HAVE_BUILTIN_CLZ --- a/configure.ac +++ b/configure.ac @@ -421,8 +421,8 @@ AS_CASE([$host], [[]], [[__asm__ __volatile__ ("yield")]] )], - [AC_MSG_RESULT([yes])], - [AC_MSG_ERROR([no, try adding -march=native or -march=armv7-a to CFLAGS (see PLATFORMS.md for more information)])])]) + [AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_ARM_YIELD],[1],[Define if the ARM yield instruction is available])], + [AC_MSG_RESULT([no])])]) AC_CHECK_FUNCS([sysctlbyname]) --- a/lib/isc/rwlock.c +++ b/lib/isc/rwlock.c @@ -54,7 +54,7 @@ # define isc_rwlock_pause() __asm__ __volatile__ ("rep; nop") #elif defined(__ia64__) # define isc_rwlock_pause() __asm__ __volatile__ ("hint @pause") -#elif defined(__arm__) +#elif defined(__arm__) && HAVE_ARM_YIELD # define isc_rwlock_pause() __asm__ __volatile__ ("yield") #elif defined(sun) && (defined(__sparc) || defined(__sparc__)) # define isc_rwlock_pause() smt_pause()