# 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()
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
fi
if test $without_optimizations -eq 0; then
+ check_acle_intrinsics
check_neon_intrinsics
fi
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