[Gmp-commit] /var/hg/gmp: tune/speed.[ch], tune/common.c: Support measuring m...
mercurial at gmplib.org
mercurial at gmplib.org
Mon Jun 15 18:40:19 CEST 2026
details: /var/hg/gmp/rev/a89e395f552d
changeset: 18506:a89e395f552d
user: Marco Bodrato <bodrato at mail.dm.unipi.it>
date: Mon Jun 15 18:40:11 2026 +0200
description:
tune/speed.[ch], tune/common.c: Support measuring mpn_bsqrtinv
diffstat:
tune/common.c | 5 +++++
tune/speed.c | 1 +
tune/speed.h | 36 ++++++++++++++++++++++++++++++++++++
3 files changed, 42 insertions(+), 0 deletions(-)
diffs (79 lines):
diff -r 33dcc1ae715b -r a89e395f552d tune/common.c
--- a/tune/common.c Sat Jun 13 22:15:25 2026 +0200
+++ b/tune/common.c Mon Jun 15 18:40:11 2026 +0200
@@ -939,6 +939,11 @@
SPEED_ROUTINE_MPN_BROOT (mpn_broot_invm1);
}
double
+speed_mpn_bsqrtinv (struct speed_params *s)
+{
+ SPEED_ROUTINE_MPN_BSQRTINV (mpn_bsqrtinv, 2*s->size);
+}
+double
speed_mpn_brootinv (struct speed_params *s)
{
SPEED_ROUTINE_MPN_BROOTINV (mpn_brootinv, 5*s->size);
diff -r 33dcc1ae715b -r a89e395f552d tune/speed.c
--- a/tune/speed.c Sat Jun 13 22:15:25 2026 +0200
+++ b/tune/speed.c Mon Jun 15 18:40:11 2026 +0200
@@ -407,6 +407,7 @@
{ "mpn_broot", speed_mpn_broot, FLAG_R },
{ "mpn_broot_invm1", speed_mpn_broot_invm1, FLAG_R },
+ { "mpn_bsqrtinv", speed_mpn_bsqrtinv },
{ "mpn_brootinv", speed_mpn_brootinv, FLAG_R },
{ "mpn_get_str", speed_mpn_get_str, FLAG_R_OPTIONAL },
diff -r 33dcc1ae715b -r a89e395f552d tune/speed.h
--- a/tune/speed.h Sat Jun 13 22:15:25 2026 +0200
+++ b/tune/speed.h Mon Jun 15 18:40:11 2026 +0200
@@ -317,6 +317,7 @@
double speed_mpn_mu_bdiv_qr (struct speed_params *);
double speed_mpn_broot (struct speed_params *);
double speed_mpn_broot_invm1 (struct speed_params *);
+double speed_mpn_bsqrtinv (struct speed_params *);
double speed_mpn_brootinv (struct speed_params *);
double speed_mpn_invert (struct speed_params *);
double speed_mpn_invertappr (struct speed_params *);
@@ -2252,6 +2253,41 @@
((*function) (wp, s->xp, s->size, s->r)); \
}
+#define SPEED_ROUTINE_MPN_BSQRTINV(function, itch) \
+ { \
+ mp_ptr rp, yp, tp; \
+ unsigned i; \
+ double t; \
+ mp_bitcnt_t bnb; \
+ TMP_DECL; \
+ \
+ SPEED_RESTRICT_COND (s->size >= 1); \
+ bnb = (s->size * GMP_LIMB_BITS + 1)/ 2; /* Comparable with sqrt */ \
+ \
+ TMP_MARK; \
+ SPEED_TMP_ALLOC_LIMBS (yp, s->size, s->align_yp); \
+ SPEED_TMP_ALLOC_LIMBS (rp, (s->size + 3) >> 1, s->align_wp); \
+ SPEED_TMP_ALLOC_LIMBS (tp, (itch), s->align_xp); \
+ /* Operand must be a square mod 8 */ \
+ MPN_COPY (yp, s->yp, s->size); \
+ yp[0] |= 7; yp[0] ^= 6; \
+ \
+ speed_operand_src (s, yp, (s->size + 1) >> 1); \
+ speed_operand_dst (s, rp, (s->size + 3) >> 1); \
+ speed_operand_src (s, tp, (itch)); \
+ speed_cache_fill (s); \
+ \
+ speed_starttime (); \
+ i = s->reps; \
+ do \
+ mpn_bsqrtinv (rp, yp, bnb, tp); \
+ while (--i != 0); \
+ t = speed_endtime (); \
+ \
+ TMP_FREE; \
+ return t; \
+ }
+
#define SPEED_ROUTINE_MPN_BROOTINV(function, itch) \
{ \
mp_ptr wp, tp; \
More information about the gmp-commit
mailing list