This patch replaces #ifndef POCKETFFT_NO_VECTORS by #if POCKETFFT_NO_VECTORS. It also makes it the default, as SIMD instructions are not that well-suited for substitutes. diff --git a/pocketfft_hdronly.h b/pocketfft_hdronly.h index d75ada6..b2d0a23 100644 --- a/pocketfft_hdronly.h +++ b/pocketfft_hdronly.h @@ -39,6 +39,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef POCKETFFT_HDRONLY_H #define POCKETFFT_HDRONLY_H +#ifndef POCKETFFT_NO_VECTORS +#define POCKETFFT_NO_VECTORS 1 +#endif + #ifndef __cplusplus #error This file is C++ and requires a C++ compiler. #endif @@ -106,29 +110,29 @@ constexpr bool FORWARD = true, BACKWARD = false; // only enable vector support for gcc>=5.0 and clang>=5.0 -#ifndef POCKETFFT_NO_VECTORS -#define POCKETFFT_NO_VECTORS +#if !(POCKETFFT_NO_VECTORS) +#define POCKETFFT_NO_VECTORS 1 #if defined(__INTEL_COMPILER) // do nothing. This is necessary because this compiler also sets __GNUC__. #elif defined(__clang__) // AppleClang has their own version numbering #ifdef __apple_build_version__ # if (__clang_major__ > 9) || (__clang_major__ == 9 && __clang_minor__ >= 1) -# undef POCKETFFT_NO_VECTORS +#define POCKETFFT_NO_VECTORS 0 # endif #elif __clang_major__ >= 5 -# undef POCKETFFT_NO_VECTORS +#define POCKETFFT_NO_VECTORS 0 #endif #elif defined(__GNUC__) #if __GNUC__>=5 -#undef POCKETFFT_NO_VECTORS +#define POCKETFFT_NO_VECTORS 0 #endif #endif #endif template struct VLEN { static constexpr size_t val=1; }; -#ifndef POCKETFFT_NO_VECTORS +#if !(POCKETFFT_NO_VECTORS) #if (defined(__AVX512F__)) template<> struct VLEN { static constexpr size_t val=16; }; template<> struct VLEN { static constexpr size_t val=8; }; @@ -145,7 +149,7 @@ template<> struct VLEN { static constexpr size_t val=2; }; template<> struct VLEN { static constexpr size_t val=4; }; template<> struct VLEN { static constexpr size_t val=2; }; #else -#define POCKETFFT_NO_VECTORS +#define POCKETFFT_NO_VECTORS 1 #endif #endif @@ -180,7 +184,7 @@ template class arr T *p; size_t sz; -#if defined(POCKETFFT_NO_VECTORS) +#if POCKETFFT_NO_VECTORS static T *ralloc(size_t num) { if (num==0) return nullptr; @@ -3026,7 +3030,7 @@ class rev_iter template struct VTYPE {}; template using vtype_t = typename VTYPE::type; -#ifndef POCKETFFT_NO_VECTORS +#if !(POCKETFFT_NO_VECTORS) template<> struct VTYPE { using type = float __attribute__ ((vector_size (VLEN::val*sizeof(float)))); @@ -3139,7 +3143,7 @@ POCKETFFT_NOINLINE void general_nd(const cndarr &in, ndarr &out, auto storage = alloc_tmp(in.shape(), len, sizeof(T)); const auto &tin(iax==0? in : out); multi_iter it(tin, out, axes[iax]); -#ifndef POCKETFFT_NO_VECTORS +#if !(POCKETFFT_NO_VECTORS) if (vlen>1) while (it.remaining()>=vlen) { @@ -3245,7 +3249,7 @@ template POCKETFFT_NOINLINE void general_r2c( constexpr auto vlen = VLEN::val; auto storage = alloc_tmp(in.shape(), len, sizeof(T)); multi_iter it(in, out, axis); -#ifndef POCKETFFT_NO_VECTORS +#if !(POCKETFFT_NO_VECTORS) if (vlen>1) while (it.remaining()>=vlen) { @@ -3300,7 +3304,7 @@ template POCKETFFT_NOINLINE void general_c2r( constexpr auto vlen = VLEN::val; auto storage = alloc_tmp(out.shape(), len, sizeof(T)); multi_iter it(in, out, axis); -#ifndef POCKETFFT_NO_VECTORS +#if !(POCKETFFT_NO_VECTORS) if (vlen>1) while (it.remaining()>=vlen) { ba1592be898c2b72'>build-system: Add 'channel-build-system'....* gnu/ci.scm (channel-build-system, channel-source->package): Remove. * gnu/packages/package-management.scm (channel-source->package): New procedure, moved from (gnu ci). * guix/build-system/channel.scm: New file, with code moved from (gnu ci). * doc/guix.texi (Build Systems): Document it. Ludovic Courtès 2022-08-05guix system: Remove unused 'read-operating-system' procedure....* guix/scripts/system.scm (read-operating-system): Remove. * gnu/ci.scm: Remove unused (guix scripts system) import. Ludovic Courtès 2022-05-25Move (gnu platform) and (gnu platforms ...) to guix/....* gnu/platform.scm: * gnu/platforms/arm.scm: * gnu/platforms/hurd.scm: * gnu/platforms/mips.scm: * gnu/platforms/powerpc.scm: * gnu/platforms/riscv.scm: * gnu/platforms/s390.scm: * gnu/platforms/x86.scm: Move to guix/. * Makefile.am: * doc/guix.texi (Porting to a New Platform): * etc/release-manifest.scm: * gnu/ci.scm: * gnu/image.scm: * gnu/local.mk: * gnu/packages/bioinformatics.scm: * gnu/packages/bootstrap.scm: * gnu/packages/cross-base.scm: * gnu/packages/instrumentation.scm: * gnu/packages/linux.scm: * gnu/system/image.scm: * gnu/system/images/hurd.scm: * gnu/system/images/novena.scm: * gnu/system/images/pine64.scm: * gnu/system/images/pinebook-pro.scm: * gnu/system/images/rock64.scm: * guix/scripts/build.scm: * guix/scripts/system.scm: * guix/self.scm: Update (gnu platform...) to (guix platform...). Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Josselin Poiret 2022-05-22ci: Do not rely on hardcoded cross-targets lists....* gnu/ci.scm (%cross-targets): Remove it ... (cross-jobs): ... and use the targets procedure instead. * etc/release-manifest.scm: Adapt it. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Mathieu Othacehe 2022-01-01ci: Add extra jobs for tunable packages....This allows us to provide substitutes for tuned package variants. * gnu/ci.scm (package-job): Add #:suffix and honor it. (package->job): Add #:suffix and honor it. (%x86-64-micro-architectures): New variable. (tuned-package-jobs): New procedure. (cuirass-jobs): Add jobs for tunable packages. Ludovic Courtès