1 /* Common header for complex arithmetic sign tests. */
6 extern void abort (void);
7 extern void exit (int);
12 #define CHECK_RES(VALUE, COPY, SIGN_REAL, SIGN_IMAG) \
15 || COPY (1.0, __real__ (VALUE)) != SIGN_REAL 1.0 \
16 || COPY (1.0, __imag__ (VALUE)) != SIGN_IMAG 1.0) \
20 /* This definition is intended to work with or without imaginary
21 types, as long as mixed real/complex arithmetic is handled
23 #define ENCODE(ZERO, ZEROI, SA, SB) \
25 ? SB 1 == 1 ? ZERO + ZEROI : ZERO - ZEROI \
26 : SB 1 == 1 ? -(ZERO - ZEROI) : -(ZERO + ZEROI))
28 #define CHECK_ARITH(TYPE, COPY, ZERO, ZEROI, OP, S1, S2, S3, S4, SR, SI) \
30 _Complex TYPE a1, b1, c1; \
31 volatile _Complex TYPE a2, b2, c2; \
32 a1 = ENCODE(ZERO, ZEROI, S1, S2); \
33 CHECK_RES (a1, COPY, S1, S2); \
34 b1 = ENCODE(ZERO, ZEROI, S3, S4); \
35 CHECK_RES (b1, COPY, S3, S4); \
37 CHECK_RES (c1, COPY, SR, SI); \
38 a2 = ENCODE(ZERO, ZEROI, S1, S2); \
39 CHECK_RES (a2, COPY, S1, S2); \
40 b2 = ENCODE(ZERO, ZEROI, S3, S4); \
41 CHECK_RES (b2, COPY, S3, S4); \
43 CHECK_RES (c2, COPY, SR, SI); \
46 #define CHECK_ARITH_RC(TYPE, COPY, ZERO, ZEROI, OP, S1, S3, S4, SR, SI) \
49 _Complex TYPE b1, c1; \
51 volatile _Complex TYPE b2, c2; \
53 b1 = ENCODE(ZERO, ZEROI, S3, S4); \
54 CHECK_RES (b1, COPY, S3, S4); \
56 CHECK_RES (c1, COPY, SR, SI); \
58 b2 = ENCODE(ZERO, ZEROI, S3, S4); \
59 CHECK_RES (b2, COPY, S3, S4); \
61 CHECK_RES (c2, COPY, SR, SI); \
64 #define CHECK_ARITH_CR(TYPE, COPY, ZERO, ZEROI, OP, S1, S2, S3, V3, SR, SI) \
66 _Complex TYPE a1, c1; \
68 volatile _Complex TYPE a2, c2; \
70 a1 = ENCODE(ZERO, ZEROI, S1, S2); \
71 CHECK_RES (a1, COPY, S1, S2); \
74 CHECK_RES (c1, COPY, SR, SI); \
75 a2 = ENCODE(ZERO, ZEROI, S1, S2); \
76 CHECK_RES (a2, COPY, S1, S2); \
79 CHECK_RES (c2, COPY, SR, SI); \