annotate gcc/testsuite/gcc.dg/dfp/builtin-tgmath-dfp.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* Test __builtin_tgmath: valid uses, decimal floating-point types. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 /* { dg-do run } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 /* { dg-options "" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 extern void abort (void);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 extern void exit (int);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 #define CHECK_CALL(C, E, V) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 do \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 { \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 if ((C) != (E)) \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 abort (); \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 extern __typeof (C) V; \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 } \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 while (0)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 extern float var_f;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 extern double var_d;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 extern long double var_ld;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 extern _Complex float var_cf;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 extern _Complex double var_cd;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 extern _Complex long double var_cld;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 extern _Decimal32 var_d32;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 extern _Decimal64 var_d64;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 extern _Decimal128 var_d128;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 extern int var_i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 /* Test decimal-only function, single argument. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 _Decimal32 t1d32 (_Decimal32 x) { return x + 1; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 _Decimal64 t1d64 (_Decimal64 x) { return x + 2; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 _Decimal128 t1d128 (_Decimal128 x) { return x + 3; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 #define t1v(x) __builtin_tgmath (t1d32, t1d64, t1d128, x)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 test_1 (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 _Decimal32 d32 = 32;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 _Decimal64 d64 = 64;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 _Decimal128 d128 = 128;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 int i = 256;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 CHECK_CALL (t1v (d32), 33, var_d32);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 CHECK_CALL (t1v (d64), 66, var_d64);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 CHECK_CALL (t1v (d128), 131, var_d128);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 CHECK_CALL (t1v (i), 258, var_d64);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 /* Test decimal-only function, two arguments. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 _Decimal32 t2d32 (_Decimal32 x, _Decimal32 y) { return 10 * x + y; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 _Decimal64 t2d64 (_Decimal64 x, _Decimal64 y) { return 100 * x + y;; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 _Decimal128 t2d128 (_Decimal128 x, _Decimal128 y) { return 1000 * x + y; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 #define t2v(x, y) __builtin_tgmath (t2d32, t2d64, t2d128, x, y)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 test_2 (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 _Decimal32 d32 = 1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 _Decimal64 d64 = 2;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 _Decimal128 d128 = 3;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 int i = 4;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 CHECK_CALL (t2v (d32, d32), 11, var_d32);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 CHECK_CALL (t2v (d64, d64), 202, var_d64);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 CHECK_CALL (t2v (d32, d64), 102, var_d64);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 CHECK_CALL (t2v (d128, d64), 3002, var_d128);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 CHECK_CALL (t2v (d128, i), 3004, var_d128);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 CHECK_CALL (t2v (i, i), 404, var_d64);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 CHECK_CALL (t2v (i, d32), 401, var_d64);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 /* Test real-only function, single argument. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 float t3f (float x) { return x + 1; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 double t3d (double x) { return x + 2; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 long double t3l (long double x) { return x + 3; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 _Decimal32 t3d32 (_Decimal32 x) { return x + 4; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 _Decimal64 t3d64 (_Decimal64 x) { return x + 5; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 _Decimal128 t3d128 (_Decimal128 x) { return x + 6; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 #define t3v(x) __builtin_tgmath (t3f, t3d, t3l, t3d32, t3d64, t3d128, x)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 test_3 (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 float f = 1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 double d = 2;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 long double ld = 3;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 int i = 4;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 _Decimal32 d32 = 5;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 _Decimal64 d64 = 6;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 _Decimal128 d128 = 7;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 CHECK_CALL (t3v (f), 2, var_f);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 CHECK_CALL (t3v (d), 4, var_d);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 CHECK_CALL (t3v (ld), 6, var_ld);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 CHECK_CALL (t3v (i), 6, var_d);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 CHECK_CALL (t3v (d32), 9, var_d32);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 CHECK_CALL (t3v (d64), 11, var_d64);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 CHECK_CALL (t3v (d128), 13, var_d128);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 /* Test real-and-complex function, single argument. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 float t4f (float x) { return x + 1; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 double t4d (double x) { return x + 2; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 long double t4l (long double x) { return x + 3; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108 _Complex float t4cf (_Complex float x) { return x + 4; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109 _Complex double t4cd (_Complex double x) { return x + 5; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110 _Complex long double t4cl (_Complex long double x) { return x + 6; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 _Decimal32 t4d32 (_Decimal32 x) { return x + 7; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112 _Decimal64 t4d64 (_Decimal64 x) { return x + 8; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113 _Decimal128 t4d128 (_Decimal128 x) { return x + 9; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 #define t4v(x) __builtin_tgmath (t4f, t4d, t4l, t4cf, t4cd, t4cl, t4d32, t4d64, t4d128, x)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
118 test_4 (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
119 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
120 float f = 1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
121 double d = 2;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
122 long double ld = 3;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
123 int i = 4;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
124 _Complex float cf = 5;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
125 _Complex double cd = 6;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
126 _Complex long double cld = 7;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
127 _Complex int ci = 8;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
128 _Decimal32 d32 = 9;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
129 _Decimal64 d64 = 10;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
130 _Decimal128 d128 = 11;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
131 CHECK_CALL (t4v (f), 2, var_f);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
132 CHECK_CALL (t4v (d), 4, var_d);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
133 CHECK_CALL (t4v (ld), 6, var_ld);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
134 CHECK_CALL (t4v (i), 6, var_d);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
135 CHECK_CALL (t4v (cf), 9, var_cf);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
136 CHECK_CALL (t4v (cd), 11, var_cd);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
137 CHECK_CALL (t4v (cld), 13, var_cld);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
138 CHECK_CALL (t4v (ci), 13, var_cd);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
139 CHECK_CALL (t4v (d32), 16, var_d32);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
140 CHECK_CALL (t4v (d64), 18, var_d64);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
141 CHECK_CALL (t4v (d128), 20, var_d128);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
142 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
143
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
144 /* Test real-and-complex function, real return type, single argument. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
145
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
146 float t5f (float x) { return x + 1; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
147 double t5d (double x) { return x + 2; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
148 long double t5l (long double x) { return x + 3; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
149 float t5cf (_Complex float x) { return __real__ x + 4; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
150 double t5cd (_Complex double x) { return __real__ x + 5; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
151 long double t5cl (_Complex long double x) { return __real__ x + 6; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
152 _Decimal32 t5d32 (_Decimal32 x) { return x + 7; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
153 _Decimal64 t5d64 (_Decimal64 x) { return x + 8; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
154 _Decimal128 t5d128 (_Decimal128 x) { return x + 9; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
155
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
156 #define t5v(x) __builtin_tgmath (t5f, t5d, t5l, t5cf, t5cd, t5cl, t5d32, t5d64, t5d128, x)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
157
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
158 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
159 test_5 (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
160 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
161 float f = 1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
162 double d = 2;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
163 long double ld = 3;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
164 int i = 4;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
165 _Complex float cf = 5;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
166 _Complex double cd = 6;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
167 _Complex long double cld = 7;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
168 _Complex int ci = 8;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
169 _Decimal32 d32 = 9;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
170 _Decimal64 d64 = 10;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
171 _Decimal128 d128 = 11;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
172 CHECK_CALL (t5v (f), 2, var_f);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
173 CHECK_CALL (t5v (d), 4, var_d);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
174 CHECK_CALL (t5v (ld), 6, var_ld);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
175 CHECK_CALL (t5v (i), 6, var_d);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
176 CHECK_CALL (t5v (cf), 9, var_f);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
177 CHECK_CALL (t5v (cd), 11, var_d);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
178 CHECK_CALL (t5v (cld), 13, var_ld);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
179 CHECK_CALL (t5v (ci), 13, var_d);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
180 CHECK_CALL (t5v (d32), 16, var_d32);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
181 CHECK_CALL (t5v (d64), 18, var_d64);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
182 CHECK_CALL (t5v (d128), 20, var_d128);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
183 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
184
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
185 /* Test real-and-complex function, two arguments. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
186
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
187 float t6f (float x, float y) { return x * 10 + y; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
188 double t6d (double x, double y) { return x * 100 + y; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
189 long double t6l (long double x, long double y) { return x * 1000 + y; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
190 _Complex float t6cf (_Complex float x, _Complex float y) { return x * 10000 + y; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
191 _Complex double t6cd (_Complex double x, _Complex double y) { return x * 100000 + y; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
192 _Complex long double t6cl (_Complex long double x, _Complex long double y) { return x * 1000000 + y; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
193 _Decimal32 t6d32 (_Decimal32 x, _Decimal32 y) { return x * 50 + y; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
194 _Decimal64 t6d64 (_Decimal64 x, _Decimal64 y) { return x * 500 + y; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
195 _Decimal128 t6d128 (_Decimal128 x, _Decimal128 y) { return x * 5000 + y; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
196
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
197 #define t6v(x, y) __builtin_tgmath (t6f, t6d, t6l, t6cf, t6cd, t6cl, t6d32, t6d64, t6d128, x, y)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
198
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
199 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
200 test_6 (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
201 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
202 float f = 1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
203 double d = 2;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
204 long double ld = 3;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
205 int i = 4;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
206 _Complex float cf = 5;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
207 _Complex double cd = 6;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
208 _Complex long double cld = 7;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
209 _Complex int ci = 8;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
210 _Decimal32 d32 = 9;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
211 _Decimal64 d64 = 10;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
212 _Decimal128 d128 = 11;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
213 CHECK_CALL (t6v (f, f), 11, var_f);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
214 CHECK_CALL (t6v (d, f), 201, var_d);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
215 CHECK_CALL (t6v (f, d), 102, var_d);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
216 CHECK_CALL (t6v (f, i), 104, var_d);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
217 CHECK_CALL (t6v (ld, f), 3001, var_ld);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
218 CHECK_CALL (t6v (i, ld), 4003, var_ld);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
219 CHECK_CALL (t6v (i, i), 404, var_d);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
220 CHECK_CALL (t6v (cf, f), 50001, var_cf);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
221 CHECK_CALL (t6v (cf, cf), 50005, var_cf);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
222 CHECK_CALL (t6v (cd, cf), 600005, var_cd);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
223 CHECK_CALL (t6v (d, cld), 2000007, var_cld);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
224 CHECK_CALL (t6v (ci, ci), 800008, var_cd);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
225 CHECK_CALL (t6v (ci, f), 800001, var_cd);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
226 CHECK_CALL (t6v (d32, d32), 459, var_d32);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
227 CHECK_CALL (t6v (d64, i), 5004, var_d64);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
228 CHECK_CALL (t6v (i, d32), 2009, var_d64);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
229 CHECK_CALL (t6v (d128, d32), 55009, var_d128);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
230 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
231
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
232 /* Test decimal-only function rounding result to narrower type. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
233
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
234 _Decimal32 t7d64 (_Decimal64 x) { return 1 + x; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
235 _Decimal32 t7d128 (_Decimal128 x) { return 2 + x; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
236
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
237 #define t7v(x) __builtin_tgmath (t7d64, t7d128, x)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
238
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
239 static void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
240 test_7 (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
241 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
242 _Decimal32 d32 = 1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
243 _Decimal64 d64 = 2;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
244 _Decimal128 d128 = 3;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
245 short s = 4;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
246 CHECK_CALL (t7v (d32), 2, var_d32);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
247 CHECK_CALL (t7v (d64), 3, var_d32);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
248 CHECK_CALL (t7v (d128), 5, var_d32);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
249 CHECK_CALL (t7v (s), 5, var_d32);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
250 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
251
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
252 int
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
253 main (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
254 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
255 test_1 ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
256 test_2 ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
257 test_3 ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
258 test_4 ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
259 test_5 ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
260 test_6 ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
261 test_7 ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
262 exit (0);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
263 }