From: Mika T. Lindqvist Date: Mon, 24 Jan 2022 06:21:10 +0000 (+0200) Subject: [ARM] Use armv8-crc+simd when compiling ACLE code on toolchains that don't enable... X-Git-Tag: 2.1.0-beta1~406 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=529f42edea86af5f3e765ca50fb6ce4c60cff3e2;p=thirdparty%2Fzlib-ng.git [ARM] Use armv8-crc+simd when compiling ACLE code on toolchains that don't enable FPU by default. --- diff --git a/cmake/detect-intrinsics.cmake b/cmake/detect-intrinsics.cmake index cc1ffa51..429383cd 100644 --- a/cmake/detect-intrinsics.cmake +++ b/cmake/detect-intrinsics.cmake @@ -2,14 +2,24 @@ # Licensed under the Zlib license, see LICENSE.md for details macro(check_acle_intrinsics) - if(NOT NATIVEFLAG) - set(ACLEFLAG "-march=armv8-a+crc") + if(NOT NATIVEFLAG AND NOT HAVE_ACLE_INTRIN) + set(ACLEFLAG "-march=armv8-a+crc" CACHE INTERNAL "Compiler option to enable ACLE support") endif() # Check whether compiler supports ACLE flag set(CMAKE_REQUIRED_FLAGS "${ACLEFLAG} ${NATIVEFLAG}") check_c_source_compiles( "int main() { return 0; }" HAVE_ACLE_INTRIN FAIL_REGEX "not supported") + if(NOT NATIVEFLAG AND NOT HAVE_ACLE_INTRIN) + set(ACLEFLAG "-march=armv8-a+crc+simd" CACHE INTERNAL "Compiler option to enable ACLE support" FORCE) + # Check whether compiler supports ACLE flag + set(CMAKE_REQUIRED_FLAGS "${ACLEFLAG}") + check_c_source_compiles( + "int main() { return 0; }" + HAVE_ACLE_INTRIN2 FAIL_REGEX "not supported") + set(HAVE_ACLE_INTRIN ${HAVE_ACLE_INTRIN2} CACHE INTERNAL "Have ACLE intrinsics" FORCE) + unset(HAVE_ACLE_INTRIN2 CACHE) # Don't cache this internal variable + endif() set(CMAKE_REQUIRED_FLAGS) endmacro() diff --git a/configure b/configure index e957aa0b..1e063322 100755 --- a/configure +++ b/configure @@ -1132,6 +1132,29 @@ EOF fi } +check_acle_intrinsics() { + # Check whether -march=armv8-a+crc works correctly + cat > $test.c << EOF +int main() { return 0; } +EOF + if try $CC -c $CFLAGS -march=armv8-a+crc $test.c; then + ACLE_AVAILABLE=1 + echo "Check whether -march=armv8-a+crc works ... Yes." | tee -a configure.log + else + echo "Check whether -march=armv8-a+crc works ... No." | tee -a configure.log + if try $CC -c $CFLAGS -march=armv8-a+crc+simd $test.c; then + ACLE_AVAILABLE=1 + echo "Check whether -march=armv8-a+crc+simd works ... Yes." | tee -a configure.log + if test "$ARCH" = "armv8-a+crc"; then + ARCH=armv8-a+crc+simd + fi + else + ACLE_AVAILABLE=0 + echo "Check whether -march=armv8-a+crc+simd works ... No." | tee -a configure.log + fi + fi +} + check_neon_intrinsics() { # Check whether -mfpu=neon is available on ARM processors. cat > $test.c << EOF @@ -1633,6 +1656,7 @@ EOF fi if test $without_optimizations -eq 0; then + check_acle_intrinsics check_neon_intrinsics fi @@ -1713,11 +1737,13 @@ EOF acleflag="-march=${ARCH}" if test $without_optimizations -eq 0; then - CFLAGS="${CFLAGS} -DARM_ACLE_CRC_HASH" - SFLAGS="${SFLAGS} -DARM_ACLE_CRC_HASH" + if test $ACLE_AVAILABLE -eq 1; then + CFLAGS="${CFLAGS} -DARM_ACLE_CRC_HASH" + SFLAGS="${SFLAGS} -DARM_ACLE_CRC_HASH" - ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} crc32_acle.o insert_string_acle.o" - ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} crc32_acle.lo insert_string_acle.lo" + ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} crc32_acle.o insert_string_acle.o" + ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} crc32_acle.lo insert_string_acle.lo" + fi if test $buildneon -eq 1; then if test $MFPU_NEON_AVAILABLE -eq 1;then