From 67e05a6e95338d5f1087bb1e8dcaa3e14685e1fa Mon Sep 17 00:00:00 2001 From: Marco Bodrato Date: Tue, 15 Mar 2022 22:45:03 +0100 Subject: mpn/generic/mul_fft.c: Use _bknp1, but not when tuning, to avoid "random" results --- mpn/generic/mul_fft.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'mpn') 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; -- cgit v1.2.1