diff options
author | Janis Johnson <janis187@us.ibm.com> | 2007-01-29 23:01:35 +0000 |
---|---|---|
committer | Janis Johnson <janis@gcc.gnu.org> | 2007-01-29 23:01:35 +0000 |
commit | d9a66f98c1cd94c9cba4ba54bf07e39df92614fb (patch) | |
tree | 674d66090dc46dc021568756756f9d8190db5663 /gcc/config/dfp-bit.h | |
parent | 5b18f33782b9b7989dd35f793d68d660575e17e0 (diff) | |
download | gcc-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.h | 22 |
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. */ |