225 lines · c
1// RUN: %clang_builtins %s %librt -o %t && %run %t2// REQUIRES: librt_has_powixf23// UNSUPPORTED: target=powerpc64{{.*}}4// REQUIRES: x86-target-arch5 6#if !_ARCH_PPC7 8#include "int_lib.h"9#include <stdio.h>10#include <math.h>11 12// Returns: a ^ b13 14COMPILER_RT_ABI long double __powixf2(long double a, int b);15 16int test__powixf2(long double a, int b, long double expected)17{18 long double x = __powixf2(a, b);19 int correct = (x == expected) && (signbit(x) == signbit(expected));20 if (!correct)21 printf("error in __powixf2(%Lf, %d) = %Lf, expected %Lf\n",22 a, b, x, expected);23 return !correct;24}25 26#endif27 28int main()29{30#if !_ARCH_PPC31 if (test__powixf2(0, 0, 1))32 return 1;33 if (test__powixf2(1, 0, 1))34 return 1;35 if (test__powixf2(1.5, 0, 1))36 return 1;37 if (test__powixf2(2, 0, 1))38 return 1;39 if (test__powixf2(INFINITY, 0, 1))40 return 1;41 42 if (test__powixf2(-0., 0, 1))43 return 1;44 if (test__powixf2(-1, 0, 1))45 return 1;46 if (test__powixf2(-1.5, 0, 1))47 return 1;48 if (test__powixf2(-2, 0, 1))49 return 1;50 if (test__powixf2(-INFINITY, 0, 1))51 return 1;52 53 if (test__powixf2(0, 1, 0))54 return 1;55 if (test__powixf2(0, 2, 0))56 return 1;57 if (test__powixf2(0, 3, 0))58 return 1;59 if (test__powixf2(0, 4, 0))60 return 1;61 if (test__powixf2(0, INT_MAX - 1, 0))62 return 1;63 if (test__powixf2(0, INT_MAX, 0))64 return 1;65 66 if (test__powixf2(-0., 1, -0.))67 return 1;68 if (test__powixf2(-0., 2, 0))69 return 1;70 if (test__powixf2(-0., 3, -0.))71 return 1;72 if (test__powixf2(-0., 4, 0))73 return 1;74 if (test__powixf2(-0., INT_MAX - 1, 0))75 return 1;76 if (test__powixf2(-0., INT_MAX, -0.))77 return 1;78 79 if (test__powixf2(1, 1, 1))80 return 1;81 if (test__powixf2(1, 2, 1))82 return 1;83 if (test__powixf2(1, 3, 1))84 return 1;85 if (test__powixf2(1, 4, 1))86 return 1;87 if (test__powixf2(1, INT_MAX - 1, 1))88 return 1;89 if (test__powixf2(1, INT_MAX, 1))90 return 1;91 92 if (test__powixf2(INFINITY, 1, INFINITY))93 return 1;94 if (test__powixf2(INFINITY, 2, INFINITY))95 return 1;96 if (test__powixf2(INFINITY, 3, INFINITY))97 return 1;98 if (test__powixf2(INFINITY, 4, INFINITY))99 return 1;100 if (test__powixf2(INFINITY, INT_MAX - 1, INFINITY))101 return 1;102 if (test__powixf2(INFINITY, INT_MAX, INFINITY))103 return 1;104 105 if (test__powixf2(-INFINITY, 1, -INFINITY))106 return 1;107 if (test__powixf2(-INFINITY, 2, INFINITY))108 return 1;109 if (test__powixf2(-INFINITY, 3, -INFINITY))110 return 1;111 if (test__powixf2(-INFINITY, 4, INFINITY))112 return 1;113 if (test__powixf2(-INFINITY, INT_MAX - 1, INFINITY))114 return 1;115 if (test__powixf2(-INFINITY, INT_MAX, -INFINITY))116 return 1;117 118 if (test__powixf2(0, -1, INFINITY))119 return 1;120 if (test__powixf2(0, -2, INFINITY))121 return 1;122 if (test__powixf2(0, -3, INFINITY))123 return 1;124 if (test__powixf2(0, -4, INFINITY))125 return 1;126 if (test__powixf2(0, INT_MIN + 2, INFINITY))127 return 1;128 if (test__powixf2(0, INT_MIN + 1, INFINITY))129 return 1;130 if (test__powixf2(0, INT_MIN, INFINITY))131 return 1;132 133 if (test__powixf2(-0., -1, -INFINITY))134 return 1;135 if (test__powixf2(-0., -2, INFINITY))136 return 1;137 if (test__powixf2(-0., -3, -INFINITY))138 return 1;139 if (test__powixf2(-0., -4, INFINITY))140 return 1;141 if (test__powixf2(-0., INT_MIN + 2, INFINITY))142 return 1;143 if (test__powixf2(-0., INT_MIN + 1, -INFINITY))144 return 1;145 if (test__powixf2(-0., INT_MIN, INFINITY))146 return 1;147 148 if (test__powixf2(1, -1, 1))149 return 1;150 if (test__powixf2(1, -2, 1))151 return 1;152 if (test__powixf2(1, -3, 1))153 return 1;154 if (test__powixf2(1, -4, 1))155 return 1;156 if (test__powixf2(1, INT_MIN + 2, 1))157 return 1;158 if (test__powixf2(1, INT_MIN + 1, 1))159 return 1;160 if (test__powixf2(1, INT_MIN, 1))161 return 1;162 163 if (test__powixf2(INFINITY, -1, 0))164 return 1;165 if (test__powixf2(INFINITY, -2, 0))166 return 1;167 if (test__powixf2(INFINITY, -3, 0))168 return 1;169 if (test__powixf2(INFINITY, -4, 0))170 return 1;171 if (test__powixf2(INFINITY, INT_MIN + 2, 0))172 return 1;173 if (test__powixf2(INFINITY, INT_MIN + 1, 0))174 return 1;175 if (test__powixf2(INFINITY, INT_MIN, 0))176 return 1;177 178 if (test__powixf2(-INFINITY, -1, -0.))179 return 1;180 if (test__powixf2(-INFINITY, -2, 0))181 return 1;182 if (test__powixf2(-INFINITY, -3, -0.))183 return 1;184 if (test__powixf2(-INFINITY, -4, 0))185 return 1;186 if (test__powixf2(-INFINITY, INT_MIN + 2, 0))187 return 1;188 if (test__powixf2(-INFINITY, INT_MIN + 1, -0.))189 return 1;190 if (test__powixf2(-INFINITY, INT_MIN, 0))191 return 1;192 193 if (test__powixf2(2, 10, 1024.))194 return 1;195 if (test__powixf2(-2, 10, 1024.))196 return 1;197 if (test__powixf2(2, -10, 1/1024.))198 return 1;199 if (test__powixf2(-2, -10, 1/1024.))200 return 1;201 202 if (test__powixf2(2, 19, 524288.))203 return 1;204 if (test__powixf2(-2, 19, -524288.))205 return 1;206 if (test__powixf2(2, -19, 1/524288.))207 return 1;208 if (test__powixf2(-2, -19, -1/524288.))209 return 1;210 211 if (test__powixf2(2, 31, 2147483648.))212 return 1;213 if (test__powixf2(-2, 31, -2147483648.))214 return 1;215 if (test__powixf2(2, -31, 1/2147483648.))216 return 1;217 if (test__powixf2(-2, -31, -1/2147483648.))218 return 1;219 220#else221 printf("skipped\n");222#endif223 return 0;224}225