summaryrefslogtreecommitdiff
path: root/src/mul_ui.c
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2018-08-31 19:22:05 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2018-08-31 19:22:05 +0000
commit6becbebf19ca4d5e5f92bcba79baedace905b976 (patch)
tree6a7f42106d1cd1315125f0811f794a8b3c1e2518 /src/mul_ui.c
parentebd52382c6dcfcbe17a13cb5c3c26199d2f8613c (diff)
downloadmpfr-6becbebf19ca4d5e5f92bcba79baedace905b976.tar.gz
[src/mul_ui.c] adapt for 16-bit limb
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@13103 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'src/mul_ui.c')
-rw-r--r--src/mul_ui.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/mul_ui.c b/src/mul_ui.c
index 55bf1af8e..00f7b9f85 100644
--- a/src/mul_ui.c
+++ b/src/mul_ui.c
@@ -75,6 +75,7 @@ mpfr_mul_ui (mpfr_ptr y, mpfr_srcptr x, unsigned long int u, mpfr_rnd_t rnd_mode
else if (MPFR_UNLIKELY (IS_POW2 (u)))
return mpfr_mul_2si (y, x, MPFR_INT_CEIL_LOG2 (u), rnd_mode);
+#ifdef MPFR_LONG_WITHIN_LIMB
yp = MPFR_MANT (y);
xn = MPFR_LIMB_SIZE (x);
@@ -114,6 +115,16 @@ mpfr_mul_ui (mpfr_ptr y, mpfr_srcptr x, unsigned long int u, mpfr_rnd_t rnd_mode
MPFR_SET_EXP (y, MPFR_GET_EXP (x) + cnt);
MPFR_SET_SAME_SIGN (y, x);
+#else
+ {
+ mpfr_t uu;
+
+ mpfr_init2 (uu, sizeof (unsigned long) * CHAR_BIT);
+ mpfr_set_ui (uu, u, MPFR_RNDZ);
+ inexact = mpfr_mul (y, x, uu, rnd_mode);
+ mpfr_clear (uu);
+ }
+#endif /* MPFR_LONG_WITHIN_LIMB */
MPFR_RET (inexact);
}