diff options
author | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2022-03-15 22:45:03 +0100 |
---|---|---|
committer | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2022-03-15 22:45:03 +0100 |
commit | 67e05a6e95338d5f1087bb1e8dcaa3e14685e1fa (patch) | |
tree | e81fa434570a4be2191f595924d6ca670f4cf780 | |
parent | 9fe209fe87034e04a72ba877d5a2e8c6eeeb2509 (diff) | |
download | gmp-67e05a6e95338d5f1087bb1e8dcaa3e14685e1fa.tar.gz |
mpn/generic/mul_fft.c: Use _bknp1, but not when tuning, to avoid "random" results
-rw-r--r-- | mpn/generic/mul_fft.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/mpn/generic/mul_fft.c b/mpn/generic/mul_fft.c index bbc19986b..76a21068e 100644 --- a/mpn/generic/mul_fft.c +++ b/mpn/generic/mul_fft.c @@ -474,6 +474,7 @@ static void mpn_fft_mul_modF_K (mp_ptr *ap, mp_ptr *bp, mp_size_t n, mp_size_t K) { int i; + unsigned k; int sqr = (ap == bp); TMP_DECL; @@ -547,6 +548,33 @@ mpn_fft_mul_modF_K (mp_ptr *ap, mp_ptr *bp, mp_size_t n, mp_size_t K) (*ap)[n] = cy; } } +#if ! TUNE_PROGRAM_BUILD + else if (MPN_MULMOD_BKNP1_USABLE (n, k, MUL_FFT_MODF_THRESHOLD)) + { + mp_ptr a; + mp_size_t n_k = n / k; + + if (sqr) + { + mp_ptr tp = TMP_SALLOC_LIMBS (mpn_sqrmod_bknp1_itch (n)); + for (i = 0; i < K; i++) + { + a = *ap++; + mpn_sqrmod_bknp1 (a, a, n_k, k, tp); + } + } + else + { + mp_ptr b, tp = TMP_SALLOC_LIMBS (mpn_mulmod_bknp1_itch (n)); + for (i = 0; i < K; i++) + { + a = *ap++; + b = *bp++; + mpn_mulmod_bknp1 (a, a, b, n_k, k, tp); + } + } + } +#endif else { mp_ptr a, b, tp, tpn; |