URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 297 |
Rev 338 |
/* This tests for a bug in regstack that was breaking glibc's math library. */
|
/* This tests for a bug in regstack that was breaking glibc's math library. */
|
|
|
extern void abort (void);
|
extern void abort (void);
|
|
|
static __inline double
|
static __inline double
|
minus_zero (void)
|
minus_zero (void)
|
{
|
{
|
union { double __d; int __i[2]; } __x;
|
union { double __d; int __i[2]; } __x;
|
__x.__i[0] = 0x0;
|
__x.__i[0] = 0x0;
|
__x.__i[1] = 0x80000000;
|
__x.__i[1] = 0x80000000;
|
return __x.__d;
|
return __x.__d;
|
}
|
}
|
|
|
static __inline long double
|
static __inline long double
|
__atan2l (long double __y, long double __x)
|
__atan2l (long double __y, long double __x)
|
{
|
{
|
register long double __value;
|
register long double __value;
|
__asm __volatile__ ("fpatan\n\t"
|
__asm __volatile__ ("fpatan\n\t"
|
: "=t" (__value)
|
: "=t" (__value)
|
: "0" (__x), "u" (__y)
|
: "0" (__x), "u" (__y)
|
: "st(1)");
|
: "st(1)");
|
return __value;
|
return __value;
|
}
|
}
|
|
|
static __inline long double
|
static __inline long double
|
__sqrtl (long double __x)
|
__sqrtl (long double __x)
|
{
|
{
|
register long double __result;
|
register long double __result;
|
__asm __volatile__ ("fsqrt" : "=t" (__result) : "0" (__x));
|
__asm __volatile__ ("fsqrt" : "=t" (__result) : "0" (__x));
|
return __result;
|
return __result;
|
}
|
}
|
|
|
static __inline double
|
static __inline double
|
asin (double __x)
|
asin (double __x)
|
{
|
{
|
return __atan2l (__x, __sqrtl (1.0 - __x * __x));
|
return __atan2l (__x, __sqrtl (1.0 - __x * __x));
|
}
|
}
|
|
|
int
|
int
|
main (void)
|
main (void)
|
{
|
{
|
double x;
|
double x;
|
|
|
x = minus_zero();
|
x = minus_zero();
|
x = asin (x);
|
x = asin (x);
|
|
|
if (x != 0.0) /* actually -0.0, but 0.0 == -0.0 */
|
if (x != 0.0) /* actually -0.0, but 0.0 == -0.0 */
|
abort ();
|
abort ();
|
return 0;
|
return 0;
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.