Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -838,10 +838,27 @@ AC_MSG_ERROR( [Floating point implementation does not conform to IEEE 754!])]) case "$host_cpu" in arm* | earm*) + AC_MSG_CHECKING(for blx) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([], [ + #if !defined(__arm64__) && !defined(__arch64__) && \ + !defined(__ARM64_ARCH_8__) + __asm__ __volatile__ ( + "blx r12" + ); + #endif + ]) + ], [ + AC_DEFINE(HAVE_BLX, 1, [Whether we have blx]) + AC_MSG_RESULT(yes) + ], [ + AC_MSG_RESULT(no) + ]) + AC_MSG_CHECKING(for VFP2 or above) AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([], [ #if !defined(__arm64__) && !defined(__aarch64__) && \ !defined(__ARM64_ARCH_8__) Index: src/forwarding/forwarding-arm-elf.S ================================================================== --- src/forwarding/forwarding-arm-elf.S +++ src/forwarding/forwarding-arm-elf.S @@ -53,11 +53,15 @@ mov r12, r0 ldr r0, [sp, #0] mov r1, r4 ldr r2, [sp, #4] +#ifdef HAVE_BLX blx r12 +#else + bl r12 +#endif cmp r0, #0 beq 0f ldr r1, [sp, #0] cmp r0, r1 @@ -109,11 +113,15 @@ mov r12, r0 ldr r0, [sp, #4] mov r1, r4 ldr r2, [sp, #8] +#ifdef HAVE_BLX blx r12 +#else + bl r12 +#endif cmp r0, #0 beq 0f ldr r1, [sp, #4] cmp r0, r1