1 // RUN: %clang_builtins %s %librt -o %t && %run %t
2 // REQUIRES: librt_has_powisf2
10 COMPILER_RT_ABI
float __powisf2(float a
, int b
);
12 int test__powisf2(float a
, int b
, float expected
)
14 float x
= __powisf2(a
, b
);
15 int correct
= (x
== expected
) && (signbit(x
) == signbit(expected
));
17 printf("error in __powisf2(%f, %d) = %f, expected %f\n",
24 if (test__powisf2(0, 0, 1))
26 if (test__powisf2(1, 0, 1))
28 if (test__powisf2(1.5, 0, 1))
30 if (test__powisf2(2, 0, 1))
32 if (test__powisf2(INFINITY
, 0, 1))
35 if (test__powisf2(-0., 0, 1))
37 if (test__powisf2(-1, 0, 1))
39 if (test__powisf2(-1.5, 0, 1))
41 if (test__powisf2(-2, 0, 1))
43 if (test__powisf2(-INFINITY
, 0, 1))
46 if (test__powisf2(0, 1, 0))
48 if (test__powisf2(0, 2, 0))
50 if (test__powisf2(0, 3, 0))
52 if (test__powisf2(0, 4, 0))
54 if (test__powisf2(0, INT_MAX
-1, 0))
56 if (test__powisf2(0, INT_MAX
, 0))
59 if (test__powisf2(-0., 1, -0.))
61 if (test__powisf2(-0., 2, 0))
63 if (test__powisf2(-0., 3, -0.))
65 if (test__powisf2(-0., 4, 0))
67 if (test__powisf2(-0., INT_MAX
- 1, 0))
69 if (test__powisf2(-0., INT_MAX
, -0.))
72 if (test__powisf2(1, 1, 1))
74 if (test__powisf2(1, 2, 1))
76 if (test__powisf2(1, 3, 1))
78 if (test__powisf2(1, 4, 1))
80 if (test__powisf2(1, INT_MAX
- 1, 1))
82 if (test__powisf2(1, INT_MAX
, 1))
85 if (test__powisf2(INFINITY
, 1, INFINITY
))
87 if (test__powisf2(INFINITY
, 2, INFINITY
))
89 if (test__powisf2(INFINITY
, 3, INFINITY
))
91 if (test__powisf2(INFINITY
, 4, INFINITY
))
93 if (test__powisf2(INFINITY
, INT_MAX
- 1, INFINITY
))
95 if (test__powisf2(INFINITY
, INT_MAX
, INFINITY
))
98 if (test__powisf2(-INFINITY
, 1, -INFINITY
))
100 if (test__powisf2(-INFINITY
, 2, INFINITY
))
102 if (test__powisf2(-INFINITY
, 3, -INFINITY
))
104 if (test__powisf2(-INFINITY
, 4, INFINITY
))
106 if (test__powisf2(-INFINITY
, INT_MAX
- 1, INFINITY
))
108 if (test__powisf2(-INFINITY
, INT_MAX
, -INFINITY
))
111 if (test__powisf2(0, -1, INFINITY
))
113 if (test__powisf2(0, -2, INFINITY
))
115 if (test__powisf2(0, -3, INFINITY
))
117 if (test__powisf2(0, -4, INFINITY
))
119 if (test__powisf2(0, INT_MIN
+ 2, INFINITY
))
121 if (test__powisf2(0, INT_MIN
+ 1, INFINITY
))
123 if (test__powisf2(0, INT_MIN
, INFINITY
))
126 if (test__powisf2(-0., -1, -INFINITY
))
128 if (test__powisf2(-0., -2, INFINITY
))
130 if (test__powisf2(-0., -3, -INFINITY
))
132 if (test__powisf2(-0., -4, INFINITY
))
134 if (test__powisf2(-0., INT_MIN
+ 2, INFINITY
))
136 if (test__powisf2(-0., INT_MIN
+ 1, -INFINITY
))
138 if (test__powisf2(-0., INT_MIN
, INFINITY
))
141 if (test__powisf2(1, -1, 1))
143 if (test__powisf2(1, -2, 1))
145 if (test__powisf2(1, -3, 1))
147 if (test__powisf2(1, -4, 1))
149 if (test__powisf2(1, INT_MIN
+ 2, 1))
151 if (test__powisf2(1, INT_MIN
+ 1, 1))
153 if (test__powisf2(1, INT_MIN
, 1))
156 if (test__powisf2(INFINITY
, -1, 0))
158 if (test__powisf2(INFINITY
, -2, 0))
160 if (test__powisf2(INFINITY
, -3, 0))
162 if (test__powisf2(INFINITY
, -4, 0))
164 if (test__powisf2(INFINITY
, INT_MIN
+ 2, 0))
166 if (test__powisf2(INFINITY
, INT_MIN
+ 1, 0))
168 if (test__powisf2(INFINITY
, INT_MIN
, 0))
171 if (test__powisf2(-INFINITY
, -1, -0.))
173 if (test__powisf2(-INFINITY
, -2, 0))
175 if (test__powisf2(-INFINITY
, -3, -0.))
177 if (test__powisf2(-INFINITY
, -4, 0))
179 if (test__powisf2(-INFINITY
, INT_MIN
+ 2, 0))
181 if (test__powisf2(-INFINITY
, INT_MIN
+ 1, -0.))
183 if (test__powisf2(-INFINITY
, INT_MIN
, 0))
186 if (test__powisf2(2, 10, 1024.))
188 if (test__powisf2(-2, 10, 1024.))
190 if (test__powisf2(2, -10, 1/1024.))
192 if (test__powisf2(-2, -10, 1/1024.))
195 if (test__powisf2(2, 19, 524288.))
197 if (test__powisf2(-2, 19, -524288.))
199 if (test__powisf2(2, -19, 1/524288.))
201 if (test__powisf2(-2, -19, -1/524288.))
204 if (test__powisf2(2, 31, 2147483648.))
206 if (test__powisf2(-2, 31, -2147483648.))
208 if (test__powisf2(2, -31, 1/2147483648.))
210 if (test__powisf2(-2, -31, -1/2147483648.))