summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/README.dev5
-rw-r--r--src/add1.c2
-rw-r--r--src/add1sp.c4
-rw-r--r--src/cmp2.c2
-rw-r--r--src/mpfr-impl.h23
-rw-r--r--src/mul.c2
-rw-r--r--src/mul_2ui.c2
-rw-r--r--src/mul_ui.c2
-rw-r--r--src/rint.c2
-rw-r--r--src/round_raw_generic.c2
-rw-r--r--src/set.c2
-rw-r--r--src/set_prec.c2
-rw-r--r--src/sub1.c2
-rw-r--r--src/sub1sp.c12
14 files changed, 33 insertions, 31 deletions
diff --git a/doc/README.dev b/doc/README.dev
index cf575867e..458017eea 100644
--- a/doc/README.dev
+++ b/doc/README.dev
@@ -302,6 +302,11 @@ To make a release (for the MPFR team):
(GMP_CHECK_RANDOMIZE, MPFR_CHECK_LIBC_PRINTF, MPFR_CHECK_LARGEMEM,
MPFR_SUSPICIOUS_OVERFLOW).
+ Check there is no branch misprediction due to wrong MPFR_LIKELY or
+ MPFR_UNLIKELY statements. For that test, configure with
+ --enable-debug-prediction, run "timings-mpfr 100", and check that
+ the output contains no WARNING.
+
7) For the release itself (not the release candidates), if no problems
have been found, create a tag with:
svn cp .../mpfr/branches/x.y .../mpfr/tags/x.y.z
diff --git a/src/add1.c b/src/add1.c
index 2c46eaaf3..abb9b40d3 100644
--- a/src/add1.c
+++ b/src/add1.c
@@ -62,7 +62,7 @@ mpfr_add1 (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode)
if (ap == cp)
{ cp = bp; }
}
- else if (MPFR_UNLIKELY(ap == cp))
+ else if (ap == cp)
{
cp = MPFR_TMP_LIMBS_ALLOC (cn);
MPN_COPY(cp, ap, cn);
diff --git a/src/add1sp.c b/src/add1sp.c
index abf0a188e..ac1d8b3f1 100644
--- a/src/add1sp.c
+++ b/src/add1sp.c
@@ -335,8 +335,8 @@ mpfr_add1sp (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode)
if (MPFR_LIKELY(rnd_mode == MPFR_RNDN))
{
inexact = - (bcp1 != 0);
- if (MPFR_LIKELY(bcp == 0))
- { goto set_exponent; }
+ if (bcp == 0)
+ goto set_exponent;
else if (MPFR_UNLIKELY(bcp1==0) && (ap[0]&(MPFR_LIMB_ONE<<sh))==0)
{ inexact = -1; goto set_exponent; }
else
diff --git a/src/cmp2.c b/src/cmp2.c
index ee2a8d138..c4eee67f7 100644
--- a/src/cmp2.c
+++ b/src/cmp2.c
@@ -200,7 +200,7 @@ mpfr_cmp2 (mpfr_srcptr b, mpfr_srcptr c, mpfr_prec_t *cancel)
}
/* now result is res + (low(b) < low(c)) */
- while (MPFR_UNLIKELY (bn >= 0 && (cn >= 0 || lastc != 0)))
+ while (bn >= 0 && (cn >= 0 || lastc != 0))
{
if (diff_exp >= GMP_NUMB_BITS)
diff_exp -= GMP_NUMB_BITS;
diff --git a/src/mpfr-impl.h b/src/mpfr-impl.h
index a85891c41..1e9eeaa1b 100644
--- a/src/mpfr-impl.h
+++ b/src/mpfr-impl.h
@@ -1485,9 +1485,8 @@ typedef struct {
_mask = MPFR_LIMB_ONE << (_sh - 1); \
_rb = _sp[0] & _mask; \
_sb = _sp[0] & (_mask - 1); \
- if (MPFR_UNLIKELY (_sb == 0) && \
- ((rnd) == MPFR_RNDN || _rb == 0)) \
- { /* TODO: Improve it */ \
+ if ((rnd) == MPFR_RNDN || _rb == 0) \
+ { \
mp_limb_t *_tmp; \
mp_size_t _n; \
for (_tmp = _sp, _n = _srcs - _dests ; \
@@ -1502,8 +1501,7 @@ typedef struct {
/* Compute Rounding Bit and Sticky Bit - see note above */ \
_rb = _sp[-1] & MPFR_LIMB_HIGHBIT; \
_sb = _sp[-1] & (MPFR_LIMB_HIGHBIT-1); \
- if (MPFR_UNLIKELY (_sb == 0) && \
- ((rnd) == MPFR_RNDN || _rb == 0)) \
+ if ((rnd) == MPFR_RNDN || _rb == 0) \
{ \
mp_limb_t *_tmp; \
mp_size_t _n; \
@@ -1514,7 +1512,7 @@ typedef struct {
_ulp = MPFR_LIMB_ONE; \
} \
/* Rounding */ \
- if (MPFR_LIKELY (rnd == MPFR_RNDN)) \
+ if (rnd == MPFR_RNDN) \
{ \
if (_rb == 0) \
{ \
@@ -1545,8 +1543,7 @@ typedef struct {
} \
else \
{ /* Directed rounding mode */ \
- if (MPFR_LIKELY (MPFR_IS_LIKE_RNDZ (rnd, \
- MPFR_IS_NEG_SIGN (sign)))) \
+ if (MPFR_IS_LIKE_RNDZ (rnd, MPFR_IS_NEG_SIGN (sign))) \
goto trunc; \
else if (MPFR_UNLIKELY ((_sb | _rb) == 0)) \
{ \
@@ -1605,10 +1602,10 @@ typedef struct {
/* Copy the sign and the significand, and handle the exponent in exp. */
#define MPFR_SETRAW(inexact,dest,src,exp,rnd) \
- if (MPFR_UNLIKELY (dest != src)) \
+ if (dest != src) \
{ \
MPFR_SET_SIGN (dest, MPFR_SIGN (src)); \
- if (MPFR_LIKELY (MPFR_PREC (dest) == MPFR_PREC (src))) \
+ if (MPFR_PREC (dest) == MPFR_PREC (src)) \
{ \
MPN_COPY (MPFR_MANT (dest), MPFR_MANT (src), \
MPFR_LIMB_SIZE (src)); \
@@ -1914,7 +1911,7 @@ struct mpfr_group_t {
MPFR_LOG_MSG (("GROUP_CLEAR: ptr = 0x%lX, size = %lu\n", \
(unsigned long) (g).mant, \
(unsigned long) (g).alloc)); \
- if (MPFR_UNLIKELY ((g).alloc != 0)) { \
+ if ((g).alloc != 0) { \
MPFR_ASSERTD ((g).mant != (g).tab); \
(*__gmp_free_func) ((g).mant, (g).alloc); \
}} while (0)
@@ -1926,7 +1923,7 @@ struct mpfr_group_t {
if (MPFR_UNLIKELY (_prec > MPFR_PREC_MAX)) \
mpfr_abort_prec_max (); \
_size = MPFR_PREC2LIMBS (_prec); \
- if (MPFR_UNLIKELY (_size * (num) > MPFR_GROUP_STATIC_SIZE)) \
+ if (_size * (num) > MPFR_GROUP_STATIC_SIZE) \
{ \
(g).alloc = (num) * _size * sizeof (mp_limb_t); \
(g).mant = (mp_limb_t *) (*__gmp_allocate_func) ((g).alloc); \
@@ -1978,7 +1975,7 @@ struct mpfr_group_t {
mpfr_abort_prec_max (); \
_size = MPFR_PREC2LIMBS (_prec); \
(g).alloc = (num) * _size * sizeof (mp_limb_t); \
- if (MPFR_LIKELY (_oalloc == 0)) \
+ if (_oalloc == 0) \
(g).mant = (mp_limb_t *) (*__gmp_allocate_func) ((g).alloc); \
else \
(g).mant = (mp_limb_t *) \
diff --git a/src/mul.c b/src/mul.c
index fd98778be..f5ecb782c 100644
--- a/src/mul.c
+++ b/src/mul.c
@@ -318,7 +318,7 @@ mpfr_mul (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode)
cn = zn;
}
MPFR_ASSERTD (bn >= cn);
- if (MPFR_LIKELY (bn <= 2))
+ if (bn <= 2)
{
/* The 3 cases perform the same first operation. */
umul_ppmm (tmp[1], tmp[0], MPFR_MANT (b)[0], MPFR_MANT (c)[0]);
diff --git a/src/mul_2ui.c b/src/mul_2ui.c
index 8c9959abe..fbba80dfe 100644
--- a/src/mul_2ui.c
+++ b/src/mul_2ui.c
@@ -33,7 +33,7 @@ mpfr_mul_2ui (mpfr_ptr y, mpfr_srcptr x, unsigned long int n, mpfr_rnd_t rnd_mod
("y[%Pu]=%.*Rg inexact=%d",
mpfr_get_prec (y), mpfr_log_prec, y, inexact));
- inexact = MPFR_UNLIKELY(y != x) ? mpfr_set (y, x, rnd_mode) : 0;
+ inexact = (y != x) ? mpfr_set (y, x, rnd_mode) : 0;
if (MPFR_LIKELY( MPFR_IS_PURE_FP(y)) )
{
diff --git a/src/mul_ui.c b/src/mul_ui.c
index b644fd8fe..3e76140fc 100644
--- a/src/mul_ui.c
+++ b/src/mul_ui.c
@@ -61,7 +61,7 @@ mpfr_mul_ui (mpfr_ptr y, mpfr_srcptr x, unsigned long int u, mpfr_rnd_t rnd_mode
MPFR_RET (0); /* zero is exact */
}
}
- else if (MPFR_UNLIKELY (u <= 1))
+ else if (u <= 1)
{
if (u < 1)
{
diff --git a/src/rint.c b/src/rint.c
index b0045f282..ace729a85 100644
--- a/src/rint.c
+++ b/src/rint.c
@@ -213,7 +213,7 @@ mpfr_rint (mpfr_ptr r, mpfr_srcptr u, mpfr_rnd_t rnd_mode)
uj = un - ui; /* lowest limb of the integer part in u */
rj = rn - ui; /* lowest limb of the integer part in r */
- if (MPFR_LIKELY (rp != up))
+ if (rp != up)
MPN_COPY(rp + rj, up + uj, ui);
/* Ignore the lowest rj limbs, all equal to zero. */
diff --git a/src/round_raw_generic.c b/src/round_raw_generic.c
index a14b12dff..98509b5b6 100644
--- a/src/round_raw_generic.c
+++ b/src/round_raw_generic.c
@@ -123,7 +123,7 @@ mpfr_round_raw_generic(
MPFR_ASSERTD(k >= 0);
sb = xp[k] & lomask; /* First non-significant bits */
/* Rounding to nearest? */
- if (MPFR_LIKELY (rnd_mode == MPFR_RNDN || rnd_mode == MPFR_RNDNA))
+ if (rnd_mode == MPFR_RNDN || rnd_mode == MPFR_RNDNA)
{
/* Rounding to nearest */
mp_limb_t rbmask = MPFR_LIMB_ONE << (GMP_NUMB_BITS - 1 - rw);
diff --git a/src/set.c b/src/set.c
index a5fd10e1b..d4490b557 100644
--- a/src/set.c
+++ b/src/set.c
@@ -43,7 +43,7 @@ mpfr_set4 (mpfr_ptr a, mpfr_srcptr b, mpfr_rnd_t rnd_mode, int signb)
else
MPFR_RET (0);
}
- else if (MPFR_LIKELY (MPFR_PREC (b) == MPFR_PREC (a)))
+ else if (MPFR_PREC (b) == MPFR_PREC (a))
{
/* Same precision and b is not singular:
* just copy the mantissa, and set the exponent and the sign
diff --git a/src/set_prec.c b/src/set_prec.c
index 8e4ac8216..bd2864dd9 100644
--- a/src/set_prec.c
+++ b/src/set_prec.c
@@ -36,7 +36,7 @@ mpfr_set_prec (mpfr_ptr x, mpfr_prec_t p)
/* Realloc only if the new size is greater than the old */
xoldsize = MPFR_GET_ALLOC_SIZE (x);
- if (MPFR_UNLIKELY (xsize > xoldsize))
+ if (xsize > xoldsize)
{
tmp = (mpfr_limb_ptr) (*__gmp_reallocate_func)
(MPFR_GET_REAL_PTR(x), MPFR_MALLOC_SIZE(xoldsize), MPFR_MALLOC_SIZE(xsize));
diff --git a/src/sub1.c b/src/sub1.c
index 3d1570ef7..9886ccce4 100644
--- a/src/sub1.c
+++ b/src/sub1.c
@@ -336,7 +336,7 @@ mpfr_sub1 (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode)
carry = ap[0] & MPFR_LIMB_MASK (sh);
ap[0] -= carry;
- if (MPFR_LIKELY(rnd_mode == MPFR_RNDN))
+ if (rnd_mode == MPFR_RNDN)
{
if (MPFR_LIKELY(sh))
{
diff --git a/src/sub1sp.c b/src/sub1sp.c
index 4f0ad016c..9b4b0683d 100644
--- a/src/sub1sp.c
+++ b/src/sub1sp.c
@@ -159,7 +159,7 @@ mpfr_sub1sp (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode)
/* Fast cmp of |b| and |c|*/
bx = MPFR_GET_EXP (b);
cx = MPFR_GET_EXP (c);
- if (MPFR_UNLIKELY(bx == cx))
+ if (bx == cx)
{
mp_size_t k = n - 1;
/* Check mantissa since exponent are equals */
@@ -208,7 +208,7 @@ mpfr_sub1sp (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode)
d = (mpfr_uexp_t) bx - cx;
DEBUG (printf ("New with diff=%lu\n", (unsigned long) d));
- if (MPFR_UNLIKELY(d <= 1))
+ if (d <= 1)
{
if (MPFR_LIKELY(d < 1))
{
@@ -250,8 +250,8 @@ mpfr_sub1sp (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode)
k++;
len = n - k; /* Number of last limb */
MPFR_ASSERTD(k >= 0);
- if (MPFR_LIKELY(cnt))
- mpn_lshift(ap+len, ap, k, cnt); /* Normalize the High Limb*/
+ if (cnt)
+ mpn_lshift (ap + len, ap, k, cnt); /* Normalize the High Limb*/
else
{
/* Must use DECR since src and dest may overlap & dest>=src*/
@@ -530,7 +530,7 @@ mpfr_sub1sp (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode)
{
/* Try to compute them from C' rather than C (FIXME: Faster?) */
bcp = (cp[0] & (MPFR_LIMB_ONE<<(sh-1))) ;
- if (MPFR_LIKELY( cp[0] & MPFR_LIMB_MASK(sh-1) ))
+ if (cp[0] & MPFR_LIMB_MASK(sh-1))
bcp1 = 1;
else
{
@@ -538,7 +538,7 @@ mpfr_sub1sp (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode)
/* Start from bit x=p-d+sh in mantissa C
(+sh since we have already looked sh bits in C'!) */
mpfr_prec_t x = p-d+sh-1;
- if (MPFR_LIKELY(x>p))
+ if (x > p)
/* We are already looked at all the bits of c, so C'p+1 = 0*/
bcp1 = 0;
else