commit 26999ea8acf56f43000a29cbb5f27ae766ba604a
parent 164f87e3d2c6be895735db543b39976fde6874cd
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date: Fri, 1 Jul 2016 15:58:52 +0300
kfr::broadcast now takes the width of the result vector
Diffstat:
5 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/include/kfr/base/operators.hpp b/include/kfr/base/operators.hpp
@@ -653,11 +653,11 @@ KFR_FN(addsub)
template <typename T, size_t N>
KFR_INLINE vec<T, N> negeven(const vec<T, N>& x)
{
- return x ^ broadcast<N / 2>(-T(), T());
+ return x ^ broadcast<N>(-T(), T());
}
template <typename T, size_t N>
KFR_INLINE vec<T, N> negodd(const vec<T, N>& x)
{
- return x ^ broadcast<N / 2>(T(), -T());
+ return x ^ broadcast<N>(T(), -T());
}
}
diff --git a/include/kfr/base/shuffle.hpp b/include/kfr/base/shuffle.hpp
@@ -55,7 +55,7 @@ KFR_INLINE constexpr vec<T, Nout> broadcast_helper(csizes_t<indices...>, T x, Ts
}
}
-template <size_t N, typename T, typename... Ts, size_t Nout = N*(2 + sizeof...(Ts))>
+template <size_t Nout, typename T, typename... Ts>
constexpr KFR_INLINE vec<T, Nout> broadcast(T x, T y, Ts... rest)
{
return internal::broadcast_helper(csizeseq<Nout>, x, y, rest...);
@@ -289,12 +289,12 @@ namespace internal
template <typename T, size_t N, typename = u8[N > 1]>
constexpr KFR_INLINE mask<T, N> evenmask()
{
- return broadcast<N / 2, T>(maskbits<T>(true), maskbits<T>(false));
+ return broadcast<N, T>(maskbits<T>(true), maskbits<T>(false));
}
template <typename T, size_t N, typename = u8[N > 1]>
constexpr KFR_INLINE mask<T, N> oddmask()
{
- return broadcast<N / 2, T>(maskbits<T>(false), maskbits<T>(true));
+ return broadcast<N, T>(maskbits<T>(false), maskbits<T>(true));
}
}
diff --git a/include/kfr/base/vec.hpp b/include/kfr/base/vec.hpp
@@ -1234,7 +1234,7 @@ struct expression_lambda : input_expression
{
KFR_INLINE expression_lambda(Fn&& fn) : fn(std::move(fn)) {}
- template <typename T, size_t N, KFR_ENABLE_IF(is_callable<Fn, cinput_t, size_t, vec_t<T, N>>::value)>
+ template <typename T, size_t N, KFR_ENABLE_IF(N&& is_callable<Fn, cinput_t, size_t, vec_t<T, N>>::value)>
KFR_INLINE vec<T, N> operator()(cinput_t, size_t index, vec_t<T, N> y) const
{
return fn(cinput, index, y);
diff --git a/include/kfr/dft/fft.hpp b/include/kfr/dft/fft.hpp
@@ -113,13 +113,13 @@ KFR_INTRIN void radix4_body(size_t N, csize_t<width>, cfalse_t, cfalse_t, cfalse
diff13 = a1 - a3;
if (inverse)
{
- diff13 = (diff13 ^ broadcast<width, T>(T(), -T()));
+ diff13 = (diff13 ^ broadcast<width * 2, T>(T(), -T()));
diff13 = swap<2>(diff13);
}
else
{
diff13 = swap<2>(diff13);
- diff13 = (diff13 ^ broadcast<width, T>(T(), -T()));
+ diff13 = (diff13 ^ broadcast<width * 2, T>(T(), -T()));
}
w1 = diff02 + diff13;
diff --git a/include/kfr/dft/ft.hpp b/include/kfr/dft/ft.hpp
@@ -474,7 +474,7 @@ constexpr cvec<T, N> fixed_twiddle = get_fixed_twiddle<T, N, size, start, step,
template <typename T, size_t N, bool inverse>
constexpr cvec<T, N> twiddleimagmask()
{
- return inverse ? broadcast<N, T>(-1, +1) : broadcast<N, T>(+1, -1);
+ return inverse ? broadcast<N * 2, T>(-1, +1) : broadcast<N * 2, T>(+1, -1);
}
#pragma clang diagnostic push
@@ -564,13 +564,13 @@ KFR_INTRIN void butterfly4(cfalse_t /*split_format*/, cvec<T, N> a0, cvec<T, N>
w2 = sum02 - sum13;
if (inverse)
{
- diff13 = (diff13 ^ broadcast<N, T>(T(), -T()));
+ diff13 = (diff13 ^ broadcast<N * 2, T>(T(), -T()));
diff13 = swap<2>(diff13);
}
else
{
diff13 = swap<2>(diff13);
- diff13 = (diff13 ^ broadcast<N, T>(T(), -T()));
+ diff13 = (diff13 ^ broadcast<N * 2, T>(T(), -T()));
}
w1 = diff02 + diff13;
@@ -1436,10 +1436,10 @@ KFR_INTRIN void generic_butterfly(size_t radix, cbool_t<inverse>, complex<T>* ou
}
template <typename T, size_t N>
-constexpr cvec<T, N> cmask08 = broadcast<N, T>(T(), -T());
+constexpr cvec<T, N> cmask08 = broadcast<N * 2, T>(T(), -T());
template <typename T, size_t N>
-constexpr cvec<T, N> cmask0088 = broadcast<N, T>(T(), T(), -T(), -T());
+constexpr cvec<T, N> cmask0088 = broadcast<N * 4, T>(T(), T(), -T(), -T());
template <bool A = false, typename T, size_t N>
KFR_INTRIN void cbitreverse_write(complex<T>* dest, vec<T, N> x)