diff options
author | Niels M?ller <nisse@lysator.liu.se> | 2012-10-31 12:00:39 +0100 |
---|---|---|
committer | Niels M?ller <nisse@lysator.liu.se> | 2012-10-31 12:00:39 +0100 |
commit | 79c456866db00da0f0137959ef8d34e4e45ae568 (patch) | |
tree | 1ec4d170b0c779fa30d59111c967cbae826de0b0 /tune | |
parent | a43c022f9cb047846628aaa70c5bd0993f0972fb (diff) | |
download | gmp-79c456866db00da0f0137959ef8d34e4e45ae568.tar.gz |
Benchmarking of broot functions.
Diffstat (limited to 'tune')
-rw-r--r-- | tune/common.c | 16 | ||||
-rw-r--r-- | tune/speed.c | 4 | ||||
-rw-r--r-- | tune/speed.h | 39 |
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; \ |