From 57c033bb5400ef19e5952f191da3e878e21bba91 Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Thu, 15 Feb 2018 12:29:44 +0000 Subject: COMPMID-906: Use fused activation in NEON Batch normalization Change-Id: I5a6413548b2c9b8972c91ddba57395509dffd87e Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/120656 Tested-by: Jenkins Reviewed-by: Anthony Barbier --- arm_compute/core/NEON/wrapper/traits.h | 51 ++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 21 deletions(-) (limited to 'arm_compute/core/NEON/wrapper/traits.h') diff --git a/arm_compute/core/NEON/wrapper/traits.h b/arm_compute/core/NEON/wrapper/traits.h index 045839cf48..08b2c9b48f 100644 --- a/arm_compute/core/NEON/wrapper/traits.h +++ b/arm_compute/core/NEON/wrapper/traits.h @@ -35,31 +35,40 @@ namespace traits // *INDENT-OFF* // clang-format off +/** 64-bit vector tag */ +struct vector_64_tag {}; +/** 128-bit vector tag */ +struct vector_128_tag {}; + /** Create the appropriate NEON vector given its type and size */ template struct neon_vector; /** Specializations */ -template <> struct neon_vector{ using type = uint8x8_t; }; -template <> struct neon_vector{ using type = int8x8_t; }; -template <> struct neon_vector{ using type = uint8x16_t; }; -template <> struct neon_vector{ using type = int8x16_t; }; -template <> struct neon_vector{ using type = uint16x4_t; }; -template <> struct neon_vector{ using type = int16x4_t; }; -template <> struct neon_vector{ using type = uint16x8_t; }; -template <> struct neon_vector{ using type = int16x8_t; }; -template <> struct neon_vector{ using type = uint32x2_t; }; -template <> struct neon_vector{ using type = int32x2_t; }; -template <> struct neon_vector{ using type = uint32x4_t; }; -template <> struct neon_vector{ using type = int32x4_t; }; -template <> struct neon_vector{ using type = uint64x1_t; }; -template <> struct neon_vector{ using type = int64x1_t; }; -template <> struct neon_vector{ using type = uint64x2_t; }; -template <> struct neon_vector{ using type = int64x2_t; }; -template <> struct neon_vector{ using type = float32x2_t; }; -template <> struct neon_vector{ using type = float32x4_t; }; +template <> struct neon_vector{ using type = uint8x8_t; using tag_type = vector_64_tag; }; +template <> struct neon_vector{ using type = int8x8_t; using tag_type = vector_64_tag; }; +template <> struct neon_vector{ using type = uint8x16_t; using tag_type = vector_128_tag; }; +template <> struct neon_vector{ using type = int8x16_t; using tag_type = vector_128_tag; }; +template <> struct neon_vector{ using type = uint16x4_t; using tag_type = vector_64_tag; }; +template <> struct neon_vector{ using type = int16x4_t; using tag_type = vector_64_tag; }; +template <> struct neon_vector{ using type = uint16x8_t; using tag_type = vector_128_tag; }; +template <> struct neon_vector{ using type = int16x8_t; using tag_type = vector_128_tag; }; +template <> struct neon_vector{ using type = uint32x2_t; using tag_type = vector_64_tag; }; +template <> struct neon_vector{ using type = int32x2_t; using tag_type = vector_64_tag; }; +template <> struct neon_vector{ using type = uint32x4_t; using tag_type = vector_128_tag; }; +template <> struct neon_vector{ using type = int32x4_t; using tag_type = vector_128_tag; }; +template <> struct neon_vector{ using type = uint64x1_t; using tag_type = vector_64_tag; }; +template <> struct neon_vector{ using type = int64x1_t; using tag_type = vector_64_tag; }; +template <> struct neon_vector{ using type = uint64x2_t; using tag_type = vector_128_tag; }; +template <> struct neon_vector{ using type = int64x2_t; using tag_type = vector_128_tag; }; +template <> struct neon_vector{ using type = float32x2_t; using tag_type = vector_64_tag; }; +template <> struct neon_vector{ using type = float32x4_t; using tag_type = vector_128_tag; }; + +/** Helper type template to get the type of a neon vector */ template using neon_vector_t = typename neon_vector::type; +/** Helper type template to get the tag type of a neon vector */ +template using neon_vector_tag_t = typename neon_vector::tag_type; // clang-format on // *INDENT-ON* -} -} -} +} // namespace traits +} // namespace wrapper +} // namespace arm_compute #endif /* __ARM_COMPUTE_WRAPPER_TRAITS_H__ */ -- cgit v1.2.1