public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/8098: gcc is crashing
@ 2002-09-30  8:46 fojtik
  0 siblings, 0 replies; only message in thread
From: fojtik @ 2002-09-30  8:46 UTC (permalink / raw)
  To: gcc-gnats


>Number:         8098
>Category:       c++
>Synopsis:       gcc is crashing
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Sep 30 08:46:03 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     fojtik@vision.felk.cvut.cz
>Release:        unknown-1.0
>Organization:
>Environment:
Slackware linux gcc 3.0 kernel 2.2.21
>Description:
gcc -D__CPU__=386 -Wall -O1 -m386 -g -c -o libm.o libm.c
`-m386' is deprecated. Use `-march=i386' or `-mcpu=i386' instead.
libm.c: In function `fmodf':
libm.c:729: Internal compiler error in subst_stack_regs_pat, at reg-stack.c:1397
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
make: *** [libm.o] Error 1
>How-To-Repeat:
Compile attached example

The bug is repeatable even if I place -march=i386
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/plain; name="libm.i"
Content-Disposition: inline; filename="libm.i"

# 46 "libm.c"
# 1 "/usr/include/math.h" 1 3
# 27 "/usr/include/math.h" 3
# 1 "/usr/include/features.h" 1 3
# 249 "/usr/include/features.h" 3
# 1 "/usr/include/sys/cdefs.h" 1 3
# 250 "/usr/include/features.h" 2 3
# 277 "/usr/include/features.h" 3
# 1 "/usr/local/include/gnu/stubs.h" 1 3
# 278 "/usr/include/features.h" 2 3
# 28 "/usr/include/math.h" 2 3





# 1 "/usr/include/bits/huge_val.h" 1 3
# 25 "/usr/include/bits/huge_val.h" 3
# 1 "/usr/include/features.h" 1 3
# 26 "/usr/include/bits/huge_val.h" 2 3
# 34 "/usr/include/math.h" 2 3






# 1 "/usr/include/bits/mathdef.h" 1 3
# 41 "/usr/include/math.h" 2 3
# 63 "/usr/include/math.h" 3
# 1 "/usr/include/bits/mathcalls.h" 1 3
# 54 "/usr/include/bits/mathcalls.h" 3
extern double acos (double __x); extern double __acos (double __x);

extern double asin (double __x); extern double __asin (double __x);

extern double atan (double __x); extern double __atan (double __x);

extern double atan2 (double __y, double __x); extern double __atan2 (double __y, double __x);


extern double cos (double __x); extern double __cos (double __x);

extern double sin (double __x); extern double __sin (double __x);

extern double tan (double __x); extern double __tan (double __x);
# 78 "/usr/include/bits/mathcalls.h" 3
extern double cosh (double __x); extern double __cosh (double __x);

extern double sinh (double __x); extern double __sinh (double __x);

extern double tanh (double __x); extern double __tanh (double __x);



extern double acosh (double __x); extern double __acosh (double __x);

extern double asinh (double __x); extern double __asinh (double __x);

extern double atanh (double __x); extern double __atanh (double __x);





extern double exp (double __x); extern double __exp (double __x);
# 106 "/usr/include/bits/mathcalls.h" 3
extern double frexp (double __x, int *__exponent); extern double __frexp (double __x, int *__exponent);


extern double ldexp (double __x, int __exponent); extern double __ldexp (double __x, int __exponent);


extern double log (double __x); extern double __log (double __x);


extern double log10 (double __x); extern double __log10 (double __x);


extern double modf (double __x, double *__iptr); extern double __modf (double __x, double *__iptr);



extern double expm1 (double __x); extern double __expm1 (double __x);


extern double log1p (double __x); extern double __log1p (double __x);


extern double logb (double __x); extern double __logb (double __x);
# 143 "/usr/include/bits/mathcalls.h" 3
extern double pow (double __x, double __y); extern double __pow (double __x, double __y);


extern double sqrt (double __x); extern double __sqrt (double __x);



extern double hypot (double __x, double __y); extern double __hypot (double __x, double __y);




extern double cbrt (double __x); extern double __cbrt (double __x);






extern double ceil (double __x); extern double __ceil (double __x);


extern double fabs (double __x) __attribute__ ((__const__)); extern double __fabs (double __x) __attribute__ ((__const__));


extern double floor (double __x); extern double __floor (double __x);


extern double fmod (double __x, double __y); extern double __fmod (double __x, double __y);




extern int __isinf (double __value) __attribute__ ((__const__));




extern int isinf (double __value) __attribute__ ((__const__));


extern int finite (double __value) __attribute__ ((__const__)); extern int __finite (double __value) __attribute__ ((__const__));







extern double infnan (int __error) __attribute__ ((__const__)); extern double __infnan (int __error) __attribute__ ((__const__));


extern double drem (double __x, double __y); extern double __drem (double __x, double __y);



extern double significand (double __x); extern double __significand (double __x);




extern double copysign (double __x, double __y) __attribute__ ((__const__)); extern double __copysign (double __x, double __y) __attribute__ ((__const__));
# 215 "/usr/include/bits/mathcalls.h" 3
extern int isnan (double __value) __attribute__ ((__const__)); extern int __isnan (double __value) __attribute__ ((__const__));


extern double j0 (double); extern double __j0 (double);
extern double j1 (double); extern double __j1 (double);
extern double jn (int, double); extern double __jn (int, double);
extern double y0 (double); extern double __y0 (double);
extern double y1 (double); extern double __y1 (double);
extern double yn (int, double); extern double __yn (int, double);





extern double erf (double); extern double __erf (double);
extern double erfc (double); extern double __erfc (double);
extern double lgamma (double); extern double __lgamma (double);
extern double tgamma (double); extern double __tgamma (double);




extern double gamma (double); extern double __gamma (double);






extern double lgamma_r (double, int *__signgamp); extern double __lgamma_r (double, int *__signgamp);






extern double rint (double __x); extern double __rint (double __x);


extern double nextafter (double __x, double __y) __attribute__ ((__const__)); extern double __nextafter (double __x, double __y) __attribute__ ((__const__));





extern double remainder (double __x, double __y); extern double __remainder (double __x, double __y);



extern double scalb (double __x, double __n); extern double __scalb (double __x, double __n);



extern double scalbn (double __x, int __n); extern double __scalbn (double __x, int __n);


extern int ilogb (double __x); extern int __ilogb (double __x);
# 64 "/usr/include/math.h" 2 3
# 82 "/usr/include/math.h" 3
# 1 "/usr/include/bits/mathcalls.h" 1 3
# 54 "/usr/include/bits/mathcalls.h" 3
extern float acosf (float __x); extern float __acosf (float __x);

extern float asinf (float __x); extern float __asinf (float __x);

extern float atanf (float __x); extern float __atanf (float __x);

extern float atan2f (float __y, float __x); extern float __atan2f (float __y, float __x);


extern float cosf (float __x); extern float __cosf (float __x);

extern float sinf (float __x); extern float __sinf (float __x);

extern float tanf (float __x); extern float __tanf (float __x);
# 78 "/usr/include/bits/mathcalls.h" 3
extern float coshf (float __x); extern float __coshf (float __x);

extern float sinhf (float __x); extern float __sinhf (float __x);

extern float tanhf (float __x); extern float __tanhf (float __x);



extern float acoshf (float __x); extern float __acoshf (float __x);

extern float asinhf (float __x); extern float __asinhf (float __x);

extern float atanhf (float __x); extern float __atanhf (float __x);





extern float expf (float __x); extern float __expf (float __x);
# 106 "/usr/include/bits/mathcalls.h" 3
extern float frexpf (float __x, int *__exponent); extern float __frexpf (float __x, int *__exponent);


extern float ldexpf (float __x, int __exponent); extern float __ldexpf (float __x, int __exponent);


extern float logf (float __x); extern float __logf (float __x);


extern float log10f (float __x); extern float __log10f (float __x);


extern float modff (float __x, float *__iptr); extern float __modff (float __x, float *__iptr);



extern float expm1f (float __x); extern float __expm1f (float __x);


extern float log1pf (float __x); extern float __log1pf (float __x);


extern float logbf (float __x); extern float __logbf (float __x);
# 143 "/usr/include/bits/mathcalls.h" 3
extern float powf (float __x, float __y); extern float __powf (float __x, float __y);


extern float sqrtf (float __x); extern float __sqrtf (float __x);



extern float hypotf (float __x, float __y); extern float __hypotf (float __x, float __y);




extern float cbrtf (float __x); extern float __cbrtf (float __x);






extern float ceilf (float __x); extern float __ceilf (float __x);


extern float fabsf (float __x) __attribute__ ((__const__)); extern float __fabsf (float __x) __attribute__ ((__const__));


extern float floorf (float __x); extern float __floorf (float __x);


extern float fmodf (float __x, float __y); extern float __fmodf (float __x, float __y);




extern int __isinff (float __value) __attribute__ ((__const__));




extern int isinff (float __value) __attribute__ ((__const__));


extern int finitef (float __value) __attribute__ ((__const__)); extern int __finitef (float __value) __attribute__ ((__const__));







extern float infnanf (int __error) __attribute__ ((__const__)); extern float __infnanf (int __error) __attribute__ ((__const__));


extern float dremf (float __x, float __y); extern float __dremf (float __x, float __y);



extern float significandf (float __x); extern float __significandf (float __x);




extern float copysignf (float __x, float __y) __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) __attribute__ ((__const__));
# 215 "/usr/include/bits/mathcalls.h" 3
extern int isnanf (float __value) __attribute__ ((__const__)); extern int __isnanf (float __value) __attribute__ ((__const__));


extern float j0f (float); extern float __j0f (float);
extern float j1f (float); extern float __j1f (float);
extern float jnf (int, float); extern float __jnf (int, float);
extern float y0f (float); extern float __y0f (float);
extern float y1f (float); extern float __y1f (float);
extern float ynf (int, float); extern float __ynf (int, float);





extern float erff (float); extern float __erff (float);
extern float erfcf (float); extern float __erfcf (float);
extern float lgammaf (float); extern float __lgammaf (float);
extern float tgammaf (float); extern float __tgammaf (float);




extern float gammaf (float); extern float __gammaf (float);






extern float lgammaf_r (float, int *__signgamp); extern float __lgammaf_r (float, int *__signgamp);






extern float rintf (float __x); extern float __rintf (float __x);


extern float nextafterf (float __x, float __y) __attribute__ ((__const__)); extern float __nextafterf (float __x, float __y) __attribute__ ((__const__));





extern float remainderf (float __x, float __y); extern float __remainderf (float __x, float __y);



extern float scalbf (float __x, float __n); extern float __scalbf (float __x, float __n);



extern float scalbnf (float __x, int __n); extern float __scalbnf (float __x, int __n);


extern int ilogbf (float __x); extern int __ilogbf (float __x);
# 83 "/usr/include/math.h" 2 3
# 99 "/usr/include/math.h" 3
# 1 "/usr/include/bits/mathcalls.h" 1 3
# 54 "/usr/include/bits/mathcalls.h" 3
extern long double acosl (long double __x); extern long double __acosl (long double __x);

extern long double asinl (long double __x); extern long double __asinl (long double __x);

extern long double atanl (long double __x); extern long double __atanl (long double __x);

extern long double atan2l (long double __y, long double __x); extern long double __atan2l (long double __y, long double __x);


extern long double cosl (long double __x); extern long double __cosl (long double __x);

extern long double sinl (long double __x); extern long double __sinl (long double __x);

extern long double tanl (long double __x); extern long double __tanl (long double __x);
# 78 "/usr/include/bits/mathcalls.h" 3
extern long double coshl (long double __x); extern long double __coshl (long double __x);

extern long double sinhl (long double __x); extern long double __sinhl (long double __x);

extern long double tanhl (long double __x); extern long double __tanhl (long double __x);



extern long double acoshl (long double __x); extern long double __acoshl (long double __x);

extern long double asinhl (long double __x); extern long double __asinhl (long double __x);

extern long double atanhl (long double __x); extern long double __atanhl (long double __x);





extern long double expl (long double __x); extern long double __expl (long double __x);
# 106 "/usr/include/bits/mathcalls.h" 3
extern long double frexpl (long double __x, int *__exponent); extern long double __frexpl (long double __x, int *__exponent);


extern long double ldexpl (long double __x, int __exponent); extern long double __ldexpl (long double __x, int __exponent);


extern long double logl (long double __x); extern long double __logl (long double __x);


extern long double log10l (long double __x); extern long double __log10l (long double __x);


extern long double modfl (long double __x, long double *__iptr); extern long double __modfl (long double __x, long double *__iptr);



extern long double expm1l (long double __x); extern long double __expm1l (long double __x);


extern long double log1pl (long double __x); extern long double __log1pl (long double __x);


extern long double logbl (long double __x); extern long double __logbl (long double __x);
# 143 "/usr/include/bits/mathcalls.h" 3
extern long double powl (long double __x, long double __y); extern long double __powl (long double __x, long double __y);


extern long double sqrtl (long double __x); extern long double __sqrtl (long double __x);



extern long double hypotl (long double __x, long double __y); extern long double __hypotl (long double __x, long double __y);




extern long double cbrtl (long double __x); extern long double __cbrtl (long double __x);






extern long double ceill (long double __x); extern long double __ceill (long double __x);


extern long double fabsl (long double __x) __attribute__ ((__const__)); extern long double __fabsl (long double __x) __attribute__ ((__const__));


extern long double floorl (long double __x); extern long double __floorl (long double __x);


extern long double fmodl (long double __x, long double __y); extern long double __fmodl (long double __x, long double __y);




extern int __isinfl (long double __value) __attribute__ ((__const__));




extern int isinfl (long double __value) __attribute__ ((__const__));


extern int finitel (long double __value) __attribute__ ((__const__)); extern int __finitel (long double __value) __attribute__ ((__const__));







extern long double infnanl (int __error) __attribute__ ((__const__)); extern long double __infnanl (int __error) __attribute__ ((__const__));


extern long double dreml (long double __x, long double __y); extern long double __dreml (long double __x, long double __y);



extern long double significandl (long double __x); extern long double __significandl (long double __x);




extern long double copysignl (long double __x, long double __y) __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) __attribute__ ((__const__));
# 215 "/usr/include/bits/mathcalls.h" 3
extern int isnanl (long double __value) __attribute__ ((__const__)); extern int __isnanl (long double __value) __attribute__ ((__const__));


extern long double j0l (long double); extern long double __j0l (long double);
extern long double j1l (long double); extern long double __j1l (long double);
extern long double jnl (int, long double); extern long double __jnl (int, long double);
extern long double y0l (long double); extern long double __y0l (long double);
extern long double y1l (long double); extern long double __y1l (long double);
extern long double ynl (int, long double); extern long double __ynl (int, long double);





extern long double erfl (long double); extern long double __erfl (long double);
extern long double erfcl (long double); extern long double __erfcl (long double);
extern long double lgammal (long double); extern long double __lgammal (long double);
extern long double tgammal (long double); extern long double __tgammal (long double);




extern long double gammal (long double); extern long double __gammal (long double);






extern long double lgammal_r (long double, int *__signgamp); extern long double __lgammal_r (long double, int *__signgamp);






extern long double rintl (long double __x); extern long double __rintl (long double __x);


extern long double nextafterl (long double __x, long double __y) __attribute__ ((__const__)); extern long double __nextafterl (long double __x, long double __y) __attribute__ ((__const__));





extern long double remainderl (long double __x, long double __y); extern long double __remainderl (long double __x, long double __y);



extern long double scalbl (long double __x, long double __n); extern long double __scalbl (long double __x, long double __n);



extern long double scalbnl (long double __x, int __n); extern long double __scalbnl (long double __x, int __n);


extern int ilogbl (long double __x); extern int __ilogbl (long double __x);
# 100 "/usr/include/math.h" 2 3
# 113 "/usr/include/math.h" 3
extern int signgam;
# 236 "/usr/include/math.h" 3
typedef enum
{
  _IEEE_ = -1,
  _SVID_,
  _XOPEN_,
  _POSIX_,
  _ISOC_
} _LIB_VERSION_TYPE;




extern _LIB_VERSION_TYPE _LIB_VERSION;
# 261 "/usr/include/math.h" 3
struct exception

  {
    int type;
    char *name;
    double arg1;
    double arg2;
    double retval;
  };




extern int matherr (struct exception *__exc) ;
# 289 "/usr/include/math.h" 3
# 1 "/usr/local/lib/gcc-lib/i586-pc-linux-gnu/3.0/include/float.h" 1 3
# 290 "/usr/include/math.h" 2 3
# 348 "/usr/include/math.h" 3
# 1 "/usr/include/bits/mathinline.h" 1 3
# 349 "/usr/include/math.h" 2 3
# 47 "libm.c" 2







typedef unsigned int uint32_t;
# 130 "libm.c"
int (isnanf)(float x)
{
  register int retval;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); retval=((sw&0x4500)==0x0100);};
  return retval;
}

int (isnan)(double x)
{
  register int retval;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); retval=((sw&0x4500)==0x0100);};
  return retval;
}

int (isnanl)(long double x)
{
  register int retval;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); retval=((sw&0x4500)==0x0100);};
  return retval;
}

int (isfinitef)(float x)
{
  register int retval;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); retval=((sw&0x4500)==0x0400)||((sw&0x4500)==0x4000);};
  return retval;
}

int (isfinite)(double x)
{
  register int retval;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); retval=((sw&0x4500)==0x0400)||((sw&0x4500)==0x4000);};
  return retval;
}

int (isfinitel)(long double x)
{
  register int retval;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); retval=((sw&0x4500)==0x0400)||((sw&0x4500)==0x4000);};
  return retval;
}

int (isnormalf)(float x)
{
  register int retval;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); retval=((sw&0x4500)==0x0400);};
  return retval;
}

int (isnormal)(double x)
{
  register int retval;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); retval=((sw&0x4500)==0x0400);};
  return retval;
}

int (isnormall)(long double x)
{
  register int retval;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); retval=((sw&0x4500)==0x0400);};
  return retval;
}

int (isinff)(float x)
{
  register int retval;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); retval=((sw&0x4500)==0x0500); if((sw&0x0200)) retval =- retval;};
  return retval;
}

int (isinf)(double x)
{
  register int retval;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); retval=((sw&0x4500)==0x0500); if((sw&0x0200)) retval =- retval;};
  return retval;
}

int (isinfl)(long double x)
{
  register int retval;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); retval=((sw&0x4500)==0x0500); if((sw&0x0200)) retval =- retval;};
  return retval;
}
# 230 "libm.c"
int (__fpclassifyf)(float x)
{
  register int sw, retval;
  const uint32_t *xp;
  xp = (const uint32_t *)&x;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x));
  if(((sw&0x4500)==0x0100)) retval = 0;
  else
  if(((sw&0x4500)==0x0500)) retval = 1;
  else
  if(((sw&0x4500)==0x4000)) retval = 2;
  else
  if((xp[0] & ~0x80000000UL) < 0x01000000UL) retval = 3;
  else
  retval = 4;
  return retval;
}

int (__fpclassify)(double x)
{
  register int sw, retval;
  const uint32_t *xp;
  xp = (const uint32_t *)&x;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x));
  if(((sw&0x4500)==0x0100)) retval = 0;
  else
  if(((sw&0x4500)==0x0500)) retval = 1;
  else
  if(((sw&0x4500)==0x4000)) retval = 2;
  else
  if(!xp[1]) retval = 3;
  else
  retval = 4;
  return retval;
}

int (__fpclassifyl)(long double x)
{
  register int sw, retval;
  const uint32_t *xp;
  xp = (const uint32_t *)&x;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x));
  if(((sw&0x4500)==0x0100)) retval = 0;
  else
  if(((sw&0x4500)==0x0500)) retval = 1;
  else
  if(((sw&0x4500)==0x4000)) retval = 2;
  else
  if(!xp[2] && (xp[1] & 0x80000000UL) == 0) retval = 3;
  else
  retval = 4;
  return retval;
}
# 302 "libm.c"
int (isgreaterf)(float x, float y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x45, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(y),"t"(x) :"st","st(1)");
  return retval;
}

int (isgreater)(double x, double y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x45, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(y),"t"(x) :"st","st(1)");
  return retval;
}

int (isgreaterl)(long double x, long double y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x45, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(y),"t"(x) :"st","st(1)");
  return retval;
}
# 341 "libm.c"
int (isgreaterequalf)(float x, float y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x05, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(y),"t"(x) :"st","st(1)");
  return retval;
}

int (isgreaterequal)(double x, double y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x05, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(y),"t"(x) :"st","st(1)");
  return retval;
}

int (isgreaterequall)(long double x, long double y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x05, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(y),"t"(x) :"st","st(1)");
  return retval;
}
# 380 "libm.c"
int (islessf)(float x, float y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x45, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(x),"t"(y) :"st","st(1)");
  return retval;
}

int (isless)(double x, double y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x45, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(x),"t"(y) :"st","st(1)");
  return retval;
}

int (islessl)(long double x, long double y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x45, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(x),"t"(y) :"st","st(1)");
  return retval;
}
# 419 "libm.c"
int (islessequalf)(float x, float y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x05, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(x),"t"(y) :"st","st(1)");
  return retval;
}

int (islessequal)(double x, double y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x05, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(x),"t"(y) :"st","st(1)");
  return retval;
}

int (islessequall)(long double x, long double y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x05, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(x),"t"(y) :"st","st(1)");
  return retval;
}
# 458 "libm.c"
int (islessgreaterf)(float x, float y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x44, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(y),"t"(x) :"st","st(1)");
  return retval;
}

int (islessgreater)(double x, double y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x44, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(y),"t"(x) :"st","st(1)");
  return retval;
}

int (islessgreaterl)(long double x, long double y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	testb	$0x44, %h0\n" "	setz	%b0" :"=a"(retval) :"u"(y),"t"(x) :"st","st(1)");
  return retval;
}
# 497 "libm.c"
int (isunorderedf)(float x, float y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	sahf\n" "	setp	%b0" :"=a"(retval) :"u"(y),"t"(x) :"st","st(1)");
  return retval;
}

int (isunordered)(double x, double y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	sahf\n" "	setp	%b0" :"=a"(retval) :"u"(y),"t"(x) :"st","st(1)");
  return retval;
}

int (isunorderedl)(long double x, long double y)
{
  register int retval;
  asm("fucompp\n" "	fnstsw\n" "	sahf\n" "	setp	%b0" :"=a"(retval) :"u"(y),"t"(x) :"st","st(1)");
  return retval;
}
# 532 "libm.c"
float (acosf)(float x)
{
  register float ret;
  asm("fld	%0\n" "	fmul	%0\n" "	fld1\n" "	fsubp\n" "	fsqrt\n" "	fxch	%%st(1)\n" "	fpatan" : "=t"(ret) : "0"(x) : "st(1)");
  return ret;
}

double (acos)(double x)
{
  register double ret;
  asm("fld	%0\n" "	fmul	%0\n" "	fld1\n" "	fsubp\n" "	fsqrt\n" "	fxch	%%st(1)\n" "	fpatan" : "=t"(ret) : "0"(x) : "st(1)");
  return ret;
}

long double (acosl)(long double x)
{
  register long double ret;
  asm("fld	%0\n" "	fmul	%0\n" "	fld1\n" "	fsubp\n" "	fsqrt\n" "	fxch	%%st(1)\n" "	fpatan" : "=t"(ret) : "0"(x) : "st(1)");
  return ret;
}
# 566 "libm.c"
float (asinf)(float x)
{
  register float ret;
  asm("fld	%0\n" "	fmul	%0\n" "	fld1\n" "	fsubp\n" "	fsqrt\n" "	fpatan" : "=t"(ret) : "0"(x) : "st(1)");
  return ret;
}

double (asin)(double x)
{
  register double ret;
  asm("fld	%0\n" "	fmul	%0\n" "	fld1\n" "	fsubp\n" "	fsqrt\n" "	fpatan" : "=t"(ret) : "0"(x) : "st(1)");
  return ret;
}

long double (asinl)(long double x)
{
  register long double ret;
  asm("fld	%0\n" "	fmul	%0\n" "	fld1\n" "	fsubp\n" "	fsqrt\n" "	fpatan" : "=t"(ret) : "0"(x) : "st(1)");
  return ret;
}
# 594 "libm.c"
float (atan2f)(float y,float x)
{
  register float ret;
  asm("fpatan" : "=t"(ret): "u"(y), "0"(x) : "st(1)");
  return ret;
}

double (atan2)(double y,double x)
{
  register double ret;
  asm("fpatan" : "=t"(ret): "u"(y), "0"(x) : "st(1)");
  return ret;
}

long double (atan2l)(long double y,long double x)
{
  register long double ret;
  asm("fpatan" : "=t"(ret): "u"(y), "0"(x) : "st(1)");
  return ret;
}
# 642 "libm.c"
float (expf)(float x)
{
  register float ret;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) ret = 0.; else ret = x; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(ret): "0"(x): "st(1)", "st(2)");};
  return ret;
}

double (exp)(double x)
{
  register double ret;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) ret = 0.; else ret = x; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(ret): "0"(x): "st(1)", "st(2)");};
  return ret;
}

long double (expl)(long double x)
{
  register long double ret;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) ret = 0.; else ret = x; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(ret): "0"(x): "st(1)", "st(2)");};
  return ret;
}
# 692 "libm.c"
float (exp10f)(float x)
{
  register float ret;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) ret = 0.; else ret = x; } else asm("fldl2t\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale\n" "	ffree	%%st(1)\n": "=t"(ret): "0"(x): "st(2)");};
  return ret;
}

double (exp10)(double x)
{
  register double ret;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) ret = 0.; else ret = x; } else asm("fldl2t\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale\n" "	ffree	%%st(1)\n": "=t"(ret): "0"(x): "st(2)");};
  return ret;
}

long double (exp10l)(long double x)
{
  register long double ret;
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) ret = 0.; else ret = x; } else asm("fldl2t\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale\n" "	ffree	%%st(1)\n": "=t"(ret): "0"(x): "st(2)");};
  return ret;
}
# 724 "libm.c"
float (fmodf)(float x,float y)
{
  register float ret;
  asm("1:\n" "	fprem\n" "	fstsw	%%ax\n" "	sahf\n" "	jp  	1b\n": "=t"(ret): "u"(y), "0"(x): "eax","st");
  return ret;
}

double (fmod)(double x,double y)
{
  register double ret;
  asm("1:\n" "	fprem\n" "	fstsw	%%ax\n" "	sahf\n" "	jp  	1b\n": "=t"(ret): "u"(y), "0"(x): "eax","st");
  return ret;
}

long double (fmodl)(long double x,long double y)
{
  long double ret;
  asm("1:\n" "	fprem\n" "	fstsw	%%ax\n" "	sahf\n" "	jp  	1b\n": "=t"(ret): "u"(y), "0"(x): "eax","st");
  return ret;
}
# 787 "libm.c"
float (hypotf)(float x,float y)
{
  register float retval;
  asm ( "fxam\n" "	fnstsw\n" "	movb	%%ah, %%ch\n" "	fxch	%2\n" "	fld	%0\n" "	fstp	%0\n" "	fxam\n" "	fnstsw\n" "	movb	%%ah, %%al\n" "	orb	%%ch, %%ah\n" "	sahf\n" "	jc	1f\n" "	fxch	%2\n" "	fmul	%0\n" "	fxch\n" "	fmul	%0\n" "	faddp\n" "	fsqrt\n" "	jmp	2f\n""1:	andb	$0x45, %%al\n" "	cmpb	$5, %%al\n" "	je	3f\n" "	andb	$0x45, %%ch\n" "	cmpb	$5, %%ch\n" "	jne	4f\n" "	fxch\n""3:	fstp	%2\n" "	fabs\n" "	jmp	2f\n""4:	testb	$1, %%al\n" "	jnz	5f\n" "	fxch\n""5:	fstp	%2\n""2:": "=t"(retval) : "0"(x),"u"(y) : "eax","ecx","st(1)");
  return retval;
}

double (hypot)(double x,double y)
{
  register double retval;
  asm ( "fxam\n" "	fnstsw\n" "	movb	%%ah, %%ch\n" "	fxch	%2\n" "	fld	%0\n" "	fstp	%0\n" "	fxam\n" "	fnstsw\n" "	movb	%%ah, %%al\n" "	orb	%%ch, %%ah\n" "	sahf\n" "	jc	1f\n" "	fxch	%2\n" "	fmul	%0\n" "	fxch\n" "	fmul	%0\n" "	faddp\n" "	fsqrt\n" "	jmp	2f\n""1:	andb	$0x45, %%al\n" "	cmpb	$5, %%al\n" "	je	3f\n" "	andb	$0x45, %%ch\n" "	cmpb	$5, %%ch\n" "	jne	4f\n" "	fxch\n""3:	fstp	%2\n" "	fabs\n" "	jmp	2f\n""4:	testb	$1, %%al\n" "	jnz	5f\n" "	fxch\n""5:	fstp	%2\n""2:": "=t"(retval) : "0"(x),"u"(y) : "eax","ecx","st(1)");
  return retval;
}

long double (hypotl)(long double x,long double y)
{
  register long double retval;
  asm ( "fxam\n" "	fnstsw\n" "	movb	%%ah, %%ch\n" "	fxch	%2\n" "	fld	%0\n" "	fstp	%0\n" "	fxam\n" "	fnstsw\n" "	movb	%%ah, %%al\n" "	orb	%%ch, %%ah\n" "	sahf\n" "	jc	1f\n" "	fxch	%2\n" "	fmul	%0\n" "	fxch\n" "	fmul	%0\n" "	faddp\n" "	fsqrt\n" "	jmp	2f\n""1:	andb	$0x45, %%al\n" "	cmpb	$5, %%al\n" "	je	3f\n" "	andb	$0x45, %%ch\n" "	cmpb	$5, %%ch\n" "	jne	4f\n" "	fxch\n""3:	fstp	%2\n" "	fabs\n" "	jmp	2f\n""4:	testb	$1, %%al\n" "	jnz	5f\n" "	fxch\n""5:	fstp	%2\n""2:": "=t"(retval) : "0"(x),"u"(y) : "eax","ecx","st(1)");
  return retval;
}
# 820 "libm.c"
float (logf)(float x)
{
  register float ret;
  asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(ret): "0"(x));
  return ret;
}

double (log)(double x)
{
  register double ret;
  asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(ret): "0"(x));
  return ret;
}

long double (logl)(long double x)
{
  register long double ret;
  asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(ret): "0"(x));
  return ret;
}
# 848 "libm.c"
float (log10f)(float x)
{
  register float ret;
  asm("fldlg2\n" "	fxch\n" "	fyl2x": "=t"(ret): "0"(x));
  return ret;
}

double (log10)(double x)
{
  register double ret;
  asm("fldlg2\n" "	fxch\n" "	fyl2x": "=t"(ret): "0"(x));
  return ret;
}

long double (log10l)(long double x)
{
  register long double ret;
  asm("fldlg2\n" "	fxch\n" "	fyl2x": "=t"(ret): "0"(x));
  return ret;
}
# 880 "libm.c"
float (remainderf)(float x,float y)
{
  register float ret;
  asm("\n1:	fprem1\n" "	fstsw	%%ax\n" "	sahf\n" "	jp	1b\n" "	fstp	%2" : "=t"(ret) : "0"(x), "u"(y): "st(1)","eax");
  return ret;
}

double (remainder)(double x,double y)
{
  register double ret;
  asm("\n1:	fprem1\n" "	fstsw	%%ax\n" "	sahf\n" "	jp	1b\n" "	fstp	%2" : "=t"(ret) : "0"(x), "u"(y): "st(1)","eax");
  return ret;
}

long double (remainderl)(long double x,long double y)
{
  register long double ret;
  asm("\n1:	fprem1\n" "	fstsw	%%ax\n" "	sahf\n" "	jp	1b\n" "	fstp	%2" : "=t"(ret) : "0"(x), "u"(y): "st(1)","eax");
  return ret;
}

float (dremf)(float x,float y)
{
  register float ret;
  asm("\n1:	fprem1\n" "	fstsw	%%ax\n" "	sahf\n" "	jp	1b\n" "	fstp	%2" : "=t"(ret) : "0"(x), "u"(y): "st(1)","eax");
  return ret;
}

double (drem)(double x,double y)
{
  register double ret;
  asm("\n1:	fprem1\n" "	fstsw	%%ax\n" "	sahf\n" "	jp	1b\n" "	fstp	%2" : "=t"(ret) : "0"(x), "u"(y): "st(1)","eax");
  return ret;
}

long double (dreml)(long double x,long double y)
{
  register long double ret;
  asm("\n1:	fprem1\n" "	fstsw	%%ax\n" "	sahf\n" "	jp	1b\n" "	fstp	%2" : "=t"(ret) : "0"(x), "u"(y): "st(1)","eax");
  return ret;
}






float (sqrtf)(float x)
{
  register float ret;
  asm("fsqrt" : "=t"(ret): "0"(x));
  return ret;
}

double (sqrt)(double x)
{
  register double ret;
  asm("fsqrt" : "=t"(ret): "0"(x));
  return ret;
}

long double (sqrtl)(long double x)
{
  register long double ret;
  asm("fsqrt" : "=t"(ret): "0"(x));
  return ret;
}







float (atanf)(float x)
{
  register float ret;
  asm("fld1\n" "	fpatan": "=t"(ret): "0"(x));
  return ret;
}

double (atan)(double x)
{
  register double ret;
  asm("fld1\n" "	fpatan": "=t"(ret): "0"(x));
  return ret;
}

long double (atanl)(long double x)
{
  register long double ret;
  asm("fld1\n" "	fpatan": "=t"(ret): "0"(x));
  return ret;
}
# 986 "libm.c"
float (ceilf)(float val)
{
  unsigned int cw;
  unsigned int new_cw;
  register float ret;
  asm("fstcw	%0":"=m"(cw)::"memory"); new_cw = (cw | 0x800) & 0xfbff; asm("fldcw	%3\n" "	frndint\n" "	fldcw	%2" :"=t"(ret) :"0"(val), "m"(cw), "m"(new_cw));
  return ret;
}

double (ceil)(double val)
{
  unsigned int cw;
  unsigned int new_cw;
  register double ret;
  asm("fstcw	%0":"=m"(cw)::"memory"); new_cw = (cw | 0x800) & 0xfbff; asm("fldcw	%3\n" "	frndint\n" "	fldcw	%2" :"=t"(ret) :"0"(val), "m"(cw), "m"(new_cw));
  return ret;
}

long double (ceill)(long double val)
{
  unsigned int cw;
  unsigned int new_cw;
  register long double ret;
  asm("fstcw	%0":"=m"(cw)::"memory"); new_cw = (cw | 0x800) & 0xfbff; asm("fldcw	%3\n" "	frndint\n" "	fldcw	%2" :"=t"(ret) :"0"(val), "m"(cw), "m"(new_cw));
  return ret;
}

float (copysignf)(float x,float y)
{
  register int sw;
  uint32_t *xp;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(y));
  xp = (uint32_t *)&x;
  if((sw&0x0200)) xp[0] |= 0x80000000UL;
  else xp[0] &= ~0x80000000UL;
  return x;
}

double (copysign)(double x,double y)
{
  register int sw;
  uint32_t *xp;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(y));
  xp = (uint32_t *)&x;
  if((sw&0x0200)) xp[1] |= 0x80000000UL;
  else xp[1] &= ~0x80000000UL;
  return x;
}

long double (copysignl)(long double x,long double y)
{
  register int sw;
  uint32_t *xp;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(y));
  xp = (uint32_t *)&x;
  if((sw&0x0200)) xp[2] |= 0x8000UL;
  else xp[2] &= ~0x8000UL;
  return x;
}
# 1065 "libm.c"
float (cosf)(float x)
{
  register float ret;
  asm("fcos\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	je	2f\n" "	fldpi\n" "	fadd	%0\n" "	fxch	%%st(1)\n""1:	fprem1\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	jne	1b\n" "	fstp	%%st(1)\n" "	""fcos\n""2:": "=t"(ret) : "0"(x): "st(1)","eax");
  return ret;
}

double (cos)(double x)
{
  register double ret;
  asm("fcos\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	je	2f\n" "	fldpi\n" "	fadd	%0\n" "	fxch	%%st(1)\n""1:	fprem1\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	jne	1b\n" "	fstp	%%st(1)\n" "	""fcos\n""2:": "=t"(ret) : "0"(x): "st(1)","eax");
  return ret;
}

long double (cosl)(long double x)
{
  register long double ret;
  asm("fcos\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	je	2f\n" "	fldpi\n" "	fadd	%0\n" "	fxch	%%st(1)\n""1:	fprem1\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	jne	1b\n" "	fstp	%%st(1)\n" "	""fcos\n""2:": "=t"(ret) : "0"(x): "st(1)","eax");
  return ret;
}

float (sinf)(float x)
{
  register float ret;
  asm("fsin\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	je	2f\n" "	fldpi\n" "	fadd	%0\n" "	fxch	%%st(1)\n""1:	fprem1\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	jne	1b\n" "	fstp	%%st(1)\n" "	""fsin\n""2:": "=t"(ret) : "0"(x): "st(1)","eax");
  return ret;
}

double (sin)(double x)
{
  register double ret;
  asm("fsin\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	je	2f\n" "	fldpi\n" "	fadd	%0\n" "	fxch	%%st(1)\n""1:	fprem1\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	jne	1b\n" "	fstp	%%st(1)\n" "	""fsin\n""2:": "=t"(ret) : "0"(x): "st(1)","eax");
  return ret;
}

long double (sinl)(long double x)
{
  register long double ret;
  asm("fsin\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	je	2f\n" "	fldpi\n" "	fadd	%0\n" "	fxch	%%st(1)\n""1:	fprem1\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	jne	1b\n" "	fstp	%%st(1)\n" "	""fsin\n""2:": "=t"(ret) : "0"(x): "st(1)","eax");
  return ret;
}
# 1127 "libm.c"
float (tanf)(float x)
{
  register float ret;
  asm("fptan\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	je	2f\n" "	fldpi\n" "	fadd	%0\n" "	fxch	%%st(1)\n""1:	fprem1\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	jne	1b\n" "	fstp	%%st(1)\n" "	fptan\n""2:\n" "ffreep""	%0": "=t"(ret) : "0"(x): "st(1)","eax");
  return ret;
}

double (tan)(double x)
{
  register double ret;
  asm("fptan\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	je	2f\n" "	fldpi\n" "	fadd	%0\n" "	fxch	%%st(1)\n""1:	fprem1\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	jne	1b\n" "	fstp	%%st(1)\n" "	fptan\n""2:\n" "ffreep""	%0": "=t"(ret) : "0"(x): "st(1)","eax");
  return ret;
}

long double (tanl)(long double x)
{
  register long double ret;
  asm("fptan\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	je	2f\n" "	fldpi\n" "	fadd	%0\n" "	fxch	%%st(1)\n""1:	fprem1\n" "	fnstsw	%%ax\n" "	testb	$0x04, %%ah\n" "	jne	1b\n" "	fstp	%%st(1)\n" "	fptan\n""2:\n" "ffreep""	%0": "=t"(ret) : "0"(x): "st(1)","eax");
  return ret;
}
# 1174 "libm.c"
float (exp2f)(float x)
{
  register float ret;
  asm("fxam\n" "	fstsw	%%ax\n" "	movb	$0x45, %%dh\n" "	andb	%%ah, %%dh\n" "	cmpb	$0x05, %%dh\n" "	je	1f\n" "	fld	%0\n" "	frndint\n" "	fsubr	%0, %%st(1)\n" "	fxch\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale\n" "	fstp	%%st(1)\n" "	jmp	2f\n""1:	testl	$0x200, %%eax\n" "	jz	2f\n" "ffreep""	%0\n" "	fldz\n""2:": "=t"(ret): "0"(x): "eax","edx");
  return ret;
}

double (exp2)(double x)
{
  register double ret;
  asm("fxam\n" "	fstsw	%%ax\n" "	movb	$0x45, %%dh\n" "	andb	%%ah, %%dh\n" "	cmpb	$0x05, %%dh\n" "	je	1f\n" "	fld	%0\n" "	frndint\n" "	fsubr	%0, %%st(1)\n" "	fxch\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale\n" "	fstp	%%st(1)\n" "	jmp	2f\n""1:	testl	$0x200, %%eax\n" "	jz	2f\n" "ffreep""	%0\n" "	fldz\n""2:": "=t"(ret): "0"(x): "eax","edx");
  return ret;
}

long double (exp2l)(long double x)
{
  register long double ret;
  asm("fxam\n" "	fstsw	%%ax\n" "	movb	$0x45, %%dh\n" "	andb	%%ah, %%dh\n" "	cmpb	$0x05, %%dh\n" "	je	1f\n" "	fld	%0\n" "	frndint\n" "	fsubr	%0, %%st(1)\n" "	fxch\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale\n" "	fstp	%%st(1)\n" "	jmp	2f\n""1:	testl	$0x200, %%eax\n" "	jz	2f\n" "ffreep""	%0\n" "	fldz\n""2:": "=t"(ret): "0"(x): "eax","edx");
  return ret;
}
# 1202 "libm.c"
float (fdimf)(float x, float y)
{
  register float ret;
  asm("fsubp	%2\n" "	fabs": "=t"(ret): "0"(y), "u"(x));
  return ret;
}

double (fdim)(double x, double y)
{
  register double ret;
  asm("fsubp	%2\n" "	fabs": "=t"(ret): "0"(y), "u"(x));
  return ret;
}

long double (fdiml)(long double x, long double y)
{
  register long double ret;
  asm("fsubp	%2\n" "	fabs": "=t"(ret): "0"(y), "u"(x));
  return ret;
}
# 1235 "libm.c"
float (floorf)(float val)
{
  unsigned int cw;
  unsigned int new_cw;
  register float ret;
  asm("fstcw	%0":"=m"(cw)::"memory"); new_cw = (cw | 0x400) & 0xf7ff; asm("fldcw	%3\n" "	frndint\n" "	fldcw	%2" :"=t"(ret) :"0"(val), "m"(cw), "m"(new_cw));
  return ret;
}

double (floor)(double val)
{
  unsigned int cw;
  unsigned int new_cw;
  register double ret;
  asm("fstcw	%0":"=m"(cw)::"memory"); new_cw = (cw | 0x400) & 0xf7ff; asm("fldcw	%3\n" "	frndint\n" "	fldcw	%2" :"=t"(ret) :"0"(val), "m"(cw), "m"(new_cw));
  return ret;
}

long double (floorl)(long double val)
{
  unsigned int cw;
  unsigned int new_cw;
  register long double ret;
  asm("fstcw	%0":"=m"(cw)::"memory"); new_cw = (cw | 0x400) & 0xf7ff; asm("fldcw	%3\n" "	frndint\n" "	fldcw	%2" :"=t"(ret) :"0"(val), "m"(cw), "m"(new_cw));
  return ret;
}



float (fmaf)(float x,float y,float z)
{
  return ((x*y)+z);
}

double (fma)(double x,double y,double z)
{
  return ((x*y)+z);
}

long double (fmal)(long double x,long double y,long double z)
{
  return ((x*y)+z);
}
# 1311 "libm.c"
float (fmaxf)(float x, float y)
{
  register float ret;
  asm("fxam\n" "	fnstsw\n" "	andb	$0x45, %%ah\n" "	fxch	%2\n" "	cmpb	$0x01, %%ah\n" "	je	1f\n" "	fucom	%2\n" "	fnstsw\n" "	sahf\n" "	jnc	1f\n" "	fxch	%2\n""1:	fstp	%2": "=t"(ret): "0"(y), "u"(x): "eax","st(1)");
  return ret;
}

double (fmax)(double x, double y)
{
  register double ret;
  asm("fxam\n" "	fnstsw\n" "	andb	$0x45, %%ah\n" "	fxch	%2\n" "	cmpb	$0x01, %%ah\n" "	je	1f\n" "	fucom	%2\n" "	fnstsw\n" "	sahf\n" "	jnc	1f\n" "	fxch	%2\n""1:	fstp	%2": "=t"(ret): "0"(y), "u"(x): "eax","st(1)");
  return ret;
}

long double (fmaxl)(long double x, long double y)
{
  register long double ret;
  asm("fxam\n" "	fnstsw\n" "	andb	$0x45, %%ah\n" "	fxch	%2\n" "	cmpb	$0x01, %%ah\n" "	je	1f\n" "	fucom	%2\n" "	fnstsw\n" "	sahf\n" "	jnc	1f\n" "	fxch	%2\n""1:	fstp	%2": "=t"(ret): "0"(y), "u"(x): "eax","st(1)");
  return ret;
}
# 1362 "libm.c"
float (fminf)(float x, float y)
{
  register float ret;
  asm("fxam\n" "	fnstsw\n" "	andb	$0x45, %%ah\n" "	cmpb	$0x01, %%ah\n" "	je	1f\n" "	fucom	%2\n" "	fnstsw\n" "	sahf\n" "	jc	2f\n""1:	fxch	%2\n""2:	fstp	%2\n": "=t"(ret): "0"(y), "u"(x): "eax","st(1)");
  return ret;
}

double (fmin)(double x, double y)
{
  register double ret;
  asm("fxam\n" "	fnstsw\n" "	andb	$0x45, %%ah\n" "	cmpb	$0x01, %%ah\n" "	je	1f\n" "	fucom	%2\n" "	fnstsw\n" "	sahf\n" "	jc	2f\n""1:	fxch	%2\n""2:	fstp	%2\n": "=t"(ret): "0"(y), "u"(x): "eax","st(1)");
  return ret;
}

long double (fminl)(long double x, long double y)
{
  register long double ret;
  asm("fxam\n" "	fnstsw\n" "	andb	$0x45, %%ah\n" "	cmpb	$0x01, %%ah\n" "	je	1f\n" "	fucom	%2\n" "	fnstsw\n" "	sahf\n" "	jc	2f\n""1:	fxch	%2\n""2:	fstp	%2\n": "=t"(ret): "0"(y), "u"(x): "eax","st(1)");
  return ret;
}
# 1412 "libm.c"
float (frexpf)(float x, int *eptr)
{
  register float retval;
  { register long double minus_one; asm("fld1\n" "	fchs": "=t"(minus_one)); *eptr = 0; asm("ftst\n" "	fstsw	%%ax\n" "	andb	$0x41, %%ah\n" "	xorb	$0x40, %%ah\n" "	jz	1f\n" "	fxtract\n" "	fxch	%2\n" "	fistpl	(%3)\n" "	fscale\n" "	incl	(%3)\n""1:	fstp	%2": "=t"(retval): "0"(x), "u"(minus_one), "r"(eptr): "eax","memory","st(1)");};
  return retval;
}

double (frexp)(double x, int *eptr)
{
  register double retval;
  { register long double minus_one; asm("fld1\n" "	fchs": "=t"(minus_one)); *eptr = 0; asm("ftst\n" "	fstsw	%%ax\n" "	andb	$0x41, %%ah\n" "	xorb	$0x40, %%ah\n" "	jz	1f\n" "	fxtract\n" "	fxch	%2\n" "	fistpl	(%3)\n" "	fscale\n" "	incl	(%3)\n""1:	fstp	%2": "=t"(retval): "0"(x), "u"(minus_one), "r"(eptr): "eax","memory","st(1)");};
  return retval;
}

long double (frexpl)(long double x, int *eptr)
{
  register long double retval;
  { register long double minus_one; asm("fld1\n" "	fchs": "=t"(minus_one)); *eptr = 0; asm("ftst\n" "	fstsw	%%ax\n" "	andb	$0x41, %%ah\n" "	xorb	$0x40, %%ah\n" "	jz	1f\n" "	fxtract\n" "	fxch	%2\n" "	fistpl	(%3)\n" "	fscale\n" "	incl	(%3)\n""1:	fstp	%2": "=t"(retval): "0"(x), "u"(minus_one), "r"(eptr): "eax","memory","st(1)");};
  return retval;
}
# 1441 "libm.c"
int (ilogbf)(float x)
{
  int ret;
  asm("fxtract\n" "	fstp	%1\n" "	fistpl	%0\n" "	fwait" : "=m"(ret): "t"(x));
  return ret;
}

int (ilogb)(double x)
{
  int ret;
  asm("fxtract\n" "	fstp	%1\n" "	fistpl	%0\n" "	fwait" : "=m"(ret): "t"(x));
  return ret;
}

int (ilogbl)(long double x)
{
  int ret;
  asm("fxtract\n" "	fstp	%1\n" "	fistpl	%0\n" "	fwait" : "=m"(ret): "t"(x));
  return ret;
}
# 1469 "libm.c"
long long int (llrintf)(float x)
{
  long long int ret;
  asm("fistpll	%0\n" "	fwait" : "=m"(ret): "t"(x) : "st");
  return ret;
}

long long int (llrint)(double x)
{
  long long int ret;
  asm("fistpll	%0\n" "	fwait" : "=m"(ret): "t"(x) : "st");
  return ret;
}

long long int (llrintl)(long double x)
{
  long long int ret;
  asm("fistpll	%0\n" "	fwait" : "=m"(ret): "t"(x) : "st");
  return ret;
}
# 1509 "libm.c"
float (log1pf)(float x)
{
  register float retval;
  asm("fldln2\n" "	fxch\n" "	fld1\n" "	faddp %%st(1)\n" "	fyl2x": "=t"(retval): "0"(x));
  return retval;
}

double (log1p)(double x)
{
  register double retval;
  asm("fldln2\n" "	fxch\n" "	fld1\n" "	faddp %%st(1)\n" "	fyl2x": "=t"(retval): "0"(x));
  return retval;
}

long double (log1pl)(long double x)
{
  register long double retval;
  asm("fldln2\n" "	fxch\n" "	fld1\n" "	faddp %%st(1)\n" "	fyl2x": "=t"(retval): "0"(x));
  return retval;
}
# 1537 "libm.c"
float (log2f)(float x)
{
  register float retval;
  asm("fld1\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"(x));
  return retval;
}

double (log2)(double x)
{
  register double retval;
  asm("fld1\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"(x));
  return retval;
}

long double (log2l)(long double x)
{
  register long double retval;
  asm("fld1\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"(x));
  return retval;
}
# 1565 "libm.c"
float (logbf)(float x)
{
  register float ret;
  asm("fxtract\n" "	fstp	%0": "=t"(ret) : "0"(x) : "st(1)");
  return ret;
}

double (logb)(double x)
{
  register double ret;
  asm("fxtract\n" "	fstp	%0": "=t"(ret) : "0"(x) : "st(1)");
  return ret;
}

long double (logbl)(long double x)
{
  register long double ret;
  asm("fxtract\n" "	fstp	%0": "=t"(ret) : "0"(x) : "st(1)");
  return ret;
}
# 1593 "libm.c"
long int (lrintf)(float x)
{
  long int ret;
  asm("fistpl	%0\n" "	fwait" : "=m"(ret): "t"(x) : "st");
  return ret;
}

long int (lrint)(double x)
{
  long int ret;
  asm("fistpl	%0\n" "	fwait" : "=m"(ret): "t"(x) : "st");
  return ret;
}

long int (lrintl)(long double x)
{
  long int ret;
  asm("fistpl	%0\n" "	fwait" : "=m"(ret): "t"(x) : "st");
  return ret;
}






float (rintf)(float x)
{
  register float ret;
  asm("frndint": "=t"(ret) : "0"(x));
  return ret;
}

double (rint)(double x)
{
  register double ret;
  asm("frndint": "=t"(ret) : "0"(x));
  return ret;
}

long double (rintl)(long double x)
{
  register long double ret;
  asm("frndint": "=t"(ret) : "0"(x));
  return ret;
}
# 1647 "libm.c"
float (scalbnf)(float x,int n)
{
  register float ret;
  asm("fscale" : "=t"(ret) : "0"(x), "u"((float)n): "st");
  return ret;
}

double (scalbn)(double x,int n)
{
  register double ret;
  asm("fscale" : "=t"(ret) : "0"(x), "u"((double)n): "st");
  return ret;
}

long double (scalbnl)(long double x,int n)
{
  register long double ret;
  asm("fscale" : "=t"(ret) : "0"(x), "u"((long double)n): "st");
  return ret;
}

float (ldexpf)(float x,int n)
{
  register float ret;
  asm("fscale" : "=t"(ret) : "0"(x), "u"((float)n): "st");
  return ret;
}

double (ldexp)(double x,int n)
{
  register double ret;
  asm("fscale" : "=t"(ret) : "0"(x), "u"((double)n): "st");
  return ret;
}

long double (ldexpl)(long double x,int n)
{
  register long double ret;
  asm("fscale" : "=t"(ret) : "0"(x), "u"((long double)n): "st");
  return ret;
}







float (significandf)(float x)
{
  float ret;
  asm("fxtract\n" "	fstp	%%st(1)": "=t"(ret) : "0"(x));
  return ret;
}

double (significand)(double x)
{
  double ret;
  asm("fxtract\n" "	fstp	%%st(1)": "=t"(ret) : "0"(x));
  return ret;
}

long double (significandl)(long double x)
{
  long double ret;
  asm("fxtract\n" "	fstp	%%st(1)": "=t"(ret) : "0"(x));
  return ret;
}
# 1724 "libm.c"
void (sincosf)(float x,float *sinptr,float *cosptr)
{
  { register long double sv,cv; asm("fsincos":"=t"(cv),"=u"(sv):"0"(x):"st","st(1)"); *cosptr = cv; *sinptr = sv;};
}

void (sincos)(double x,double *sinptr,double *cosptr)
{
  { register long double sv,cv; asm("fsincos":"=t"(cv),"=u"(sv):"0"(x):"st","st(1)"); *cosptr = cv; *sinptr = sv;};
}

void (sincosl)(long double x,long double *sinptr,long double *cosptr)
{
  { register long double sv,cv; asm("fsincos":"=t"(cv),"=u"(sv):"0"(x):"st","st(1)"); *cosptr = cv; *sinptr = sv;};
}
# 1750 "libm.c"
float (truncf)(float x)
{
  register float ret;
  int i1,i2;
  asm("fstcw	%0":"=m"(i1)::"memory"); i2 = i1 | 0xc00; asm("fldcw	%3\n" "	frndint\n" "	fldcw	%2": "=t"(ret) : "0"(x), "m"(i1), "m"(i2));
  return ret;
}

double (trunc)(double x)
{
  register double ret;
  int i1,i2;
  asm("fstcw	%0":"=m"(i1)::"memory"); i2 = i1 | 0xc00; asm("fldcw	%3\n" "	frndint\n" "	fldcw	%2": "=t"(ret) : "0"(x), "m"(i1), "m"(i2));
  return ret;
}

long double (truncl)(long double x)
{
  register long double ret;
  int i1,i2;
  asm("fstcw	%0":"=m"(i1)::"memory"); i2 = i1 | 0xc00; asm("fldcw	%3\n" "	frndint\n" "	fldcw	%2": "=t"(ret) : "0"(x), "m"(i1), "m"(i2));
  return ret;
}






float (fabsf)(float x)
{
  register float ret;
  asm("fabs" : "=t"(ret): "0"(x));
  return ret;
}

double (fabs)(double x)
{
  register double ret;
  asm("fabs" : "=t"(ret): "0"(x));
  return ret;
}

long double (fabsl)(long double x)
{
  register long double ret;
  asm("fabs" : "=t"(ret): "0"(x));
  return ret;
}

static void (frac)( void )
{
  short cw1,cw2;
   asm("fnstcw	%0\n"
      "	fwait"
      :"=m"(cw1));
  cw2 = (cw1 & 0xf3ff) | 0x0400;
   asm("fldcw	%1\n"
      "	fld	%%st\n"
      "	frndint\n"
      "	fldcw	%0\n"
      "	fxch	%%st(1)\n"
      "	fsub	%%st(1), %%st"
      ::"m"(cw1),"m"(cw2):"memory");
}






static void (Lpow2)( void )
{
   asm("call	frac\n"
      "	f2xm1\n"
      "	fld1\n"
      "	faddp	%%st(1)\n"
      "	fscale\n"
      "	fstp	%%st(1)\n"
      ::: "memory");
}
# 1900 "libm.c"
float (powf)(float x, float y)
{
  register float retval;
  register int sw;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x));
  if(((sw&0x4500)==0x0500) || x == 1) return x;
  else
  if(x == (float)10.) { asm("fldl2t\n" "	fmulp\n" "call	frac\n" "	f2xm1\n" "	fld1\n" "	faddp	%1, %%st(1)\n" "	fscale\n" "	fstp	%%st(1)\n" :"=t"(retval) :"0"(y));}
  else { int yint; asm("ftst\n" "	fnstsw	%%ax\n" "	sahf\n" "	jbe	1f\n" "	fyl2x\n" "call	Lpow2\n" "	jmp	6f\n""1:	jb	4f\n" "	fstp	%0\n" "	ftst\n" "	fnstsw	%%ax\n" "	sahf\n" "	ja	3f\n" "	jb	2f\n" "	fstp	%0\n" "	fld1\n" "	fchs\n""2:	fsqrt\n" "	jmp     6f\n""3:	fstp	%0\n" "	fldz\n" "	jmp	6f\n""4:	fabs\n" "	fxch	%2\n" "call	frac\n" "	ftst\n" "	fnstsw	%%ax\n" "	fstp	%0\n" "	sahf\n" "	je	5f\n" "	fstp	%0\n" "	fchs\n" "	jmp	2b\n""5:	fistl	%3\n" "	fxch	%2\n" "	fyl2x\n" "call	Lpow2\n" "	andl	$1, %3\n" "	jz	6f\n" "	fchs\n""6:" :"=t"(retval) :"0"(x),"u"(y),"m"(yint) :"eax","memory","st(1)");}
  return retval;
}

double (pow)(double x, double y)
{
  register double retval;
  register int sw;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x));
  if(((sw&0x4500)==0x0500) || x == 1) return x;
  else
  if(x == (double)10.) { asm("fldl2t\n" "	fmulp\n" "call	frac\n" "	f2xm1\n" "	fld1\n" "	faddp	%1, %%st(1)\n" "	fscale\n" "	fstp	%%st(1)\n" :"=t"(retval) :"0"(y));}
  else { int yint; asm("ftst\n" "	fnstsw	%%ax\n" "	sahf\n" "	jbe	1f\n" "	fyl2x\n" "call	Lpow2\n" "	jmp	6f\n""1:	jb	4f\n" "	fstp	%0\n" "	ftst\n" "	fnstsw	%%ax\n" "	sahf\n" "	ja	3f\n" "	jb	2f\n" "	fstp	%0\n" "	fld1\n" "	fchs\n""2:	fsqrt\n" "	jmp     6f\n""3:	fstp	%0\n" "	fldz\n" "	jmp	6f\n""4:	fabs\n" "	fxch	%2\n" "call	frac\n" "	ftst\n" "	fnstsw	%%ax\n" "	fstp	%0\n" "	sahf\n" "	je	5f\n" "	fstp	%0\n" "	fchs\n" "	jmp	2b\n""5:	fistl	%3\n" "	fxch	%2\n" "	fyl2x\n" "call	Lpow2\n" "	andl	$1, %3\n" "	jz	6f\n" "	fchs\n""6:" :"=t"(retval) :"0"(x),"u"(y),"m"(yint) :"eax","memory","st(1)");}
  return retval;
}

long double (powl)(long double x, long double y)
{
  register long double retval;
  register int sw;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x));
  if(((sw&0x4500)==0x0500) || x == 1) return x;
  else
  if(x == (long double)10.) { asm("fldl2t\n" "	fmulp\n" "call	frac\n" "	f2xm1\n" "	fld1\n" "	faddp	%1, %%st(1)\n" "	fscale\n" "	fstp	%%st(1)\n" :"=t"(retval) :"0"(y));}
  else { int yint; asm("ftst\n" "	fnstsw	%%ax\n" "	sahf\n" "	jbe	1f\n" "	fyl2x\n" "call	Lpow2\n" "	jmp	6f\n""1:	jb	4f\n" "	fstp	%0\n" "	ftst\n" "	fnstsw	%%ax\n" "	sahf\n" "	ja	3f\n" "	jb	2f\n" "	fstp	%0\n" "	fld1\n" "	fchs\n""2:	fsqrt\n" "	jmp     6f\n""3:	fstp	%0\n" "	fldz\n" "	jmp	6f\n""4:	fabs\n" "	fxch	%2\n" "call	frac\n" "	ftst\n" "	fnstsw	%%ax\n" "	fstp	%0\n" "	sahf\n" "	je	5f\n" "	fstp	%0\n" "	fchs\n" "	jmp	2b\n""5:	fistl	%3\n" "	fxch	%2\n" "	fyl2x\n" "call	Lpow2\n" "	andl	$1, %3\n" "	jz	6f\n" "	fchs\n""6:" :"=t"(retval) :"0"(x),"u"(y),"m"(yint) :"eax","memory","st(1)");}
  return retval;
}

float (pow10f)(float y)
{
  register float retval;
  register int sw;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(y));
  if(((sw&0x4500)==0x0500)) return y;
  else
  { asm("fldl2t\n" "	fmulp\n" "call	frac\n" "	f2xm1\n" "	fld1\n" "	faddp	%1, %%st(1)\n" "	fscale\n" "	fstp	%%st(1)\n" :"=t"(retval) :"0"(y));}
  return retval;
}

double (pow10)(double y)
{
  register double retval;
  register int sw;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(y));
  if(((sw&0x4500)==0x0500)) return y;
  else
  { asm("fldl2t\n" "	fmulp\n" "call	frac\n" "	f2xm1\n" "	fld1\n" "	faddp	%1, %%st(1)\n" "	fscale\n" "	fstp	%%st(1)\n" :"=t"(retval) :"0"(y));}
  return retval;
}

long double (pow10l)(long double y)
{
  register long double retval;
  register int sw;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(y));
  if(((sw&0x4500)==0x0500)) return y;
  else
  { asm("fldl2t\n" "	fmulp\n" "call	frac\n" "	f2xm1\n" "	fld1\n" "	faddp	%1, %%st(1)\n" "	fscale\n" "	fstp	%%st(1)\n" :"=t"(retval) :"0"(y));}
  return retval;
}





float (cbrtf)(float x)
{
  register int sw;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x));
  if(((sw&0x4500)==0x0500)) return x;
  else
  if (x >= 0)
    return powf (x, 1.0 / 3.0);
  else
    return -powf (-x, 1.0 / 3.0);
}

double (cbrt)(double x)
{
  register int sw;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x));
  if(((sw&0x4500)==0x0500)) return x;
  else
  if (x >= 0)
    return pow (x, 1.0 / 3.0);
  else
    return -pow (-x, 1.0 / 3.0);
}

long double (cbrtl)(long double x)
{
  register int sw;
  asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x));
  if(((sw&0x4500)==0x0500)) return x;
  else
  if (x >= 0)
    return powl (x, 1.0 / 3.0);
  else
    return -powl (-x, 1.0 / 3.0);
}

float (acoshf)(float x)
{

  float retval;
  asm("fsqrt" : "=t"(retval): "0"(x*x-1));
  asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"(x + retval));
  return retval;
}

double (acosh)(double x)
{

  double retval;
  asm("fsqrt" : "=t"(retval): "0"(x*x-1));
  asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"(x + retval));
  return retval;
}

long double (acoshl)(long double x)
{

  long double retval;
  asm("fsqrt" : "=t"(retval): "0"(x*x-1));
  asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"(x + retval));
  return retval;
}

float (asinhf)(float x)
{

  float retval;
  asm("fsqrt" : "=t"(retval): "0"(x*x+1));
  if(x>0) asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"(x + retval));
  else
  {
    asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"(retval-x));
    retval = -retval;
  }
  return retval;
}

double (asinh)(double x)
{

  double retval;
  asm("fsqrt" : "=t"(retval): "0"(x*x+1));
  if(x>0) asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"(x + retval));
  else
  {
    asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"(retval-x));
    retval = -retval;
  }
  return retval;
}

long double (asinhl)(long double x)
{

  long double retval;
  asm("fsqrt" : "=t"(retval): "0"(x*x+1));
  if(x>0) asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"(x + retval));
  else
  {
    asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"(retval-x));
    retval = -retval;
  }
  return retval;
}

float (atanhf)(float x)
{

  float retval;
  asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"((1+x)/(1-x)));
  return retval/2.;
}

double (atanh)(double x)
{

  double retval;
  asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"((1+x)/(1-x)));
  return retval/2.;
}

long double (atanhl)(long double x)
{

  long double retval;
  asm("fldln2\n" "	fxch\n" "	fyl2x": "=t"(retval): "0"((1+x)/(1-x)));
  return retval/2.;
}

float (coshf)(float x)
{
  float retval;
  asm("fabs" : "=t"(retval): "0"(x));
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(retval)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) retval = 0.; else retval = retval; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(retval): "0"(retval): "st(1)", "st(2)");};
  return (retval + 1.0/retval) / 2.0;
}

double (cosh)(double x)
{
  double retval;
  asm("fabs" : "=t"(retval): "0"(x));
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(retval)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) retval = 0.; else retval = retval; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(retval): "0"(retval): "st(1)", "st(2)");};
  return (retval + 1.0/retval) / 2.0;
}

long double (coshl)(long double x)
{
  long double retval;
  asm("fabs" : "=t"(retval): "0"(x));
  { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(retval)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) retval = 0.; else retval = retval; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(retval): "0"(retval): "st(1)", "st(2)");};
  return (retval + 1.0/retval) / 2.0;
}

float (sinhf)(float x)
{
 if(x >= 0.0)
 {
   float epos;
   { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) epos = 0.; else epos = x; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(epos): "0"(x): "st(1)", "st(2)");};
   return (epos - 1.0/epos) / 2.0;
 }
 else
 {
   float eneg;
   { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(-x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) eneg = 0.; else eneg = -x; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(eneg): "0"(-x): "st(1)", "st(2)");};
   return (1.0/eneg - eneg) / 2.0;
 }
}

double (sinh)(double x)
{
 if(x >= 0.0)
 {
   double epos;
   { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) epos = 0.; else epos = x; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(epos): "0"(x): "st(1)", "st(2)");};
   return (epos - 1.0/epos) / 2.0;
 }
 else
 {
   double eneg;
   { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(-x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) eneg = 0.; else eneg = -x; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(eneg): "0"(-x): "st(1)", "st(2)");};
   return (1.0/eneg - eneg) / 2.0;
 }
}

long double (sinhl)(long double x)
{
 if(x >= 0.0)
 {
   long double epos;
   { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) epos = 0.; else epos = x; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(epos): "0"(x): "st(1)", "st(2)");};
   return (epos - 1.0/epos) / 2.0;
 }
 else
 {
   long double eneg;
   { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(-x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) eneg = 0.; else eneg = -x; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(eneg): "0"(-x): "st(1)", "st(2)");};
   return (1.0/eneg - eneg) / 2.0;
 }
}

float (tanhf)(float x)
{
  if (x > 50)
    return 1;
  else if (x < -50)
    return -1;
  else
  {
    float ebig;
    float esmall;
    { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) ebig = 0.; else ebig = x; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(ebig): "0"(x): "st(1)", "st(2)");};
    esmall = 1./ebig;
    return (ebig - esmall) / (ebig + esmall);
  }
}

double (tanh)(double x)
{
  if (x > 50)
    return 1;
  else if (x < -50)
    return -1;
  else
  {
    double ebig;
    double esmall;
    { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) ebig = 0.; else ebig = x; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(ebig): "0"(x): "st(1)", "st(2)");};
    esmall = 1./ebig;
    return (ebig - esmall) / (ebig + esmall);
  }
}

long double (tanhl)(long double x)
{
  if (x > 50)
    return 1;
  else if (x < -50)
    return -1;
  else
  {
    long double ebig;
    long double esmall;
    { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); if(((sw&0x4500)==0x0500)) { if((sw&0x0200)) ebig = 0.; else ebig = x; } else asm("fldl2e\n" "	fxch	%%st(1)\n" "	fmulp\n" "	fst	%%st(1)\n" "	frndint\n" "	fst	%%st(2)\n" "	fsubrp\n" "	f2xm1\n" "	fld1\n" "	faddp\n" "	fscale": "=t"(ebig): "0"(x): "st(1)", "st(2)");};
    esmall = 1./ebig;
    return (ebig - esmall) / (ebig + esmall);
  }
}
# 2236 "libm.c"
float (nearbyintf)(float x)
{
  register float retval;
  int new_sw,org_sw;
  asm("fnstcw	%0\n": "=m"(org_sw)); new_sw = org_sw & (~0x20); asm( "	fldcw	%2\n" "	frndint\n" "	fnclex\n" "	fldcw	%3": "=t"(retval): "0"(x), "m"(new_sw), "m"(org_sw));
  return retval;
}

double (nearbyint)(double x)
{
  register double retval;
  int new_sw,org_sw;
  asm("fnstcw	%0\n": "=m"(org_sw)); new_sw = org_sw & (~0x20); asm( "	fldcw	%2\n" "	frndint\n" "	fnclex\n" "	fldcw	%3": "=t"(retval): "0"(x), "m"(new_sw), "m"(org_sw));
  return retval;
}

long double (nearbyintl)(long double x)
{
  register long double retval;
  int new_sw,org_sw;
  asm("fnstcw	%0\n": "=m"(org_sw)); new_sw = org_sw & (~0x20); asm( "	fldcw	%2\n" "	frndint\n" "	fnclex\n" "	fldcw	%3": "=t"(retval): "0"(x), "m"(new_sw), "m"(org_sw));
  return retval;
}
# 2295 "libm.c"
float (expm1f)(float x)
{
  register float retval;
  asm("fxam\n" "	fstsw	%%ax\n" "	movb	$0x45, %%ch\n" "	andb	%%ah, %%ch\n" "	cmpb	$0x40, %%ch\n" "	je	3f\n" "	cmpb	$0x05, %%ch\n" "	je	2f\n" "	fldl2e\n" "	fmulp\n" "	fld	%1\n" "	frndint\n" "	fsubr	%1,  %%st(1)\n" "	fxch\n" "	f2xm1\n" "	fscale\n" "	fxch\n" "	fld1\n" "	fscale\n" "	fld1\n" "	fsubp	%1, %%st(1)\n" "	fstp	%%st(1)\n" "	fsubrp	%1, %%st(1)\n" "	jmp	3f\n""2:	testb	$0x02, %%ah\n" "	jz	3f\n" "ffreep""	%1\n" "	fld1\n" "	fchs\n""3:": "=t"(retval): "0"(x): "eax","ecx","st(1)");
  return retval;
}

double (expm1)(double x)
{
  register double retval;
  asm("fxam\n" "	fstsw	%%ax\n" "	movb	$0x45, %%ch\n" "	andb	%%ah, %%ch\n" "	cmpb	$0x40, %%ch\n" "	je	3f\n" "	cmpb	$0x05, %%ch\n" "	je	2f\n" "	fldl2e\n" "	fmulp\n" "	fld	%1\n" "	frndint\n" "	fsubr	%1,  %%st(1)\n" "	fxch\n" "	f2xm1\n" "	fscale\n" "	fxch\n" "	fld1\n" "	fscale\n" "	fld1\n" "	fsubp	%1, %%st(1)\n" "	fstp	%%st(1)\n" "	fsubrp	%1, %%st(1)\n" "	jmp	3f\n""2:	testb	$0x02, %%ah\n" "	jz	3f\n" "ffreep""	%1\n" "	fld1\n" "	fchs\n""3:": "=t"(retval): "0"(x): "eax","ecx","st(1)");
  return retval;
}

long double (expm1l)(long double x)
{
  register long double retval;
  asm("fxam\n" "	fstsw	%%ax\n" "	movb	$0x45, %%ch\n" "	andb	%%ah, %%ch\n" "	cmpb	$0x40, %%ch\n" "	je	3f\n" "	cmpb	$0x05, %%ch\n" "	je	2f\n" "	fldl2e\n" "	fmulp\n" "	fld	%1\n" "	frndint\n" "	fsubr	%1,  %%st(1)\n" "	fxch\n" "	f2xm1\n" "	fscale\n" "	fxch\n" "	fld1\n" "	fscale\n" "	fld1\n" "	fsubp	%1, %%st(1)\n" "	fstp	%%st(1)\n" "	fsubrp	%1, %%st(1)\n" "	jmp	3f\n""2:	testb	$0x02, %%ah\n" "	jz	3f\n" "ffreep""	%1\n" "	fld1\n" "	fchs\n""3:": "=t"(retval): "0"(x): "eax","ecx","st(1)");
  return retval;
}
# 2340 "libm.c"
float (scalbf)(float x, float n)
{
  register float retval;
  { register int nx, nfn; { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); nx=((sw&0x4500)==0x0100);}; { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(n)); nfn=((sw&0x4500)==0x0100);}; if (nx||nfn) return x*n; { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); nx=((sw&0x4500)==0x0400)||((sw&0x4500)==0x4000);}; { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(n)); nfn=((sw&0x4500)==0x0400)||((sw&0x4500)==0x4000);}; if (!nfn) { if(n>0.0) return x*n; else if (x == 0) return x; else if (!nx) return (0./0.); else return x/(-n); } if (rint(n)!=n) return (0./0.); if ( n > 65000.0) return scalbn(x, 65000); if (-n > 65000.0) return scalbn(x,-65000); return scalbn(x,(int)n);};
  return retval;
}

double (scalb)(double x, double n)
{
  register double retval;
  { register int nx, nfn; { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); nx=((sw&0x4500)==0x0100);}; { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(n)); nfn=((sw&0x4500)==0x0100);}; if (nx||nfn) return x*n; { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); nx=((sw&0x4500)==0x0400)||((sw&0x4500)==0x4000);}; { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(n)); nfn=((sw&0x4500)==0x0400)||((sw&0x4500)==0x4000);}; if (!nfn) { if(n>0.0) return x*n; else if (x == 0) return x; else if (!nx) return (0./0.); else return x/(-n); } if (rint(n)!=n) return (0./0.); if ( n > 65000.0) return scalbn(x, 65000); if (-n > 65000.0) return scalbn(x,-65000); return scalbn(x,(int)n);};
  return retval;
}

long double (scalbl)(long double x, long double n)
{
  register long double retval;
  { register int nx, nfn; { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); nx=((sw&0x4500)==0x0100);}; { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(n)); nfn=((sw&0x4500)==0x0100);}; if (nx||nfn) return x*n; { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(x)); nx=((sw&0x4500)==0x0400)||((sw&0x4500)==0x4000);}; { register int sw; asm("fxam\n" "	fnstsw":"=a"(sw):"t"(n)); nfn=((sw&0x4500)==0x0400)||((sw&0x4500)==0x4000);}; if (!nfn) { if(n>0.0) return x*n; else if (x == 0) return x; else if (!nx) return (0./0.); else return x/(-n); } if (rint(n)!=n) return (0./0.); if ( n > 65000.0) return scalbn(x, 65000); if (-n > 65000.0) return scalbn(x,-65000); return scalbn(x,(int)n);};
  return retval;
}


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2002-09-30 15:46 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-09-30  8:46 c++/8098: gcc is crashing fojtik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).