summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--soft-fp/op-common.h14
2 files changed, 16 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index af405a0481..0ef8a61b65 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-06 Joseph Myers <joseph@codesourcery.com>
+
+ * soft-fp/op-common.h (FP_EXTEND): Rename to _FP_EXTEND_CNAN with
+ extra argument CHECK_NAN. Redefine as wrapper around
+ _FP_EXTEND_CNAN.
+
2015-02-06 Carlos O'Donell <carlos@systemhalted.org>
* version.h (RELEASE): Set to "stable".
diff --git a/soft-fp/op-common.h b/soft-fp/op-common.h
index 6b8b52f7df..98cc721355 100644
--- a/soft-fp/op-common.h
+++ b/soft-fp/op-common.h
@@ -1825,8 +1825,10 @@
/* Extend from a narrower floating-point format to a wider one. Input
- and output are raw. */
-#define FP_EXTEND(dfs, sfs, dwc, swc, D, S) \
+ and output are raw. If CHECK_NAN, then signaling NaNs are
+ converted to quiet with the "invalid" exception raised; otherwise
+ signaling NaNs remain signaling with no exception. */
+#define _FP_EXTEND_CNAN(dfs, sfs, dwc, swc, D, S, check_nan) \
do \
{ \
if (_FP_FRACBITS_##dfs < _FP_FRACBITS_##sfs \
@@ -1876,18 +1878,22 @@
D##_e = _FP_EXPMAX_##dfs; \
if (!_FP_FRAC_ZEROP_##swc (S)) \
{ \
- if (_FP_FRAC_SNANP (sfs, S)) \
+ if (check_nan && _FP_FRAC_SNANP (sfs, S)) \
FP_SET_EXCEPTION (FP_EX_INVALID \
| FP_EX_INVALID_SNAN); \
_FP_FRAC_SLL_##dwc (D, (_FP_FRACBITS_##dfs \
- _FP_FRACBITS_##sfs)); \
- _FP_SETQNAN (dfs, dwc, D); \
+ if (check_nan) \
+ _FP_SETQNAN (dfs, dwc, D); \
} \
} \
} \
} \
while (0)
+#define FP_EXTEND(dfs, sfs, dwc, swc, D, S) \
+ _FP_EXTEND_CNAN (dfs, sfs, dwc, swc, D, S, 1)
+
/* Truncate from a wider floating-point format to a narrower one.
Input and output are semi-raw. */
#define FP_TRUNC(dfs, sfs, dwc, swc, D, S) \