mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-30 16:45:28 +08:00
Regression test for x86 fp-stack breakage
From-SVN: r26430
This commit is contained in:
parent
b3d2c3b8a3
commit
299d193437
50
gcc/testsuite/gcc.c-torture/execute/990413-2.c
Normal file
50
gcc/testsuite/gcc.c-torture/execute/990413-2.c
Normal file
@ -0,0 +1,50 @@
|
||||
/* This tests for a bug in regstack that was breaking glibc's math library. */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
static __inline double
|
||||
minus_zero (void)
|
||||
{
|
||||
union { double __d; int __i[2]; } __x;
|
||||
__x.__i[0] = 0x0;
|
||||
__x.__i[1] = 0x80000000;
|
||||
return __x.__d;
|
||||
}
|
||||
|
||||
static __inline long double
|
||||
__atan2l (long double __y, long double __x)
|
||||
{
|
||||
register long double __value;
|
||||
__asm __volatile__ ("fpatan\n\t"
|
||||
: "=t" (__value)
|
||||
: "0" (__x), "u" (__y)
|
||||
: "st(1)");
|
||||
return __value;
|
||||
}
|
||||
|
||||
static __inline long double
|
||||
__sqrtl (long double __x)
|
||||
{
|
||||
register long double __result;
|
||||
__asm __volatile__ ("fsqrt" : "=t" (__result) : "0" (__x));
|
||||
return __result;
|
||||
}
|
||||
|
||||
static __inline double
|
||||
asin (double __x)
|
||||
{
|
||||
return __atan2l (__x, __sqrtl (1.0 - __x * __x));
|
||||
}
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
double x;
|
||||
|
||||
x = minus_zero();
|
||||
x = asin (x);
|
||||
|
||||
if (x != 0.0) /* actually -0.0, but 0.0 == -0.0 */
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
3
gcc/testsuite/gcc.c-torture/execute/990413-2.x
Normal file
3
gcc/testsuite/gcc.c-torture/execute/990413-2.x
Normal file
@ -0,0 +1,3 @@
|
||||
# This test is x86 specific.
|
||||
if { ! [istarget "i?86-*-*"] } { return 1 }
|
||||
return 0
|
Loading…
Reference in New Issue
Block a user