aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/dfp-bit.h
diff options
context:
space:
mode:
authorJanis Johnson <janis187@us.ibm.com>2007-01-29 23:01:35 +0000
committerJanis Johnson <janis@gcc.gnu.org>2007-01-29 23:01:35 +0000
commitd9a66f98c1cd94c9cba4ba54bf07e39df92614fb (patch)
tree674d66090dc46dc021568756756f9d8190db5663 /gcc/config/dfp-bit.h
parent5b18f33782b9b7989dd35f793d68d660575e17e0 (diff)
downloadgcc-d9a66f98c1cd94c9cba4ba54bf07e39df92614fb.zip
gcc-d9a66f98c1cd94c9cba4ba54bf07e39df92614fb.tar.gz
gcc-d9a66f98c1cd94c9cba4ba54bf07e39df92614fb.tar.bz2
decExcept.c: New.
libdecnumber/ * decExcept.c: New. * decExcept.h: New. libgcc/ * Makefile.in (dec-filenames): Add decExcept. gcc/ * config/dfp-bit.c: Add parameterized support for fp exceptions. * config/dfp-bit.h: Ditto. gcc/testsuite/ * gcc.dg/dfp/dfp-except.h: New file. * gcc.dg/dfp/fe-check.h: New file. * gcc.dg/dfp/fe-binop.c: New test. * gcc.dg/dfp/fe-convert-1.c: New test. * gcc.dg/dfp/fe-convert-2.c: New test. * gcc.dg/dfp/fe-convert-3.c: New test. From-SVN: r121317
Diffstat (limited to 'gcc/config/dfp-bit.h')
-rw-r--r--gcc/config/dfp-bit.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/gcc/config/dfp-bit.h b/gcc/config/dfp-bit.h
index e68f7df..1bbe156 100644
--- a/gcc/config/dfp-bit.h
+++ b/gcc/config/dfp-bit.h
@@ -32,6 +32,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include <fenv.h>
#include <decRound.h>
+#include <decExcept.h>
#include "tconfig.h"
#include "coretypes.h"
#include "tm.h"
@@ -120,6 +121,27 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#define DFP_INIT_ROUNDMODE(A) A = DEC_ROUND_HALF_EVEN
#endif
+#ifdef DFP_EXCEPTIONS_ENABLED
+/* Return IEEE exception flags based on decNumber status flags. */
+#define DFP_IEEE_FLAGS(DEC_FLAGS) __extension__ \
+({int _fe_flags = 0; \
+ if ((dec_flags & DEC_IEEE_854_Division_by_zero) != 0) \
+ _fe_flags |= FE_DIVBYZERO; \
+ if ((dec_flags & DEC_IEEE_854_Inexact) != 0) \
+ _fe_flags |= FE_INEXACT; \
+ if ((dec_flags & DEC_IEEE_854_Invalid_operation) != 0) \
+ _fe_flags |= FE_INVALID; \
+ if ((dec_flags & DEC_IEEE_854_Overflow) != 0) \
+ _fe_flags |= FE_OVERFLOW; \
+ if ((dec_flags & DEC_IEEE_854_Underflow) != 0) \
+ _fe_flags |= FE_UNDERFLOW; \
+ _fe_flags; })
+#else
+#define DFP_EXCEPTIONS_ENABLED 0
+#define DFP_IEEE_FLAGS(A) 0
+#define DFP_HANDLE_EXCEPTIONS(A) do {} while (0)
+#endif
+
/* Conversions between different decimal float types use WIDTH_TO to
determine additional macros to define. */