diff options
author | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2022-02-15 09:04:59 +0100 |
---|---|---|
committer | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2022-02-15 09:04:59 +0100 |
commit | e9b82efc35aa13d4aa3cfa7b0d2e3f919d17b290 (patch) | |
tree | 785338f940314586a6ab7a7a2b6e8368caa64484 /tune/common.c | |
parent | 7ec32571f3a3dbeafa591d9e558b62fcd01ee3ff (diff) | |
download | gmp-e9b82efc35aa13d4aa3cfa7b0d2e3f919d17b290.tar.gz |
tune/: tune/speed support for mpn_{mul,sqr}mod_bknp1
Diffstat (limited to 'tune/common.c')
-rw-r--r-- | tune/common.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/tune/common.c b/tune/common.c index b757bf271..52c6d5eea 100644 --- a/tune/common.c +++ b/tune/common.c @@ -1598,6 +1598,58 @@ speed_mpn_sqrmod_bnm1 (struct speed_params *s) } double +speed_mpn_mulmod_bknp1 (struct speed_params *s) +{ + SPEED_ROUTINE_MPN_MULMOD_BNP1_CALL (mpn_mulmod_bknp1 (wp, s->xp, s->yp, nk, k, tp),1); +} + +double +speed_mpn_sqrmod_bknp1 (struct speed_params *s) +{ + SPEED_ROUTINE_MPN_MULMOD_BNP1_CALL (mpn_sqrmod_bknp1 (wp, s->xp, nk, k, tp),1); +} + +static void +mpn_bc_mulmod_bnp1 (mp_ptr rp, mp_srcptr ap, mp_srcptr bp, mp_size_t n, + unsigned k, mp_ptr tp) +{ + if (k > 2) + mpn_mulmod_bknp1 (rp, ap, bp, n, k, tp); + else + { + n *= k; + mpn_mul_n (tp, ap, bp, n); + mpn_sub_n (rp, tp, tp + n, n); + } +} + +static void +mpn_bc_sqrmod_bnp1 (mp_ptr rp, mp_srcptr ap, mp_size_t n, + unsigned k, mp_ptr tp) +{ + if (k > 2) + mpn_sqrmod_bknp1 (rp, ap, n, k, tp); + else + { + n *= k; + mpn_sqr (tp, ap, n); + mpn_sub_n (rp, tp, tp + n, n); + } +} + +double +speed_mpn_mulmod_bnp1 (struct speed_params *s) +{ + SPEED_ROUTINE_MPN_MULMOD_BNP1_CALL (mpn_bc_mulmod_bnp1 (wp, s->xp, s->yp, nk, k, tp),0); +} + +double +speed_mpn_sqrmod_bnp1 (struct speed_params *s) +{ + SPEED_ROUTINE_MPN_MULMOD_BNP1_CALL (mpn_bc_sqrmod_bnp1 (wp, s->xp, nk, k, tp),0); +} + +double speed_mpn_matrix22_mul (struct speed_params *s) { /* Speed params only includes 2 inputs, so we have to invent the |