From 20fca524baf99402f742ce38c538f2fd07d5fff9 Mon Sep 17 00:00:00 2001 From: Michalis Spyrou Date: Mon, 7 Jun 2021 14:23:57 +0100 Subject: Create core library using high priority operators A smaller core library is created using a subset of the operators. Changed the structure of filelist.json in order to include more information about the kernels and make the selection easier. Resolves: COMPMID-4514 Change-Id: I079ca7d8e64346174eebdd13b834e1dd4dc36ca2 Signed-off-by: Michalis Spyrou Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5786 Tested-by: Arm Jenkins Reviewed-by: Georgios Pinitas Comments-Addressed: Arm Jenkins --- src/core/NEON/kernels/arm_gemm/utils.hpp | 50 +++++++++++--------------------- 1 file changed, 17 insertions(+), 33 deletions(-) (limited to 'src/core/NEON/kernels/arm_gemm/utils.hpp') diff --git a/src/core/NEON/kernels/arm_gemm/utils.hpp b/src/core/NEON/kernels/arm_gemm/utils.hpp index 1269ef62a6..e648ce2fb5 100644 --- a/src/core/NEON/kernels/arm_gemm/utils.hpp +++ b/src/core/NEON/kernels/arm_gemm/utils.hpp @@ -141,52 +141,36 @@ struct IndirectInputArg { }; namespace utils { -namespace { - -#ifdef __ARM_FEATURE_SVE -template -inline unsigned long get_vector_length_sz() { - unsigned long v; - - __asm ( - "cntb %0" - : "=r" (v) - ); - - return v / sz; -} - -#define VEC_LEN_SPEC(sz, opcode) template <> inline unsigned long get_vector_length_sz() { unsigned long v; __asm ( opcode " %0" : "=r" (v)); return v; } - -VEC_LEN_SPEC(8, "cntd") -VEC_LEN_SPEC(4, "cntw") -VEC_LEN_SPEC(2, "cnth") -VEC_LEN_SPEC(1, "cntb") -#endif - -} // anonymous namespace - template inline unsigned long get_vector_length() { -#ifdef __ARM_FEATURE_SVE - return get_vector_length_sz(); -#else +#if defined(ARM_COMPUTE_ENABLE_SVE) + uint64_t vl; + + __asm __volatile ( + ".inst 0x0420e3e0\n" // CNTB X0, ALL, MUL #1 + "mov %0, X0\n" + : "=r" (vl) + : + : "x0" + ); + + return vl / sizeof(T); +#else // !defined(ARM_COMPUTE_ENABLE_SVE) return 16 / sizeof(T); -#endif +#endif // defined(ARM_COMPUTE_ENABLE_SVE) } template inline unsigned long get_vector_length(VLType vl_type) { switch (vl_type) { -#ifdef __ARM_FEATURE_SVE +#if defined(ARM_COMPUTE_ENABLE_SVE) case VLType::SVE: - return get_vector_length_sz(); -#endif + return get_vector_length(); +#endif // defined(ARM_COMPUTE_ENABLE_SVE) default: return 16 / sizeof(T); } } - } // utils namespace } // arm_gemm namespace -- cgit v1.2.1