2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / 990413-2.c
blob262140a3fe5e207fe03df04d225884f26b97e75a
1 /* This tests for a bug in regstack that was breaking glibc's math library. */
3 extern void abort (void);
5 static __inline double
6 minus_zero (void)
8 union { double __d; int __i[2]; } __x;
9 __x.__i[0] = 0x0;
10 __x.__i[1] = 0x80000000;
11 return __x.__d;
14 static __inline long double
15 __atan2l (long double __y, long double __x)
17 register long double __value;
18 __asm __volatile__ ("fpatan\n\t"
19 : "=t" (__value)
20 : "0" (__x), "u" (__y)
21 : "st(1)");
22 return __value;
25 static __inline long double
26 __sqrtl (long double __x)
28 register long double __result;
29 __asm __volatile__ ("fsqrt" : "=t" (__result) : "0" (__x));
30 return __result;
33 static __inline double
34 asin (double __x)
36 return __atan2l (__x, __sqrtl (1.0 - __x * __x));
39 int
40 main (void)
42 double x;
44 x = minus_zero();
45 x = asin (x);
47 if (x != 0.0) /* actually -0.0, but 0.0 == -0.0 */
48 abort ();
49 return 0;