diff options
author | Joseph Myers <joseph@codesourcery.com> | 2013-10-12 12:18:55 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2013-10-12 12:18:55 +0000 |
commit | 8399acaf7c5cb2252117ad1d65e468f688b84fc0 (patch) | |
tree | 492adfe232efb5737972eb3c65f8f547b0a3072a /soft-fp | |
parent | 99fd9f47effcd18489528e895c08b58ed24d6505 (diff) | |
download | glibc-8399acaf7c5cb2252117ad1d65e468f688b84fc0.zip glibc-8399acaf7c5cb2252117ad1d65e468f688b84fc0.tar.gz glibc-8399acaf7c5cb2252117ad1d65e468f688b84fc0.tar.bz2 |
soft-fp: fix _FP_DIV_MEAT_* returning results with wrong exponent (bug 16032).
Diffstat (limited to 'soft-fp')
-rw-r--r-- | soft-fp/op-2.h | 6 | ||||
-rw-r--r-- | soft-fp/op-4.h | 2 |
2 files changed, 4 insertions, 4 deletions
diff --git a/soft-fp/op-2.h b/soft-fp/op-2.h index 2008822..2892d3b 100644 --- a/soft-fp/op-2.h +++ b/soft-fp/op-2.h @@ -469,7 +469,7 @@ #define _FP_DIV_MEAT_2_udiv(fs, R, X, Y) \ do { \ _FP_W_TYPE _n_f2, _n_f1, _n_f0, _r_f1, _r_f0, _m_f1, _m_f0; \ - if (_FP_FRAC_GT_2(X, Y)) \ + if (_FP_FRAC_GE_2(X, Y)) \ { \ _n_f2 = X##_f1 >> 1; \ _n_f1 = X##_f1 << (_FP_W_TYPE_SIZE - 1) | X##_f0 >> 1; \ @@ -539,9 +539,8 @@ _FP_W_TYPE _x[4], _y[2], _z[4]; \ _y[0] = Y##_f0; _y[1] = Y##_f1; \ _x[0] = _x[3] = 0; \ - if (_FP_FRAC_GT_2(X, Y)) \ + if (_FP_FRAC_GE_2(X, Y)) \ { \ - R##_e++; \ _x[1] = (X##_f0 << (_FP_WFRACBITS_##fs-1 - _FP_W_TYPE_SIZE) | \ X##_f1 >> (_FP_W_TYPE_SIZE - \ (_FP_WFRACBITS_##fs-1 - _FP_W_TYPE_SIZE))); \ @@ -549,6 +548,7 @@ } \ else \ { \ + R##_e--; \ _x[1] = (X##_f0 << (_FP_WFRACBITS_##fs - _FP_W_TYPE_SIZE) | \ X##_f1 >> (_FP_W_TYPE_SIZE - \ (_FP_WFRACBITS_##fs - _FP_W_TYPE_SIZE))); \ diff --git a/soft-fp/op-4.h b/soft-fp/op-4.h index 7fccbd5..9086ba7 100644 --- a/soft-fp/op-4.h +++ b/soft-fp/op-4.h @@ -381,7 +381,7 @@ int _i; \ _FP_FRAC_DECL_4(_n); _FP_FRAC_DECL_4(_m); \ _FP_FRAC_SET_4(_n, _FP_ZEROFRAC_4); \ - if (_FP_FRAC_GT_4(X, Y)) \ + if (_FP_FRAC_GE_4(X, Y)) \ { \ _n_f[3] = X##_f[0] << (_FP_W_TYPE_SIZE - 1); \ _FP_FRAC_SRL_4(X, 1); \ |