From 9c038331cce3d160408be46523983450a9d671b4 Mon Sep 17 00:00:00 2001 From: Marco Bodrato Date: Wed, 9 May 2012 16:18:18 +0200 Subject: mpz/bin_uiui.c: reinserted one of the shifts. --- mpz/bin_uiui.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'mpz') diff --git a/mpz/bin_uiui.c b/mpz/bin_uiui.c index be465df67..12a1a0345 100644 --- a/mpz/bin_uiui.c +++ b/mpz/bin_uiui.c @@ -83,10 +83,8 @@ mul1 (mp_limb_t m) static mp_limb_t mul2 (mp_limb_t m) { - /* THINK: (m + 0) * (m + 1) >> 1 does overflow if (m + 0) * (m + 1) - does. The shift does not give any advantage. We should shift - _before_ multiplying: (m | 1) * ((m + 1) >> 1) ... */ - mp_limb_t m01 = (m + 0) * (m + 1); + /* We need to shift before multiplying, to avoid an overflow. */ + mp_limb_t m01 = (m | 1) * ((m + 1) >> 1); return m01; } @@ -152,7 +150,7 @@ static const mulfunc_t mulfunc[] = {0,mul1,mul2,mul3,mul4,mul5,mul6,mul7,mul8}; #define M (numberof(mulfunc)-1) /* Number of factors-of-2 removed by the corresponding mulN functon. */ -static const unsigned char tcnttab[] = {0,0,0,1,2,2,4,4,6}; +static const unsigned char tcnttab[] = {0,0,1,1,2,2,4,4,6}; #if 1 /* This variant is inaccurate but share the code with other functions. */ -- cgit v1.2.1