Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

GCC 2.7.1: unrecognizable insn

0 views
Skip to first unread message

Andreas Schwab

unread,
Nov 24, 1995, 3:00:00 AM11/24/95
to
The source file below makes gcc abort on an unrecognizable insn. I
have reported this bug already for 2.7.0, but it is still present.

$ gcc -v -O3 -fPIC -S atan2l.i
Reading specs from /usr/lib/gcc-lib/m68k-linux/2.7.1/specs
gcc version 2.7.1
/usr/lib/gcc-lib/m68k-linux/2.7.1/cc1 atan2l.i -quiet -O3 -version -fPIC -o atan2l.s
GNU C version 2.7.1 (68k Linux/ELF) compiled by GNU C version 2.7.0.
atan2l.c: In function `atan2l':
atan2l.c:83: internal error--unrecognizable insn:
(insn 539 120 122 (set (reg:XF 22 %fp6)
(mem/u:XF (symbol_ref/u:SI ("*.LC6")))) -1 (nil)
(nil))
gcc: Internal compiler error: program cc1 got fatal signal 6

------------------------------------------------------------
# 1 "atan2l.c"


# 1 "../../../../../include/ansidecl.h" 1 3


# 105 "../../../../../include/ansidecl.h" 3


# 20 "atan2l.c" 2

# 1 "fp.h" 1


long double acoshl( long double _x);
long double acosl ( long double _x);
long double asinhl ( long double _x);
long double asinl ( long double _x);
long double atanl ( long double _x);
long double atan2l( long double _x, long double _y);
long double atanhl( long double _x);
long double fabsl ( long double _x);
long double floorl( long double _x);
long double fmodl ( long double _x, long double _y);
long double hypotl( long double _x, long double _y);
long double sqrtl ( long double _x);
long double sinl ( long double _x);
long double logl ( long double _x);
long double expl ( long double _x);

int fpclassifyf( float _x);
int fpclassifyd( double _x);
int fpclassifyl( long double _x);


long double __infnanl( int error);


# 21 "atan2l.c" 2

# 1 "../../../../../include/math.h" 1 3


# 1 "../../../../../include/features.h" 1 3




# 1 "../../../../../include/sys/cdefs.h" 1 3


# 1 "../../../../../include/features.h" 1 3

# 136 "../../../../../include/features.h" 3

# 24 "../../../../../include/sys/cdefs.h" 2 3




# 50 "../../../../../include/sys/cdefs.h" 3


# 100 "../../../../../include/sys/cdefs.h" 3


typedef long double __long_double_t;

# 128 "../../../../../include/sys/cdefs.h" 3



# 134 "../../../../../include/features.h" 2 3

# 26 "../../../../../include/math.h" 2 3



extern double atan2 (double __y, double __x) __attribute__ ((const)) ;

# 60 "../../../../../include/math.h" 3



extern double acosh (double __x) __attribute__ ((const)) ;

extern double asinh (double __x) __attribute__ ((const)) ;

# 97 "../../../../../include/math.h" 3


extern double cbrt (double __x) __attribute__ ((const)) ;


# 136 "../../../../../include/math.h" 3



extern int __finite (double __value) __attribute__ ((const)) ;


extern double __infnan (int __error) ;


extern double __copysign (double __x,
double __y) __attribute__ ((const)) ;



extern double hypot (double __x, double __y) __attribute__ ((const)) ;

extern int isinf (double __value) __attribute__ ((const)) ;
extern int isnan (double __value) __attribute__ ((const)) ;
extern int finite (double __value) __attribute__ ((const)) ;
extern double infnan (int __error) __attribute__ ((const)) ;
extern double copysign (double __x,
double __y) __attribute__ ((const)) ;
extern double drem (double __x, double __y) __attribute__ ((const)) ;



extern double pow2 (double __x) __attribute__ ((const)) ;


extern double pow10 (double __x) __attribute__ ((const)) ;


extern double erf (double __x) __attribute__ ((const)) ;


extern double erfc (double __x) __attribute__ ((const)) ;


extern double j0 (double __x) __attribute__ ((const)) ;


extern double j1 (double __x) __attribute__ ((const)) ;


extern double jn (int __n, double __x) __attribute__ ((const)) ;


extern double lgamma (double __x) __attribute__ ((const)) ;


extern double y0 (double __x) __attribute__ ((const)) ;


extern double y1 (double __x) __attribute__ ((const)) ;


extern double yn (int __n, double __x) __attribute__ ((const)) ;

extern __long_double_t acoshl (__long_double_t __x) ;
extern __long_double_t asinhl (__long_double_t __x) ;
# 246 "../../../../../include/math.h" 3

extern __long_double_t atan2l (__long_double_t __y, __long_double_t __x) ;
extern __long_double_t hypotl (__long_double_t __x, __long_double_t __y) __attribute__ ((const)) ;

extern __long_double_t erfl (__long_double_t __x) ;
extern __long_double_t erfcl (__long_double_t __x) ;
extern __long_double_t lgammal (__long_double_t __x) ;
extern __long_double_t j0l (__long_double_t __x) ;
extern __long_double_t y0l (__long_double_t __x) ;
extern __long_double_t j1l (__long_double_t __x) ;
extern __long_double_t y1l (__long_double_t __x) ;
extern __long_double_t jnl (int __n, __long_double_t __x) ;
extern __long_double_t ynl (int __n, __long_double_t __x) ;
extern __long_double_t cbrtl (__long_double_t __x) ;
# 286 "../../../../../include/math.h" 3


extern int signgam;


# 1 "../../../../../include/huge_val.h" 1 3

# 1 "../../../../../include/endian.h" 1 3


# 1 "../../../../../include/bytesex.h" 1 3


# 34 "../../../../../include/endian.h" 2 3

# 27 "../../../../../include/huge_val.h" 2 3




# 293 "../../../../../include/math.h" 2 3


# 1 "../../../../../include/nan.h" 1 3

# 46 "../../../../../include/nan.h" 3


# 71 "../../../../../include/nan.h" 3

# 86 "../../../../../include/nan.h" 3

# 297 "../../../../../include/math.h" 2 3



# 1 "/usr/lib/gcc-lib/m68k-linux/2.7.1/include/float.h" 1 3





























# 300 "../../../../../include/math.h" 2 3

# 1 "../../../../../include/values.h" 1 3


# 65 "../../../../../include/values.h" 3

# 183 "../../../../../include/values.h" 3


# 301 "../../../../../include/math.h" 2 3


# 1 "../../../../../include/m68k/__math.h" 1 3

# 42 "../../../../../include/m68k/__math.h" 3

# 54 "../../../../../include/m68k/__math.h" 3

extern __inline double acos (double __mathop_x) __attribute__ ((const)) ; extern __inline double acos (double __mathop_x) { double __result; __asm("f" "acos" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double asin (double __mathop_x) __attribute__ ((const)) ; extern __inline double asin (double __mathop_x) { double __result; __asm("f" "asin" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double atan (double __mathop_x) __attribute__ ((const)) ; extern __inline double atan (double __mathop_x) { double __result; __asm("f" "atan" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double cos (double __mathop_x) __attribute__ ((const)) ; extern __inline double cos (double __mathop_x) { double __result; __asm("f" "cos" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double sin (double __mathop_x) __attribute__ ((const)) ; extern __inline double sin (double __mathop_x) { double __result; __asm("f" "sin" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double tan (double __mathop_x) __attribute__ ((const)) ; extern __inline double tan (double __mathop_x) { double __result; __asm("f" "tan" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double cosh (double __mathop_x) __attribute__ ((const)) ; extern __inline double cosh (double __mathop_x) { double __result; __asm("f" "cosh" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double sinh (double __mathop_x) __attribute__ ((const)) ; extern __inline double sinh (double __mathop_x) { double __result; __asm("f" "sinh" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double tanh (double __mathop_x) __attribute__ ((const)) ; extern __inline double tanh (double __mathop_x) { double __result; __asm("f" "tanh" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double exp (double __mathop_x) __attribute__ ((const)) ; extern __inline double exp (double __mathop_x) { double __result; __asm("f" "etox" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double fabs (double __mathop_x) __attribute__ ((const)) ; extern __inline double fabs (double __mathop_x) { double __result; __asm("f" "abs" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double log10 (double __mathop_x) __attribute__ ((const)) ; extern __inline double log10 (double __mathop_x) { double __result; __asm("f" "log10" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double log (double __mathop_x) __attribute__ ((const)) ; extern __inline double log (double __mathop_x) { double __result; __asm("f" "logn" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double sqrt (double __mathop_x) __attribute__ ((const)) ; extern __inline double sqrt (double __mathop_x) { double __result; __asm("f" "sqrt" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }


extern __inline long double acosl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double acosl (long double __mathop_x) { long double __result; __asm("f" "acos" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double asinl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double asinl (long double __mathop_x) { long double __result; __asm("f" "asin" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double atanl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double atanl (long double __mathop_x) { long double __result; __asm("f" "atan" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double cosl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double cosl (long double __mathop_x) { long double __result; __asm("f" "cos" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double sinl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double sinl (long double __mathop_x) { long double __result; __asm("f" "sin" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double tanl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double tanl (long double __mathop_x) { long double __result; __asm("f" "tan" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double coshl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double coshl (long double __mathop_x) { long double __result; __asm("f" "cosh" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double sinhl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double sinhl (long double __mathop_x) { long double __result; __asm("f" "sinh" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double tanhl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double tanhl (long double __mathop_x) { long double __result; __asm("f" "tanh" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double expl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double expl (long double __mathop_x) { long double __result; __asm("f" "etox" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double fabsl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double fabsl (long double __mathop_x) { long double __result; __asm("f" "abs" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double log2l (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double log2l (long double __mathop_x) { long double __result; __asm("f" "log2" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double log10l (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double log10l (long double __mathop_x) { long double __result; __asm("f" "log10" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double logl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double logl (long double __mathop_x) { long double __result; __asm("f" "logn" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double sqrtl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double sqrtl (long double __mathop_x) { long double __result; __asm("f" "sqrt" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }

extern __inline double __expm1 (double __mathop_x) __attribute__ ((const)) ; extern __inline double __expm1 (double __mathop_x) { double __result; __asm("f" "etoxm1" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double __expm1l (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double __expm1l (long double __mathop_x) { long double __result; __asm("f" "etoxm1" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }


extern __inline double expm1 (double __mathop_x) __attribute__ ((const)) ; extern __inline double expm1 (double __mathop_x) { double __result; __asm("f" "etoxm1" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double log1p (double __mathop_x) __attribute__ ((const)) ; extern __inline double log1p (double __mathop_x) { double __result; __asm("f" "lognp1" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline double atanh (double __mathop_x) __attribute__ ((const)) ; extern __inline double atanh (double __mathop_x) { double __result; __asm("f" "atanh" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double expm1l (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double expm1l (long double __mathop_x) { long double __result; __asm("f" "etoxm1" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double log1pl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double log1pl (long double __mathop_x) { long double __result; __asm("f" "lognp1" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }
extern __inline long double atanhl (long double __mathop_x) __attribute__ ((const)) ; extern __inline long double atanhl (long double __mathop_x) { long double __result; __asm("f" "atanh" "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x)); return __result; }


extern __inline double
__drem (double __x, double __y) __attribute__ ((const)) ;
extern __inline double
__drem (double __x, double __y)
{
double __result;
__asm("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
return __result;
}

extern __inline double
ldexp (double __x, int __e) __attribute__ ((const)) ;
extern __inline double
ldexp (double __x, int __e)
{
double __result;
double __double_e = (double) __e;
__asm("fscale%.x %1, %0" : "=f" (__result) : "f" (__double_e), "0" (__x));
return __result;
}

extern __inline double
fmod (double __x, double __y) __attribute__ ((const)) ;
extern __inline double
fmod (double __x, double __y)
{
double __result;
__asm("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
return __result;
}

extern __inline double
frexp (double __value, int *__expptr);
extern __inline double
frexp (double __value, int *__expptr)
{
double __mantissa, __exponent;
__asm("fgetexp%.x %1, %0" : "=f" (__exponent) : "f" (__value));
__asm("fgetman%.x %1, %0" : "=f" (__mantissa) : "f" (__value));
*__expptr = (int) __exponent;
return __mantissa;
}

extern __inline double
floor (double __x) __attribute__ ((const)) ;
extern __inline double
floor (double __x)
{
double __result;
unsigned long int __ctrl_reg;
__asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));

__asm __volatile__ ("fmove%.l %0, %!" :
: "dmi" ((__ctrl_reg & ~0x10) | 0x20));

__asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));

__asm __volatile__ ("fmove%.l %0, %!" :
: "dmi" (__ctrl_reg));
return __result;
}

extern __inline double
__rint (double __x) __attribute__ ((const)) ;
extern __inline double
__rint (double __x)
{
double __result;
unsigned long int __ctrl_reg;
__asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));

__asm __volatile__ ("fmove%.l %0, %!" :
: "dmi" (__ctrl_reg & ~0x30));

__asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));

__asm __volatile__ ("fmove%.l %0, %!" :
: "dmi" (__ctrl_reg));
return __result;
}


extern __inline double
rint (double __x) __attribute__ ((const)) ;
extern __inline double
rint (double __x)
{
return __rint (__x);
}


extern __inline double
pow (double __x, double __y) __attribute__ ((const)) ;
extern __inline double
pow (double __x, double __y)
{
double __result;
if (__x == 0.0)
{
if (__y == 0.0)
__result = __infnan (0);
else
__result = 0.0;
}
else if (__y == 0.0 || __x == 1.0)
__result = 1.0;
else if (__y == 1.0)
__result = __x;
else if (__y == 2.0)
__result = __x * __x;
else if (__x == 10.0)
__asm("ftentox%.x %1, %0" : "=f" (__result) : "f" (__y));
else if (__x == 2.0)
__asm("ftwotox%.x %1, %0" : "=f" (__result) : "f" (__y));
else if (__x < 0.0)
{
double __temp = floor (__y);
if (__y == __temp)
{
int i = (int) __y;
__result = exp (__y * log (-__x));
if (i & 1)
__result = -__result;
}
else
__result = __infnan (0);
}
else
__result = exp (__y * log (__x));
return __result;
}

extern __inline double
ceil (double __x) __attribute__ ((const)) ;
extern __inline double
ceil (double __x)
{
double __result;
unsigned long int __ctrl_reg;
__asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));

__asm __volatile__ ("fmove%.l %0, %!" :
: "dmi" (__ctrl_reg | 0x30));

__asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));

__asm __volatile__ ("fmove%.l %0, %!" :
: "dmi" (__ctrl_reg));
return __result;
}

extern __inline double
modf (double __value, double *__iptr);
extern __inline double
modf (double __value, double *__iptr)
{
double __modf_int = floor (__value);
*__iptr = __modf_int;
return __value - __modf_int;
}

extern __inline int
__isinf (double __value) __attribute__ ((const)) ;
extern __inline int
__isinf (double __value)
{

unsigned long int __fpsr;
__asm("ftst%.x %1\n"
"fmove%.l %!, %0" : "=dm" (__fpsr) : "f" (__value));
return (__fpsr & (2 << (3 * 8))) ? (__value < 0 ? -1 : 1) : 0;
}

extern __inline int
__isnan (double __value) __attribute__ ((const)) ;
extern __inline int
__isnan (double __value)
{
char __result;
__asm("ftst%.x %1\n"
"fsun %0" : "=dm" (__result) : "f" (__value));
return __result;
}

extern __inline long double
__dreml (long double __x, long double __y) __attribute__ ((const)) ;
extern __inline long double
__dreml (long double __x, long double __y)
{
long double __result;
__asm("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
return __result;
}

extern __inline long double
ldexpl (long double __x, int __e) __attribute__ ((const)) ;
extern __inline long double
ldexpl (long double __x, int __e)
{
long double __result;
long double __double_e = (long double) __e;
__asm("fscale%.x %1, %0" : "=f" (__result) : "f" (__double_e), "0" (__x));
return __result;
}

extern __inline long double
fmodl (long double __x, long double __y) __attribute__ ((const)) ;
extern __inline long double
fmodl (long double __x, long double __y)
{
long double __result;
__asm("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
return __result;
}

extern __inline long double
frexpl (long double __value, int *__expptr);
extern __inline long double
frexpl (long double __value, int *__expptr)
{
long double __mantissa, __exponent;
__asm("fgetexp%.x %1, %0" : "=f" (__exponent) : "f" (__value));
__asm("fgetman%.x %1, %0" : "=f" (__mantissa) : "f" (__value));
*__expptr = (int) __exponent;
return __mantissa;
}

extern __inline long double
floorl (long double __x) __attribute__ ((const)) ;
extern __inline long double
floorl (long double __x)
{
long double __result;
unsigned long int __ctrl_reg;
__asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));

__asm __volatile__ ("fmove%.l %0, %!" :
: "dmi" ((__ctrl_reg & ~0x10) | 0x20));

__asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));

__asm __volatile__ ("fmove%.l %0, %!" :
: "dmi" (__ctrl_reg));
return __result;
}

extern __inline long double
__rintl (long double __x) __attribute__ ((const)) ;
extern __inline long double
__rintl (long double __x)
{
long double __result;
unsigned long int __ctrl_reg;
__asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));

__asm __volatile__ ("fmove%.l %0, %!" :
: "dmi" (__ctrl_reg & ~0x30));

__asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));

__asm __volatile__ ("fmove%.l %0, %!" :
: "dmi" (__ctrl_reg));
return __result;
}


extern __inline long double
rintl (long double __x) __attribute__ ((const)) ;
extern __inline long double
rintl (long double __x)
{
return __rintl (__x);
}


extern long double __infnanl (int error);

extern __inline long double
powl (long double __x, long double __y) __attribute__ ((const)) ;
extern __inline long double
powl (long double __x, long double __y)
{
long double __result;
if (__x == 0.0L)
{
if (__y == 0.0L)
__result = __infnanl (0);
else
__result = 0.0L;
}
else if (__y == 0.0L || __x == 1.0L)
__result = 1.0L;
else if (__y == 1.0L)
__result = __x;
else if (__y == 2.0L)
__result = __x * __x;
else if (__x == 10.0L)
__asm("ftentox%.x %1, %0" : "=f" (__result) : "f" (__y));
else if (__x == 2.0L)
__asm("ftwotox%.x %1, %0" : "=f" (__result) : "f" (__y));
else if (__x < 0.0L)
{
long double __temp = floorl (__y);
if (__y == __temp)
{
int i = (int) __y;
__result = expl (__y * logl (-__x));
if (i & 1)
__result = -__result;
}
else
__result = __infnanl (0);
}
else
__result = expl (__y * logl (__x));
return __result;
}

extern __inline long double
ceill (long double __x) __attribute__ ((const)) ;
extern __inline long double
ceill (long double __x)
{
long double __result;
unsigned long int __ctrl_reg;
__asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));

__asm __volatile__ ("fmove%.l %0, %!" :
: "dmi" (__ctrl_reg | 0x30));

__asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));

__asm __volatile__ ("fmove%.l %0, %!" :
: "dmi" (__ctrl_reg));
return __result;
}

extern __inline long double
modfl (long double __value, long double *__iptr);
extern __inline long double
modfl (long double __value, long double *__iptr)
{
long double __modf_int = floorl (__value);
*__iptr = __modf_int;
return __value - __modf_int;
}

extern __inline int
__isinfl (long double __value) __attribute__ ((const)) ;
extern __inline int
__isinfl (long double __value)
{

unsigned long int __fpsr;
__asm("ftst%.x %1\n"
"fmove%.l %!, %0" : "=g" (__fpsr) : "f" (__value));
return (__fpsr & (2 << (3 * 8))) ? (__value < 0 ? -1 : 1) : 0;
}

extern __inline int
__isnanl (long double __value) __attribute__ ((const)) ;
extern __inline int
__isnanl (long double __value)
{
char __result;
__asm("ftst%.x %1\n"
"fsun %0" : "=g" (__result) : "f" (__value));
return __result;
}


# 359 "../../../../../include/math.h" 2 3


# 22 "atan2l.c" 2


# 1 "../../../../../include/ieee854.h" 1 3


union ieee854_double
{
long double d;


struct
{

unsigned int negative:1;
unsigned int exponent:15;
unsigned int empty:16;
unsigned int mantissa0:32;
unsigned int mantissa1:32;


} ieee;


struct
{

unsigned int negative:1;
unsigned int exponent:15;
unsigned int empty:16;
unsigned int one:1;
unsigned int quiet_nan:1;
unsigned int mantissa0:30;
unsigned int mantissa1:32;

# 67 "../../../../../include/ieee854.h" 3

} ieee_nan;
};


# 26 "atan2l.c" 2



static long double
__copysignl ( long double x , long double y )
{
union ieee854_double *ux = (union ieee854_double *) &x;
union ieee854_double *uy = (union ieee854_double *) &y;

ux->ieee.negative = uy->ieee.negative;

return x;
}

long double
atan2l ( long double y , long double x )
{
long double one = 1.0, zero = 0.0;
long double signx, signy;
long double pi, PIo4, PIo2;

if (__isnanl(x))
return x;
if (__isnanl(y))
return y;

signy = __copysignl(one, y);
signx = __copysignl(one, x);

asm("fmovecr%.x %1, %0" : "=f" (pi) : "i" (0));
PIo2 = pi / 2;
PIo4 = pi / 4;

if (y == zero)
return signx == one ? y : __copysignl(pi, signy);

if (x == zero)
return __copysignl(PIo2, signy);

if (__isinfl(x))
{
if (__isinfl(y))
return __copysignl(signx == one ? PIo4 : 3 * PIo4, signy);
else
return __copysignl(signx == one ? zero : pi, signy);
}

if (__isinfl(y))
return __copysignl(PIo2, signy);

y = fabsl(y);

if (x < 0.0)

return __copysignl(pi - atanl(y / -x), signy);

return __copysignl(atanl(y / x), signy);
}


------------------------------------------------------------

0 new messages