aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--soft-fp/op-common.h9
2 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index f95e3ed..18d1cbc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2014-10-09 Joseph Myers <joseph@codesourcery.com>
+ * soft-fp/op-common.h (_FP_TO_INT): Ensure maximum exponent is
+ treated as invalid conversion, not as normal exponent.
+
* soft-fp/op-common.h (_FP_CMP_CHECK_NAN): New macro.
(_FP_CMP): Add extra argument EX. Call _FP_CMP_CHECK_NAN.
(_FP_CMP_EQ): Likewise.
diff --git a/soft-fp/op-common.h b/soft-fp/op-common.h
index e62558e..e0a108a 100644
--- a/soft-fp/op-common.h
+++ b/soft-fp/op-common.h
@@ -1368,7 +1368,9 @@
else \
FP_SET_EXCEPTION (FP_EX_INEXACT); \
} \
- else if (X##_e >= _FP_EXPBIAS_##fs + rsize - (rsigned > 0 || X##_s) \
+ else if (X##_e >= (_FP_EXPMAX_##fs < _FP_EXPBIAS_##fs + rsize \
+ ? _FP_EXPMAX_##fs \
+ : _FP_EXPBIAS_##fs + rsize - (rsigned > 0 || X##_s)) \
|| (!rsigned && X##_s)) \
{ \
/* Overflow or converting to the most negative integer. */ \
@@ -1385,7 +1387,10 @@
r = ~r; \
} \
\
- if (rsigned && X##_s && X##_e == _FP_EXPBIAS_##fs + rsize - 1) \
+ if (_FP_EXPBIAS_##fs + rsize - 1 < _FP_EXPMAX_##fs \
+ && rsigned \
+ && X##_s \
+ && X##_e == _FP_EXPBIAS_##fs + rsize - 1) \
{ \
/* Possibly converting to most negative integer; check the \
mantissa. */ \