summaryrefslogtreecommitdiff
path: root/tune
diff options
context:
space:
mode:
authorNiels M?ller <nisse@lysator.liu.se>2012-10-31 12:00:39 +0100
committerNiels M?ller <nisse@lysator.liu.se>2012-10-31 12:00:39 +0100
commit79c456866db00da0f0137959ef8d34e4e45ae568 (patch)
tree1ec4d170b0c779fa30d59111c967cbae826de0b0 /tune
parenta43c022f9cb047846628aaa70c5bd0993f0972fb (diff)
downloadgmp-79c456866db00da0f0137959ef8d34e4e45ae568.tar.gz
Benchmarking of broot functions.
Diffstat (limited to 'tune')
-rw-r--r--tune/common.c16
-rw-r--r--tune/speed.c4
-rw-r--r--tune/speed.h39
3 files changed, 59 insertions, 0 deletions
diff --git a/tune/common.c b/tune/common.c
index 9cc3f2d1f..4ae3c4c60 100644
--- a/tune/common.c
+++ b/tune/common.c
@@ -867,6 +867,22 @@ speed_mpn_mu_bdiv_qr (struct speed_params *s)
}
double
+speed_mpn_broot (struct speed_params *s)
+{
+ SPEED_ROUTINE_MPN_BROOT (mpn_broot);
+}
+double
+speed_mpn_broot_invm1 (struct speed_params *s)
+{
+ SPEED_ROUTINE_MPN_BROOT (mpn_broot_invm1);
+}
+double
+speed_mpn_brootinv (struct speed_params *s)
+{
+ SPEED_ROUTINE_MPN_BROOTINV (mpn_brootinv, 5*s->size);
+}
+
+double
speed_mpn_binvert (struct speed_params *s)
{
SPEED_ROUTINE_MPN_BINVERT (mpn_binvert, mpn_binvert_itch);
diff --git a/tune/speed.c b/tune/speed.c
index 300060455..0ccd4a818 100644
--- a/tune/speed.c
+++ b/tune/speed.c
@@ -370,6 +370,10 @@ const struct routine_t {
{ "mpn_sbpi1_bdiv_q", speed_mpn_sbpi1_bdiv_q },
{ "mpn_dcpi1_bdiv_q", speed_mpn_dcpi1_bdiv_q },
+ { "mpn_broot", speed_mpn_broot, FLAG_R },
+ { "mpn_broot_invm1", speed_mpn_broot_invm1, FLAG_R },
+ { "mpn_brootinv", speed_mpn_brootinv, FLAG_R },
+
{ "mpn_get_str", speed_mpn_get_str, FLAG_R_OPTIONAL },
{ "mpn_set_str", speed_mpn_set_str, FLAG_R_OPTIONAL },
{ "mpn_set_str_basecase", speed_mpn_bc_set_str, FLAG_R_OPTIONAL },
diff --git a/tune/speed.h b/tune/speed.h
index ddd2a6473..75b6da724 100644
--- a/tune/speed.h
+++ b/tune/speed.h
@@ -281,6 +281,9 @@ double speed_mpn_sbpi1_bdiv_q (struct speed_params *);
double speed_mpn_dcpi1_bdiv_q (struct speed_params *);
double speed_mpn_mu_bdiv_q (struct speed_params *);
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_brootinv (struct speed_params *);
double speed_mpn_invert (struct speed_params *);
double speed_mpn_invertappr (struct speed_params *);
double speed_mpn_ni_invertappr (struct speed_params *);
@@ -2076,6 +2079,42 @@ int speed_routine_count_zeros_setup (struct speed_params *, mp_ptr, int, int);
return t; \
}
+#define SPEED_ROUTINE_MPN_BROOT(function) \
+ { \
+ SPEED_RESTRICT_COND (s->r & 1); \
+ s->xp[0] |= 1; \
+ SPEED_ROUTINE_MPN_UNARY_1_CALL \
+ ((*function) (wp, s->xp, s->size, s->r)); \
+ }
+
+#define SPEED_ROUTINE_MPN_BROOTINV(function, itch) \
+ { \
+ mp_ptr wp, tp; \
+ unsigned i; \
+ double t; \
+ TMP_DECL; \
+ TMP_MARK; \
+ SPEED_RESTRICT_COND (s->size >= 1); \
+ SPEED_RESTRICT_COND (s->r & 1); \
+ wp = TMP_ALLOC_LIMBS (s->size); \
+ tp = TMP_ALLOC_LIMBS ( (itch)); \
+ s->xp[0] |= 1; \
+ \
+ speed_operand_src (s, s->xp, s->size); \
+ speed_operand_dst (s, wp, s->size); \
+ speed_cache_fill (s); \
+ \
+ speed_starttime (); \
+ i = s->reps; \
+ do \
+ (*function) (wp, s->xp, s->size * GMP_NUMB_BITS, s->r, tp); \
+ while (--i != 0); \
+ t = speed_endtime (); \
+ \
+ TMP_FREE; \
+ return t; \
+ }
+
#define SPEED_ROUTINE_MPN_INVERT(function,itchfn) \
{ \
long i; \