/* Test long double on x86 and x86-64. */ | |
/* { dg-do run { target i?86-*-* x86_64-*-*} } */ | |
/* { dg-options -O2 } */ | |
extern void abort (void); | |
__inline int | |
__signbitl (long double __x) | |
{ | |
union { long double __l; int __i[3]; } __u = { __l: __x }; | |
return (__u.__i[2] & 0x8000) != 0; | |
} | |
void | |
foo (long double x, long double y) | |
{ | |
long double z = x / y; | |
if (__signbitl (x) && __signbitl (z)) | |
abort (); | |
} | |
int main() | |
{ | |
if (sizeof (long double) > sizeof (double)) | |
foo (-0.0, -1.0); | |
return 0; | |
} |