60 lines
1.0 KiB
C
60 lines
1.0 KiB
C
/* { dg-require-effective-target int32plus } */
|
|
typedef signed int __int32_t;
|
|
typedef unsigned int __uint32_t;
|
|
typedef union
|
|
{
|
|
float value;
|
|
__uint32_t word;
|
|
}
|
|
ieee_float_shape_type;
|
|
static const float two23 = 8.3886080000e+06;
|
|
static const float pi = 3.1415927410e+00;
|
|
static const float zero = 0.0000000000e+00;
|
|
static float
|
|
sin_pif (float x)
|
|
{
|
|
float y = 0;
|
|
float z = 0;
|
|
__int32_t n = 0;
|
|
__int32_t ix = 0;
|
|
do
|
|
{
|
|
ieee_float_shape_type gf_u = { 0 };
|
|
(ix) = gf_u.word;
|
|
}
|
|
while (0);
|
|
if (z == y)
|
|
{
|
|
if (ix < 0x4b800000)
|
|
{
|
|
if (ix < 0x4b000000)
|
|
z = y + two23;
|
|
do
|
|
{
|
|
ieee_float_shape_type gf_u;
|
|
gf_u.value = (z);
|
|
(n) = gf_u.word;
|
|
}
|
|
while (0);
|
|
}
|
|
}
|
|
if (n == 0)
|
|
y = __kernel_sinf (pi * y, zero, 0);
|
|
}
|
|
|
|
float
|
|
__ieee754_lgammaf_r (float x, int *signgamp)
|
|
{
|
|
float t = 0;
|
|
__int32_t hx = 0;
|
|
do
|
|
{
|
|
ieee_float_shape_type gf_u = { 0 };
|
|
(hx) = gf_u.word;
|
|
}
|
|
while (0);
|
|
if (hx < 0)
|
|
t = sin_pif (x);
|
|
return 0;
|
|
}
|