]> Pileus Git - ~andy/linux/blobdiff - include/math-emu/op-common.h
Merge tag 'nfs-for-3.14-2' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
[~andy/linux] / include / math-emu / op-common.h
index 9696a5e2c437f3e33dc8f4d2bd50f8ff8bff6a53..6bdf8c61d221f7267914974958f96f2cc2156460 100644 (file)
@@ -685,7 +685,7 @@ do {                                                                        \
            else                                                                \
              {                                                                 \
                r = 0;                                                          \
-               if (X##_s)                                                      \
+               if (!X##_s)                                                     \
                  r = ~r;                                                       \
              }                                                                 \
            FP_SET_EXCEPTION(FP_EX_INVALID);                                    \
@@ -743,12 +743,17 @@ do {                                                                      \
          }                                                                     \
        else                                                                    \
          {                                                                     \
+           int _lz0, _lz1;                                                     \
            if (X##_e <= -_FP_WORKBITS - 1)                                     \
              _FP_FRAC_SET_##wc(X, _FP_MINFRAC_##wc);                           \
            else                                                                \
              _FP_FRAC_SRS_##wc(X, _FP_FRACBITS_##fs - 1 - X##_e,               \
                                _FP_WFRACBITS_##fs);                            \
+           _FP_FRAC_CLZ_##wc(_lz0, X);                                         \
            _FP_ROUND(wc, X);                                                   \
+           _FP_FRAC_CLZ_##wc(_lz1, X);                                         \
+           if (_lz1 < _lz0)                                                    \
+             X##_e++; /* For overflow detection.  */                           \
            _FP_FRAC_SRL_##wc(X, _FP_WORKBITS);                                 \
            _FP_FRAC_ASSEMBLE_##wc(r, X, rsize);                                \
          }                                                                     \
@@ -762,7 +767,7 @@ do {                                                                        \
            if (!rsigned)                                                       \
              {                                                                 \
                r = 0;                                                          \
-               if (X##_s)                                                      \
+               if (!X##_s)                                                     \
                  r = ~r;                                                       \
              }                                                                 \
            else if (rsigned != 2)                                              \