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 27342078150..81df60e0e2d 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 f059080b96b..93d079ade96 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 00000000000..f61343833d2 --- /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 0c8aacf5e87..00000000000 --- 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 8648e54d945..b95921ae51f 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 32560b40fcb..808cf014734 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 e8128a8bdee..d7dbe3cad46 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 3b0cd8267f2..b129262af27 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