1 /* Common support for checking that appropriate floating point exceptions
2 are raised for decimal float operations. These tests are here to test
3 the software decimal float support in libgcc. */
6 #include "dfp-except.h"
8 #if defined(DBG) || defined(DBG2)
11 #define FAILURE(NUM,KIND,EXCEPT) \
12 { printf ("failed for test %d: %s %s\n", NUM, KIND, EXCEPT); failures++; }
15 #define FAILURE(N,K,E) __builtin_abort ();
18 /* This is useful when modifying the test to make sure that tests are
21 #define SUCCESS(NUM,EXCEPT) \
22 { printf ("passed for test %d: %s\n", NUM, EXCEPT); }
24 #define SUCCESS(N,E) ;
27 #define CHECKFLAG(NUM,EXCEPT,GOT,WANT) \
28 if ((WANT & EXCEPT) != (GOT & EXCEPT)) \
30 if ((WANT & EXCEPT) != 0) \
31 FAILURE (NUM, "missing", #EXCEPT) \
33 FAILURE (NUM, "unexpected", #EXCEPT) \
36 SUCCESS (NUM, #EXCEPT)
39 checkflags (int num
, int want
)
41 int got
= DFP_TEST_EXCEPT (FE_ALL_EXCEPT
);
42 CHECKFLAG (num
, FE_INVALID
, got
, want
)
43 CHECKFLAG (num
, FE_OVERFLOW
, got
, want
)
44 CHECKFLAG (num
, FE_UNDERFLOW
, got
, want
)
45 CHECKFLAG (num
, FE_DIVBYZERO
, got
, want
)
46 CHECKFLAG (num
, FE_INEXACT
, got
, want
)
49 #define BINOP(NUM,OP,VAR1,VAL1,VAR2,VAL2,VAR3,EXCEPT) \
55 DFP_CLEAR_EXCEPT (FE_ALL_EXCEPT); \
56 VAR3 = VAR1 OP VAR2; \
57 checkflags (NUM, EXCEPT); \
60 #define CONVERT(NUM,FROM,TO,VALUE,EXCEPT) \
62 convert_##NUM (void) \
65 DFP_CLEAR_EXCEPT (FE_ALL_EXCEPT); \
67 checkflags (NUM, EXCEPT); \