/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
*/
/*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#include <sys/isa_defs.h>
#include <sys/ccompile.h>
#ifdef _LITTLE_ENDIAN
#define LO(x) *(unsigned*)x
#else
#define HI(x) *(int*)x
#endif
#ifdef __RESTRICT
#define restrict _Restrict
#else
#define restrict
#endif
extern const double __vlibm_TBL_sincos_hi[], __vlibm_TBL_sincos_lo[];
static const double
-4.999999999999931701464060878888294524481e-0001 },
4.166666666394861917535640593963708222319e-0002 },
-1.388888552656142867832756687736851681462e-0003 },
2.478519423681460796618128289454530524759e-0005 };
/* Don't __ the following; acomp will handle it */
extern double fabs(double);
extern void __vlibm_vsin_big(int, double *, int, double *, int, int);
void
int stridey)
{
volatile int v __GNU_UNUSED;
nsave = n;
xsave = x;
ysave = y;
biguns = 0;
do
{
if (hx0 > 0x3fe921fb)
{
biguns = 1;
goto MEDIUM;
}
if (hx0 < 0x3e400000)
{
v = *x;
*y = *x;
x += stridex;
y += stridey;
i = 0;
if (--n <= 0)
break;
goto LOOP0;
}
x0 = *x;
py0 = y;
x += stridex;
y += stridey;
i = 1;
if (--n <= 0)
break;
if (hx1 > 0x3fe921fb)
{
biguns = 2;
goto MEDIUM;
}
if (hx1 < 0x3e400000)
{
v = *x;
*y = *x;
x += stridex;
y += stridey;
i = 1;
if (--n <= 0)
break;
goto LOOP1;
}
x1 = *x;
py1 = y;
x += stridex;
y += stridey;
i = 2;
if (--n <= 0)
break;
if (hx2 > 0x3fe921fb)
{
biguns = 3;
goto MEDIUM;
}
if (hx2 < 0x3e400000)
{
v = *x;
*y = *x;
x += stridex;
y += stridey;
i = 2;
if (--n <= 0)
break;
goto LOOP2;
}
x2 = *x;
py2 = y;
switch (i)
{
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
}
x += stridex;
y += stridey;
i = 0;
} while (--n > 0);
if (i > 0)
{
if (i > 1)
{
if (hx1 < 0x3fc90000)
{
}
else
{
}
}
if (hx0 < 0x3fc90000)
{
}
else
{
}
}
return;
/*
* MEDIUM RANGE PROCESSING
* Jump here at first sign of medium range argument. We are a bit
* confused due to the jump.. fix up several variables and jump into
* the nth loop, same as was being processed above.
*/
if (biguns == 3)
{
biguns = 0;
goto loop2;
}
else if (biguns == 2)
{
biguns = 0;
goto loop1;
}
biguns = 0;
do
{
unsigned hx;
hx &= ~0x80000000;
if (hx < 0x3e400000)
{
v = *x;
*y = *x;
x += stridex;
y += stridey;
i = 0;
if (--n <= 0)
break;
goto loop0;
}
if (hx > 0x413921fb)
{
if (hx >= 0x7ff00000)
{
x0 = *x;
}
else
biguns = 1;
x += stridex;
y += stridey;
i = 0;
if (--n <= 0)
break;
goto loop0;
}
x0 = *x;
py0 = y;
x += stridex;
y += stridey;
i = 1;
if (--n <= 0)
break;
hx &= ~0x80000000;
if (hx < 0x3e400000)
{
v = *x;
*y = *x;
x += stridex;
y += stridey;
i = 1;
if (--n <= 0)
break;
goto loop1;
}
if (hx > 0x413921fb)
{
if (hx >= 0x7ff00000)
{
x1 = *x;
}
else
biguns = 1;
x += stridex;
y += stridey;
i = 1;
if (--n <= 0)
break;
goto loop1;
}
x1 = *x;
py1 = y;
x += stridex;
y += stridey;
i = 2;
if (--n <= 0)
break;
hx &= ~0x80000000;
if (hx < 0x3e400000)
{
v = *x;
*y = *x;
x += stridex;
y += stridey;
i = 2;
if (--n <= 0)
break;
goto loop2;
}
if (hx > 0x413921fb)
{
if (hx >= 0x7ff00000)
{
x2 = *x;
}
else
biguns = 1;
x += stridex;
y += stridey;
i = 2;
if (--n <= 0)
break;
goto loop2;
}
x2 = *x;
py2 = y;
n0 &= 3;
n1 &= 3;
n2 &= 3;
switch (i)
{
case 0:
xsb0 |= 1;
xsb1 |= 1;
xsb2 |= 1;
break;
case 1:
y0_or_zero[0] = y0;
xsb1 |= 1;
xsb2 |= 1;
break;
case 2:
y1_or_zero[0] = y1;
xsb0 |= 1;
xsb2 |= 1;
break;
case 3:
y0_or_zero[0] = y0;
y1_or_zero[0] = y1;
xsb2 |= 1;
break;
case 4:
y2_or_zero[0] = y2;
xsb0 |= 1;
xsb1 |= 1;
break;
case 5:
y0_or_zero[0] = y0;
y2_or_zero[0] = y2;
xsb1 |= 1;
break;
case 6:
y1_or_zero[0] = y1;
y2_or_zero[0] = y2;
xsb0 |= 1;
break;
case 7:
y0_or_zero[0] = y0;
y1_or_zero[0] = y1;
y2_or_zero[0] = y2;
break;
}
x += stridex;
y += stridey;
i = 0;
} while (--n > 0);
if (i > 0)
{
if (i > 1)
{
n1 &= 3;
{
y1_or_zero[0] = y1;
}
else
{
xsb1 |= 1;
}
}
n0 &= 3;
{
y0_or_zero[0] = y0;
}
else
{
xsb0 |= 1;
}
}
if (biguns)
}