9#ifdef __ARM_FEATURE_MVE
15#ifdef ARGON_PLATFORM_SIMDE
18#define nce [[gnu::always_inline]] constexpr
20#define nce [[gnu::always_inline]] inline
24#ifndef ARGON_PLATFORM_MVE
25template <
typename VectorType>
26nce VectorType duplicate_lane(Vec64_t<Scalar_t<VectorType>> vec,
const int i) {
27 constexpr int lanes =
sizeof(VectorType) /
sizeof(Scalar_t<VectorType>);
28 constexpr bool is_quadword = is_quadword_v<VectorType>;
30 if constexpr (lanes == 2) {
33 return simd::duplicate_lane_quad<0>(vec);
35 return simd::duplicate_lane_quad<1>(vec);
39 }
else if constexpr (lanes == 4) {
42 return simd::duplicate_lane_quad<0>(vec);
44 return simd::duplicate_lane_quad<1>(vec);
46 return simd::duplicate_lane_quad<2>(vec);
48 return simd::duplicate_lane_quad<3>(vec);
52 }
else if constexpr (lanes == 8) {
55 return simd::duplicate_lane_quad<0>(vec);
57 return simd::duplicate_lane_quad<1>(vec);
59 return simd::duplicate_lane_quad<2>(vec);
61 return simd::duplicate_lane_quad<3>(vec);
63 return simd::duplicate_lane_quad<4>(vec);
65 return simd::duplicate_lane_quad<5>(vec);
67 return simd::duplicate_lane_quad<6>(vec);
69 return simd::duplicate_lane_quad<7>(vec);
78 if constexpr (lanes == 2) {
81 return simd::duplicate_lane<0>(vec);
83 return simd::duplicate_lane<1>(vec);
87 }
else if constexpr (lanes == 4) {
90 return simd::duplicate_lane<0>(vec);
92 return simd::duplicate_lane<1>(vec);
94 return simd::duplicate_lane<2>(vec);
96 return simd::duplicate_lane<3>(vec);
100 }
else if constexpr (lanes == 8) {
103 return simd::duplicate_lane<0>(vec);
105 return simd::duplicate_lane<1>(vec);
107 return simd::duplicate_lane<2>(vec);
109 return simd::duplicate_lane<3>(vec);
111 return simd::duplicate_lane<4>(vec);
113 return simd::duplicate_lane<5>(vec);
115 return simd::duplicate_lane<6>(vec);
117 return simd::duplicate_lane<7>(vec);
Concept to check if a type is a quad-word SIMD vector type.
Definition concepts.hpp:57
Header file for SIMD features and platform detection.