commit a49db45bb3a3d70bfbd3f6f648206206315b66b1
parent 68c2f63a7dcf28f9148fa759cce6d5b4232c2833
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date: Sun, 26 Nov 2023 10:53:00 +0000
lowhalf, highhalf
Diffstat:
1 file changed, 24 insertions(+), 0 deletions(-)
diff --git a/include/kfr/simd/shuffle.hpp b/include/kfr/simd/shuffle.hpp
@@ -54,6 +54,18 @@ KFR_INTRINSIC vec_shape<T, Nout> low(vec_shape<T, N>)
return {};
}
+template <typename T, size_t N, size_t Nout = N / 2>
+KFR_INTRINSIC vec<T, Nout> lowhalf(const vec<T, N>& x)
+{
+ return x.shuffle(csizeseq<Nout>);
+}
+
+template <typename T, size_t N, size_t Nout = N / 2>
+KFR_INTRINSIC vec_shape<T, Nout> lowhalf(vec_shape<T, N>)
+{
+ return {};
+}
+
template <typename T, size_t N, size_t Nout = N - prev_poweroftwo(N - 1)>
KFR_INTRINSIC vec<T, Nout> high(const vec<T, N>& x)
{
@@ -66,6 +78,18 @@ KFR_INTRINSIC vec_shape<T, Nout> high(vec_shape<T, N>)
return {};
}
+template <typename T, size_t N, size_t Nout = N - N / 2>
+KFR_INTRINSIC vec<T, Nout> highhalf(const vec<T, N>& x)
+{
+ return x.shuffle(csizeseq<Nout, N / 2>);
+}
+
+template <typename T, size_t N, size_t Nout = N - N / 2>
+KFR_INTRINSIC vec_shape<T, Nout> highhalf(vec_shape<T, N>)
+{
+ return {};
+}
+
template <typename T, size_t... Ns>
KFR_INTRINSIC vec<T, csum<size_t, Ns...>()> concat(const vec<T, Ns>&... vs) CMT_NOEXCEPT
{