From ff901b5cd4e402ecd44ef3378c19124522fd0ed3 Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Fri, 28 Nov 2014 18:47:58 +0100 Subject: [PATCH] arch: add support for HW_CAP based neon runtime detection Rename the files from neon to arm to reflect the fact that it's related to arm processors and also because NEON was renamed ASIMD later. The NEON and ASIMD features are mutually exclusive. 32bits binaries will get NEON and never ASIMD, if they run on ARMv7 or ARMv8. 64bits binaries will only run on ARMv8 and get ASIMD and never NEON. The flag remains with _neon and no other flag is introduced since there is no risk of confusion. Besides people who care usually know NEON but are not yet aware of the ASIMD renaming. Keeping the _neon name probably saves some questions. http://tracker.ceph.com/issues/10197 Fixes: #10197 Signed-off-by: Loic Dachary --- src/arch/Makefile.am | 4 ++-- src/arch/{neon.c => arm.c} | 2 +- src/arch/arm.h | 16 ++++++++++++++++ src/arch/neon.h | 16 ---------------- src/arch/probe.cc | 4 ++-- .../jerasure/ErasureCodePluginSelectJerasure.cc | 2 +- .../TestErasureCodePluginJerasure.cc | 2 +- src/test/test_arch.cc | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) rename src/arch/{neon.c => arm.c} (96%) create mode 100644 src/arch/arm.h delete mode 100644 src/arch/neon.h diff --git a/src/arch/Makefile.am b/src/arch/Makefile.am index 273420781509..81df60e0e2d5 100644 --- a/src/arch/Makefile.am +++ b/src/arch/Makefile.am @@ -1,11 +1,11 @@ libarch_la_SOURCES = \ arch/intel.c \ - arch/neon.c \ + arch/arm.c \ arch/probe.cc noinst_LTLIBRARIES += libarch.la noinst_HEADERS += \ arch/intel.h \ - arch/neon.h \ + arch/arm.h \ arch/probe.h diff --git a/src/arch/neon.c b/src/arch/arm.c similarity index 96% rename from src/arch/neon.c rename to src/arch/arm.c index f059080b96b8..93d079ade965 100644 --- a/src/arch/neon.c +++ b/src/arch/arm.c @@ -41,7 +41,7 @@ static unsigned long get_hwcap(void) #endif // __linux__ -int ceph_arch_neon_probe(void) +int ceph_arch_arm_probe(void) { #if __arm__ && __linux__ ceph_arch_neon = (get_hwcap() & HWCAP_NEON) == HWCAP_NEON; diff --git a/src/arch/arm.h b/src/arch/arm.h new file mode 100644 index 000000000000..f61343833d20 --- /dev/null +++ b/src/arch/arm.h @@ -0,0 +1,16 @@ +#ifndef CEPH_ARCH_ARM_H +#define CEPH_ARCH_ARM_H + +#ifdef __cplusplus +extern "C" { +#endif + +extern int ceph_arch_neon; /* true if we have ARM NEON or ASIMD abilities */ + +extern int ceph_arch_arm_probe(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/arch/neon.h b/src/arch/neon.h deleted file mode 100644 index 0c8aacf5e87d..000000000000 --- a/src/arch/neon.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef CEPH_ARCH_NEON_H -#define CEPH_ARCH_NEON_H - -#ifdef __cplusplus -extern "C" { -#endif - -extern int ceph_arch_neon; /* true if we have ARM NEON abilities */ - -extern int ceph_arch_neon_probe(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/arch/probe.cc b/src/arch/probe.cc index 8648e54d9457..b95921ae51f6 100644 --- a/src/arch/probe.cc +++ b/src/arch/probe.cc @@ -4,7 +4,7 @@ #include "arch/probe.h" #include "arch/intel.h" -#include "arch/neon.h" +#include "arch/arm.h" int ceph_arch_probe(void) { @@ -12,7 +12,7 @@ int ceph_arch_probe(void) return 1; ceph_arch_intel_probe(); - ceph_arch_neon_probe(); + ceph_arch_arm_probe(); ceph_arch_probed = 1; return 1; diff --git a/src/erasure-code/jerasure/ErasureCodePluginSelectJerasure.cc b/src/erasure-code/jerasure/ErasureCodePluginSelectJerasure.cc index 32560b40fcbb..808cf014734d 100644 --- a/src/erasure-code/jerasure/ErasureCodePluginSelectJerasure.cc +++ b/src/erasure-code/jerasure/ErasureCodePluginSelectJerasure.cc @@ -19,7 +19,7 @@ #include "common/debug.h" #include "arch/probe.h" #include "arch/intel.h" -#include "arch/neon.h" +#include "arch/arm.h" #include "erasure-code/ErasureCodePlugin.h" #define dout_subsys ceph_subsys_osd diff --git a/src/test/erasure-code/TestErasureCodePluginJerasure.cc b/src/test/erasure-code/TestErasureCodePluginJerasure.cc index e8128a8bdee1..d7dbe3cad46c 100644 --- a/src/test/erasure-code/TestErasureCodePluginJerasure.cc +++ b/src/test/erasure-code/TestErasureCodePluginJerasure.cc @@ -18,7 +18,7 @@ #include #include "arch/probe.h" #include "arch/intel.h" -#include "arch/neon.h" +#include "arch/arm.h" #include "global/global_init.h" #include "erasure-code/ErasureCodePlugin.h" #include "common/ceph_argparse.h" diff --git a/src/test/test_arch.cc b/src/test/test_arch.cc index 3b0cd8267f22..b129262af277 100644 --- a/src/test/test_arch.cc +++ b/src/test/test_arch.cc @@ -18,7 +18,7 @@ #include "arch/probe.h" #include "arch/intel.h" -#include "arch/neon.h" +#include "arch/arm.h" #include "global/global_init.h" #include "common/ceph_argparse.h" #include "global/global_context.h" @@ -47,7 +47,7 @@ TEST(Arch, all) int expected; - expected = strstr(flags, " neon ") ? 1 : 0; + expected = (strstr(flags, " neon ") || strstr(flags, " asimd ")) ? 1 : 0; EXPECT_EQ(expected, ceph_arch_neon); expected = strstr(flags, " pclmulqdq ") ? 1 : 0; -- 2.47.3