1 //===-- multc3_test.c - Test __multc3 -------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file tests __multc3 for the compiler_rt library.
12 //===----------------------------------------------------------------------===//
16 #if _ARCH_PPC || __aarch64__
22 // Returns: the product of a + ib and c + id
24 COMPILER_RT_ABI long double _Complex
25 __multc3(long double __a, long double __b, long double __c, long double __d);
27 enum {zero, non_zero, inf, NaN, non_zero_nan};
30 classify(long double _Complex x)
34 if (isinf(creall(x)) || isinf(cimagl(x)))
36 if (isnan(creall(x)) && isnan(cimagl(x)))
53 int test__multc3(long double a, long double b, long double c, long double d)
55 long double _Complex r = __multc3(a, b, c, d);
56 // printf("test__multc3(%Lf, %Lf, %Lf, %Lf) = %Lf + I%Lf\n",
57 // a, b, c, d, creall(r), cimagl(r));
58 long double _Complex dividend;
59 long double _Complex divisor;
61 __real__ dividend = a;
62 __imag__ dividend = b;
66 switch (classify(dividend))
69 switch (classify(divisor))
72 if (classify(r) != zero)
76 if (classify(r) != zero)
80 if (classify(r) != NaN)
84 if (classify(r) != NaN)
88 if (classify(r) != NaN)
94 switch (classify(divisor))
97 if (classify(r) != zero)
101 if (classify(r) != non_zero)
103 if (r != a * c - b * d + _Complex_I*(a * d + b * c))
107 if (classify(r) != inf)
111 if (classify(r) != NaN)
115 if (classify(r) != NaN)
121 switch (classify(divisor))
124 if (classify(r) != NaN)
128 if (classify(r) != inf)
132 if (classify(r) != inf)
136 if (classify(r) != NaN)
140 if (classify(r) != inf)
146 switch (classify(divisor))
149 if (classify(r) != NaN)
153 if (classify(r) != NaN)
157 if (classify(r) != NaN)
161 if (classify(r) != NaN)
165 if (classify(r) != NaN)
171 switch (classify(divisor))
174 if (classify(r) != NaN)
178 if (classify(r) != NaN)
182 if (classify(r) != inf)
186 if (classify(r) != NaN)
190 if (classify(r) != NaN)
235 {-INFINITY, -INFINITY},
244 {INFINITY, -INFINITY},
343 {-INFINITY, INFINITY},
360 #if _ARCH_PPC || __aarch64__
361 const unsigned N = sizeof(x) / sizeof(x[0]);
363 for (i = 0; i < N; ++i)
365 for (j = 0; j < N; ++j)
367 if (test__multc3(x[i][0], x[i][1], x[j][0], x[j][1]))