Skip to content

Commit

Permalink
Merge pull request #30713 from smithfarm/wip-40258-mimic
Browse files Browse the repository at this point in the history
mimic: cmake: detect armv8 crc and crypto feature using CHECK_C_COMPILER_FLAG

Reviewed-by: Kefu Chai <kchai@redhat.com>
Reviewed-by: Josh Durgin <jdurgin@redhat.com>
  • Loading branch information
yuriw committed Oct 21, 2019
2 parents a0b85e9 + d9acfeb commit 246e303
Showing 1 changed file with 13 additions and 41 deletions.
54 changes: 13 additions & 41 deletions cmake/modules/SIMDExt.cmake
Expand Up @@ -16,49 +16,21 @@

if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64")
set(HAVE_ARM 1)
set(save_quiet ${CMAKE_REQUIRED_QUIET})
set(CMAKE_REQUIRED_QUIET true)
include(CheckCXXSourceCompiles)

check_cxx_source_compiles("
#define CRC32CX(crc, value) __asm__(\"crc32cx %w[c], %w[c], %x[v]\":[c]\"+r\"(crc):[v]\"r\"(value))
asm(\".arch_extension crc\");
unsigned int foo(unsigned int ret) {
CRC32CX(ret, 0);
return ret;
}
int main() { foo(0); }" HAVE_ARMV8_CRC)
check_cxx_source_compiles("
asm(\".arch_extension crypto\");
unsigned int foo(unsigned int ret) {
__asm__(\"pmull v2.1q, v2.1d, v1.1d\");
return ret;
}
int main() { foo(0); }" HAVE_ARMV8_CRYPTO)

set(CMAKE_REQUIRED_QUIET ${save_quiet})
if(HAVE_ARMV8_CRC)
message(STATUS " aarch64 crc extensions supported")
endif()

if(HAVE_ARMV8_CRYPTO)
message(STATUS " aarch64 crypto extensions supported")
endif()
CHECK_C_COMPILER_FLAG(-march=armv8-a+crc+crypto HAVE_ARMV8_CRC_CRYPTO_MARCH)

# don't believe only the -march support; gcc 4.8.5 on RHEL/CentOS says
# it supports +crc but hasn't got the intrinsics or arm_acle.h. Test for
# the actual presence of one of the intrinsic functions.
if(HAVE_ARMV8_CRC_CRYPTO_MARCH)
check_cxx_source_compiles("
#include <inttypes.h>
int main() { uint32_t a; uint8_t b; __builtin_aarch64_crc32b(a, b); }
" HAVE_ARMV8_CRC_CRYPTO_INTRINSICS)
endif()
include(CheckCCompilerFlag)

check_c_compiler_flag(-march=armv8-a+crc+crypto HAVE_ARMV8_CRC_CRYPTO_INTRINSICS)
if(HAVE_ARMV8_CRC_CRYPTO_INTRINSICS)
message(STATUS " aarch64 crc+crypto intrinsics supported")
set(ARMV8_CRC_COMPILE_FLAGS "${ARMV8_CRC_COMPILE_FLAGS} -march=armv8-a+crc+crypto")
set(ARMV8_CRC_COMPILE_FLAGS "-march=armv8-a+crc+crypto")
set(HAVE_ARMV8_CRC TRUE)
set(HAVE_ARMV8_CRYPTO TRUE)
else()
check_c_compiler_flag(-march=armv8-a+crc HAVE_ARMV8_CRC)
check_c_compiler_flag(-march=armv8-a+crypto HAVE_ARMV8_CRYPTO)
if(HAVE_ARMV8_CRC)
set(ARMV8_CRC_COMPILE_FLAGS "-march=armv8-a+crc")
elseif(HAVE_ARMV8_CRYPTO)
set(ARMV8_CRC_COMPILE_FLAGS "-march=armv8-a+crypto")
endif()
endif()

CHECK_C_COMPILER_FLAG(-march=armv8-a+simd HAVE_ARMV8_SIMD)
Expand Down

0 comments on commit 246e303

Please sign in to comment.