diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index fca4984df4..9b50cae2b9 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -16,10 +16,10 @@ concurrency: jobs: ############################################################################## - # ubuntu, gcc, avx2, code coverage + # ubuntu, gcc, code coverage ############################################################################## - ubuntu-avx2-codecoverage: - name: Ubuntu GCC, AVX2, Code Coverage (x10) + ubuntu-codecoverage: + name: Ubuntu GCC, Code Coverage (x10) runs-on: ubuntu-latest diff --git a/configure.ac b/configure.ac index 9abbfa22b7..2b12be05ec 100644 --- a/configure.ac +++ b/configure.ac @@ -958,7 +958,11 @@ AX_CHECK_COMPILE_FLAG([-Wall],[DEFAULT_CFLAGS="-Wall $DEFAULT_CFLAGS"]) AX_CHECK_COMPILE_FLAG([-Wno-stringop-overread],[DEFAULT_CFLAGS="-Wno-stringop-overread $DEFAULT_CFLAGS"]) AX_CHECK_COMPILE_FLAG([-Wno-stringop-overflow],[DEFAULT_CFLAGS="-Wno-stringop-overflow $DEFAULT_CFLAGS"]) AX_CHECK_COMPILE_FLAG([-Werror=implicit-function-declaration],[DEFAULT_CFLAGS="-Werror=implicit-function-declaration $DEFAULT_CFLAGS"]) -AX_CHECK_COMPILE_FLAG([-O2],[DEFAULT_CFLAGS="-O2 $DEFAULT_CFLAGS"]) +AX_CHECK_COMPILE_FLAG([-O3],[DEFAULT_CFLAGS="-O3 $DEFAULT_CFLAGS"]) +if test "$host" = "$build"; +then + AX_CHECK_COMPILE_FLAG([-march=native],[DEFAULT_CFLAGS="-march=native $DEFAULT_CFLAGS"]) +fi AX_CHECK_COMPILE_FLAG([-std=c11],[DEFAULT_CFLAGS="-std=c11 $DEFAULT_CFLAGS"]) AX_CHECK_COMPILE_FLAG([-pedantic],[DEFAULT_CFLAGS="-pedantic $DEFAULT_CFLAGS"]) @@ -1028,7 +1032,15 @@ error error #endif ])], - [enable_fft_small="yes"] + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([#include ],[ +#if GMP_LIMB_BITS == 32 +#error Dead man +error +#endif + ])], + [enable_fft_small="yes"] + )] )] ) fi diff --git a/src/fft_small/sd_fft_ctx.c b/src/fft_small/sd_fft_ctx.c index a6627ff6c3..e4809d3b17 100644 --- a/src/fft_small/sd_fft_ctx.c +++ b/src/fft_small/sd_fft_ctx.c @@ -13,6 +13,12 @@ #include "fft_small.h" #include "nmod.h" +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) +# include +# define aligned_alloc(alignment, size) _aligned_malloc(size, alignment) +# define free _aligned_free +#endif + void * flint_aligned_alloc(ulong alignment, ulong size) { void * p; @@ -32,6 +38,11 @@ void flint_aligned_free(void * p) free(p); } +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) +# undef aligned_alloc +# undef free +#endif + void sd_fft_ctx_clear(sd_fft_ctx_t Q) { ulong k; diff --git a/src/flint.h.in b/src/flint.h.in index 9bfac89169..f7ac5eb31a 100644 --- a/src/flint.h.in +++ b/src/flint.h.in @@ -132,7 +132,11 @@ typedef struct __FLINT_FILE FLINT_FILE; # define FLINT_OPTIMIZE(x) FLINT_OPTIMIZE_NESTED_1(x) #else # define __attribute__(x) -# define FLINT_FORCE_INLINE static inline +# if defined(_MSC_VER) +# define FLINT_FORCE_INLINE static __forceinline +# else +# define FLINT_FORCE_INLINE static inline +# endif # define FLINT_STATIC_NOINLINE static # define FLINT_UNUSED(x) x # define FLINT_SET_BUT_UNUSED(x) x