From ac891a3056b935185205626a6da9998e51dae8fb Mon Sep 17 00:00:00 2001 From: Peter Bell Date: Sun, 4 Aug 2019 02:34:43 +0100 Subject: [PATCH] Fix hartley transforms by disallowing inplace FFT output --- pocketfft_hdronly.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pocketfft_hdronly.h b/pocketfft_hdronly.h index 7afc983..0b955ba 100644 --- a/pocketfft_hdronly.h +++ b/pocketfft_hdronly.h @@ -2902,7 +2902,8 @@ template using add_vec_t = typename add_vec::type; template POCKETFFT_NOINLINE void general_nd(const cndarr &in, ndarr &out, - const shape_t &axes, T0 fct, size_t POCKETFFT_NTHREADS, const Exec & exec) + const shape_t &axes, T0 fct, size_t POCKETFFT_NTHREADS, const Exec & exec, + const bool allow_inplace=true) { shared_ptr plan; @@ -2932,7 +2933,7 @@ POCKETFFT_NOINLINE void general_nd(const cndarr &in, ndarr &out, while (it.remaining()>0) { it.advance(1); - auto buf = it.stride_out() == sizeof(T) ? + auto buf = allow_inplace && it.stride_out() == sizeof(T) ? &out[it.oofs(0)] : reinterpret_cast(storage.data()); exec(it, in, out, buf, *plan, fct); } @@ -2979,8 +2980,8 @@ template void copy_hartley(const multi_iter &it, size_t i=1, i1=1, i2=it.length_out()-1; for (i=1; i void r2r_separable_hartley(const shape_t &shape, util::sanity_check(shape, stride_in, stride_out, data_in==data_out, axes); cndarr ain(data_in, shape, stride_in); ndarr aout(data_out, shape, stride_out); - general_nd>(ain, aout, axes, fct, nthreads, ExecHartley{}); + general_nd>(ain, aout, axes, fct, nthreads, ExecHartley{}, + false); } } // namespace detail -- GitLab