]>
Commit | Line | Data |
---|---|---|
2ca862e9 JM |
1 | /* Test complex arithmetic with signed zeros. Mixed real/complex |
2 | subtraction. */ | |
3 | /* { dg-do run } */ | |
1ff6b2c8 | 4 | /* { dg-options "-std=gnu99" { target c } } */ |
a2d5b8c9 | 5 | /* { dg-skip-if "ptx can elide zero additions" { "nvptx-*-*" } { "-O0" } { "" } } */ |
2ca862e9 JM |
6 | |
7 | #include "complex-sign.h" | |
8 | ||
9 | #define CHECK_SUB(TYPE, COPY, ZERO, ZEROI) \ | |
10 | do { \ | |
11 | CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, -, +, +, +, +, -); \ | |
12 | CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, -, +, +, -, +, +); \ | |
13 | CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, -, +, -, +, +, -); \ | |
14 | CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, -, +, -, -, +, +); \ | |
15 | CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, -, -, +, +, -, -); \ | |
16 | CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, -, -, +, -, -, +); \ | |
17 | CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, -, -, -, +, +, -); \ | |
18 | CHECK_ARITH_RC (TYPE, COPY, ZERO, ZEROI, -, -, -, -, +, +); \ | |
19 | CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, -, +, +, +, ZERO, +, +); \ | |
20 | CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, -, +, +, -, ZERO, +, +); \ | |
21 | CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, -, +, -, +, ZERO, +, -); \ | |
22 | CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, -, +, -, -, ZERO, +, -); \ | |
23 | CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, -, -, +, +, ZERO, -, +); \ | |
24 | CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, -, -, +, -, ZERO, +, +); \ | |
25 | CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, -, -, -, +, ZERO, -, -); \ | |
26 | CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, -, -, -, -, ZERO, +, -); \ | |
27 | } while (0) | |
28 | ||
29 | void | |
30 | check_sub_float (void) | |
31 | { | |
32 | CHECK_SUB (float, __builtin_copysignf, 0.0f, 0.0if); | |
33 | } | |
34 | ||
35 | void | |
36 | check_sub_double (void) | |
37 | { | |
38 | CHECK_SUB (double, __builtin_copysign, 0.0, 0.0i); | |
39 | } | |
40 | ||
41 | void | |
42 | check_sub_long_double (void) | |
43 | { | |
44 | CHECK_SUB (long double, __builtin_copysignl, 0.0l, 0.0il); | |
45 | } | |
46 | ||
47 | int | |
48 | main (void) | |
49 | { | |
50 | check_sub_float (); | |
51 | check_sub_double (); | |
52 | check_sub_long_double (); | |
53 | exit (0); | |
54 | } |