summaryrefslogtreecommitdiff
path: root/tune/common.c
diff options
context:
space:
mode:
authorMarco Bodrato <bodrato@mail.dm.unipi.it>2022-02-15 09:04:59 +0100
committerMarco Bodrato <bodrato@mail.dm.unipi.it>2022-02-15 09:04:59 +0100
commite9b82efc35aa13d4aa3cfa7b0d2e3f919d17b290 (patch)
tree785338f940314586a6ab7a7a2b6e8368caa64484 /tune/common.c
parent7ec32571f3a3dbeafa591d9e558b62fcd01ee3ff (diff)
downloadgmp-e9b82efc35aa13d4aa3cfa7b0d2e3f919d17b290.tar.gz
tune/: tune/speed support for mpn_{mul,sqr}mod_bknp1
Diffstat (limited to 'tune/common.c')
-rw-r--r--tune/common.c52
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