diff options
author | Kevin Ryde <user42@zip.com.au> | 2001-07-10 01:26:10 +0200 |
---|---|---|
committer | Kevin Ryde <user42@zip.com.au> | 2001-07-10 01:26:10 +0200 |
commit | 4b434fafee05e595204836dc792805e9274694d7 (patch) | |
tree | b91e13ba787ca7a5f08cebf9a4302f0586a4b854 | |
parent | 8b71ac5fdfccd95eb29c188948e2478727b371c8 (diff) | |
download | gmp-4b434fafee05e595204836dc792805e9274694d7.tar.gz |
* errno.c, gmp-impl.h (__gmp_exception, __gmp_divide_by_zero,
__gmp_sqrt_of_negative): New functions.
-rw-r--r-- | errno.c | 35 |
1 files changed, 33 insertions, 2 deletions
@@ -1,6 +1,6 @@ -/* gmp_errno -- The largest and most complex file in GMP. +/* gmp_errno, __gmp_exception -- exception handling and reporting. -Copyright 2000 Free Software Foundation, Inc. +Copyright 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU MP Library. @@ -24,3 +24,34 @@ MA 02111-1307, USA. */ #include "gmp-impl.h" int gmp_errno = 0; + + +/* The deliberate divide by zero triggers an exception on most systems. On + those where it doesn't, for example power and powerpc, use abort instead. + + Enhancement: Perhaps raise(SIGFPE) (or the same with kill()) would be + better than abort. Perhaps it'd be possible to get the BSD style + FPE_INTDIV_TRAP parameter in there too. */ + +void +__gmp_exception (int error_bit) +{ + gmp_errno |= error_bit; + __gmp_junk = 10 / __gmp_0; + abort (); +} + + +/* These functions minimize the amount of code required in functions raising + exceptions. Since they're "noreturn" and don't take any parameters, a + test and call might even come out as a simple conditional jump. */ +void +__gmp_sqrt_of_negative (void) +{ + __gmp_exception (GMP_ERROR_SQRT_OF_NEGATIVE); +} +void +__gmp_divide_by_zero (void) +{ + __gmp_exception (GMP_ERROR_DIVISION_BY_ZERO); +} |