🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.gcc.bug
Article #6402

GCC 2.7.1: unrecognizable insn

#6402
From: Andreas Schwab
Date: Fri, 24 Nov 1995 00:00
1777 lines
30105 bytes
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);
}




------------------------------------------------------------
Technical Details
Message-ID: <9511241005.AA04838@lamothe.informatik.uni-dortmund.de>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit
X-Google-Thread: 113d02,f87a367c9fa5566,start
X-Google-Attributes: gid113d02,public
From: schwab@lamothe.informatik.uni-dortmund.de (Andreas Schwab)
Subject: GCC 2.7.1: unrecognizable insn
Date: 1995/11/24
Message-ID: <9511241005.AA04838@lamothe.informatik.uni-dortmund.de>
X-Deja-AN: 120031673
distribution: gnu
sender: daemon@cis.ohio-state.edu
organization: GNUs Not Usenet
reply-to: schwab@issan.informatik.uni-dortmund.de
newsgroups: gnu.gcc.bug