[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