mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-19 09:53:47 +01:00
Merge bitcoin/bitcoin#23045: build: Restrict check for CRC32C intrinsic to aarch64
f2747d1602
build: Restrict check for CRC32C intrinsic to aarch64 (W. J. van der Laan) Pull request description: `crc32c`'s hardware accelerated code doesn't handle ARM 32-bit at all, but only 64-bit. Make the check in `configure.ac` check for this architecture explicitly. This change does not affect non-ARM architectures. For the release binaries, the current `configure.ac` check happens to work: it enables it on aarch64 but disables it for armhf. However some combination of compiler version and settings can cause this check to succeed on armhf (as reported on IRC). So make the 64-bit platform requirement explicit. (details: while the check already explicitly checks the `__crc32d` intrinsic, which strictly doesn't exist on 32-bit ARM, this is not enough! gcc happens to helpfully emulate it: > These built-in intrinsics for the ARMv8-A CRC32 extension are available when the -march=armv8-a+crc switch is used "uint32_t __crc32d (uint32_t, uint64_t)" Form of expected instruction(s): Two crc32w r0, r0, r0 instructions for AArch32 ) ACKs for top commit: luke-jr: re-tACKf2747d1602
jarolrod: ACKf2747d1602
Tree-SHA512: e5f05f05eeec310ac42685621d86862735586be66dc378db404ec9414ac5aaea7c53d76d76d875b15b11924eee6714076120c07b077183fd7af898704fd81823
This commit is contained in:
commit
cdce149050
@ -568,13 +568,17 @@ AX_CHECK_COMPILE_FLAG([-march=armv8-a+crc+crypto],[[ARM_CRC_CXXFLAGS="-march=arm
|
|||||||
|
|
||||||
TEMP_CXXFLAGS="$CXXFLAGS"
|
TEMP_CXXFLAGS="$CXXFLAGS"
|
||||||
CXXFLAGS="$CXXFLAGS $ARM_CRC_CXXFLAGS"
|
CXXFLAGS="$CXXFLAGS $ARM_CRC_CXXFLAGS"
|
||||||
AC_MSG_CHECKING(for ARM CRC32 intrinsics)
|
AC_MSG_CHECKING(for AArch64 CRC32 intrinsics)
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||||
#include <arm_acle.h>
|
#include <arm_acle.h>
|
||||||
#include <arm_neon.h>
|
#include <arm_neon.h>
|
||||||
]],[[
|
]],[[
|
||||||
|
#ifdef __aarch64__
|
||||||
__crc32cb(0, 0); __crc32ch(0, 0); __crc32cw(0, 0); __crc32cd(0, 0);
|
__crc32cb(0, 0); __crc32ch(0, 0); __crc32cw(0, 0); __crc32cd(0, 0);
|
||||||
vmull_p64(0, 0);
|
vmull_p64(0, 0);
|
||||||
|
#else
|
||||||
|
#error "crc32c library does not support hardware acceleration on 32-bit ARM"
|
||||||
|
#endif
|
||||||
]])],
|
]])],
|
||||||
[ AC_MSG_RESULT(yes); enable_arm_crc=yes; ],
|
[ AC_MSG_RESULT(yes); enable_arm_crc=yes; ],
|
||||||
[ AC_MSG_RESULT(no)]
|
[ AC_MSG_RESULT(no)]
|
||||||
|
Loading…
Reference in New Issue
Block a user