diff options
author | Kefu Chai <tchaikov@gmail.com> | 2021-08-29 16:24:30 +0200 |
---|---|---|
committer | Kefu Chai <tchaikov@gmail.com> | 2021-08-29 16:40:27 +0200 |
commit | 1b9ad6ca971d2c6222f1fb405ae620a32159cd5d (patch) | |
tree | 0071768f466c7fad18ce80035296281d83df4d32 /cmake/modules/SIMDExt.cmake | |
parent | Merge pull request #42957 from athanatos/sjust/wip-lba-rewrite-working (diff) | |
download | ceph-1b9ad6ca971d2c6222f1fb405ae620a32159cd5d.tar.xz ceph-1b9ad6ca971d2c6222f1fb405ae620a32159cd5d.zip |
arch,cmake: compile ppc.c on all powerpc machines
* cmake/modules/SIMDExt.cmake: define HAVE_PPC for 32-bit PowerPC.
* src/arch/CMakeLists.txt: compile ppc.c for all PowerPC architectures,
including powerpc (32-bit PowerPC), ppc64el (64-bit Little Endian
PowerPC) and ppc64 (64-bit Big Endian PowerPC).
before this change, ppc.c is only compiled if HAVE_POWER8 is defined.
but Power8 is a 64-bit PowerPC architecture. while in src/arch/probe.cc,
we check for `defined(__powerpc__) || defined(__ppc__)`, if this is
true, ceph_arch_ppc_probe() is used to check for the support of
Altivec. but on non-power8 PowerPC machines, the linker fails to find the
symbols like ceph_arch_ppc_probe(), as ppc.c is not compiled on them.
in this change, ppc.c is compiled on all PowerPC architectures, so that
ceph_arch_ppc_probe() is also available on non-power8 machines. this
change does not impact the behavior of non-power8 machines. because
on them, the runtime check would fail to detect the existence of
PPC_FEATURE2_VEC_CRYPTO instructions.
Reported-by: Mattias Ellert <mattias.ellert@physics.uu.se>
Signed-off-by: Kefu Chai <tchaikov@gmail.com>
Diffstat (limited to 'cmake/modules/SIMDExt.cmake')
-rw-r--r-- | cmake/modules/SIMDExt.cmake | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/cmake/modules/SIMDExt.cmake b/cmake/modules/SIMDExt.cmake index 72f86e33b94..84818617ac3 100644 --- a/cmake/modules/SIMDExt.cmake +++ b/cmake/modules/SIMDExt.cmake @@ -1,8 +1,13 @@ # detect SIMD extensions # +# HAVE_ARM # HAVE_ARMV8_CRC +# HAVE_ARMV8_CRC_CRYPTO_INTRINSICS +# HAVE_ARMV8_CRYPTO # HAVE_ARMV8_SIMD # HAVE_ARM_NEON +# +# HAVE_INTEL # HAVE_INTEL_SSE # HAVE_INTEL_SSE2 # HAVE_INTEL_SSE3 @@ -11,6 +16,10 @@ # HAVE_INTEL_SSE4_1 # HAVE_INTEL_SSE4_2 # +# HAVE_PPC64LE +# HAVE_PPC64 +# HAVE_PPC +# # SIMD_COMPILE_FLAGS # @@ -79,14 +88,16 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|amd64|x86_64|AMD64") endif() endif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64") endif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686|amd64|x86_64|AMD64") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(powerpc|ppc)64|(powerpc|ppc)64le") +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(powerpc|ppc)") if(CMAKE_SYSTEM_PROCESSOR MATCHES "(powerpc|ppc)64le") set(HAVE_PPC64LE 1) message(STATUS " we are ppc64le") - else() + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(powerpc|ppc)64") set(HAVE_PPC64 1) message(STATUS " we are ppc64") - endif(CMAKE_SYSTEM_PROCESSOR MATCHES "(powerpc|ppc)64le") + else() + set(HAVE_PPC 1) + endif() CHECK_C_COMPILER_FLAG("-maltivec" HAS_ALTIVEC) if(HAS_ALTIVEC) message(STATUS " HAS_ALTIVEC yes") |