⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mathinline.h

📁 它通过提供glibc兼容使得应用程序移植到较小的c 库时相当得容易. 它能够应用到带虚拟存储的Linux和uClinux上.在大多数带MMU部件的平台上为使它更加紧凑,它也能够编译成共享库.uClib
💻 H
📖 第 1 页 / 共 2 页
字号:
__MATH_INLINE void__sincosl (long double __x, long double *__sinx, long double *__cosx) __THROW{  __sincos_code;}# endif/* Optimized inline implementation, sometimes with reduced precision   and/or argument range.  */# define __expm1_code \  register long double __value;						      \  register long double __exponent;					      \  register long double __temp;						      \  __asm __volatile__							      \    ("fldl2e			# e^x - 1 = 2^(x * log2(e)) - 1\n\t"	      \     "fmul	%%st(1)		# x * log2(e)\n\t"			      \     "fst	%%st(1)\n\t"						      \     "frndint			# int(x * log2(e))\n\t"			      \     "fxch\n\t"								      \     "fsub	%%st(1)		# fract(x * log2(e))\n\t"		      \     "f2xm1			# 2^(fract(x * log2(e))) - 1\n\t"	      \     "fscale			# 2^(x * log2(e)) - 2^(int(x * log2(e)))\n\t" \     : "=t" (__value), "=u" (__exponent) : "0" (__x));			      \  __asm __volatile__							      \    ("fscale			# 2^int(x * log2(e))\n\t"		      \     : "=t" (__temp) : "0" (1.0), "u" (__exponent));			      \  __temp -= 1.0;							      \  return __temp + __value ? __temp + __value : __x__inline_mathcodeNP_ (long double, __expm1l, __x, __expm1_code)# define __exp_code \  register long double __value;						      \  register long double __exponent;					      \  __asm __volatile__							      \    ("fldl2e			# e^x = 2^(x * log2(e))\n\t"		      \     "fmul	%%st(1)		# x * log2(e)\n\t"			      \     "fst	%%st(1)\n\t"						      \     "frndint			# int(x * log2(e))\n\t"			      \     "fxch\n\t"								      \     "fsub	%%st(1)		# fract(x * log2(e))\n\t"		      \     "f2xm1			# 2^(fract(x * log2(e))) - 1\n\t"	      \     : "=t" (__value), "=u" (__exponent) : "0" (__x));			      \  __value += 1.0;							      \  __asm __volatile__							      \    ("fscale"								      \     : "=t" (__value) : "0" (__value), "u" (__exponent));		      \  return __value__inline_mathcodeNP (exp, __x, __exp_code)__inline_mathcodeNP_ (long double, __expl, __x, __exp_code)__inline_mathcodeNP (tan, __x, \  register long double __value;						      \  register long double __value2 __attribute__ ((__unused__));		      \  __asm __volatile__							      \    ("fptan"								      \     : "=t" (__value2), "=u" (__value) : "0" (__x));			      \  return __value)#endif /* __FAST_MATH__ */#define __atan2_code \  register long double __value;						      \  __asm __volatile__							      \    ("fpatan"								      \     : "=t" (__value) : "0" (__x), "u" (__y) : "st(1)");		      \  return __value__inline_mathcodeNP2 (atan2, __y, __x, __atan2_code)__inline_mathcodeNP2_ (long double, __atan2l, __y, __x, __atan2_code)__inline_mathcodeNP2 (fmod, __x, __y, \  register long double __value;						      \  __asm __volatile__							      \    ("1:	fprem\n\t"						      \     "fnstsw	%%ax\n\t"						      \     "sahf\n\t"								      \     "jp	1b"							      \     : "=t" (__value) : "0" (__x), "u" (__y) : "ax", "cc");		      \  return __value)__inline_mathopNP (sqrt, "fsqrt")__inline_mathopNP_ (long double, __sqrtl, "fsqrt")#if __GNUC_PREREQ (2, 8)__inline_mathcodeNP_ (double, fabs, __x, return __builtin_fabs (__x))__inline_mathcodeNP_ (float, fabsf, __x, return __builtin_fabsf (__x))__inline_mathcodeNP_ (long double, fabsl, __x, return __builtin_fabsl (__x))__inline_mathcodeNP_ (long double, __fabsl, __x, return __builtin_fabsl (__x))#else__inline_mathop (fabs, "fabs")__inline_mathop_ (long double, __fabsl, "fabs")#endif#ifdef __FAST_MATH__/* The argument range of this inline version is reduced.  */__inline_mathopNP (sin, "fsin")/* The argument range of this inline version is reduced.  */__inline_mathopNP (cos, "fcos")__inline_mathop_declNP (log, "fldln2; fxch; fyl2x", "0" (__x) : "st(1)")__inline_mathop_declNP (log10, "fldlg2; fxch; fyl2x", "0" (__x) : "st(1)")__inline_mathcodeNP (asin, __x, return __atan2l (__x, __sqrtl (1.0 - __x * __x)))__inline_mathcodeNP (acos, __x, return __atan2l (__sqrtl (1.0 - __x * __x), __x))#endif /* __FAST_MATH__ */__inline_mathop_declNP (atan, "fld1; fpatan", "0" (__x) : "st(1)")__inline_mathcode_ (long double, __sgn1l, __x, \  __extension__ union { long double __xld; unsigned int __xi[3]; } __n =      \    { __xld: __x };							      \  __n.__xi[2] = (__n.__xi[2] & 0x8000) | 0x3fff;			      \  __n.__xi[1] = 0x80000000;						      \  __n.__xi[0] = 0;							      \  return __n.__xld)#ifdef __FAST_MATH__/* The argument range of the inline version of sinhl is slightly reduced.  */__inline_mathcodeNP (sinh, __x, \  register long double __exm1 = __expm1l (__fabsl (__x));		      \  return 0.5 * (__exm1 / (__exm1 + 1.0) + __exm1) * __sgn1l (__x))__inline_mathcodeNP (cosh, __x, \  register long double __ex = __expl (__x);				      \  return 0.5 * (__ex + 1.0 / __ex))__inline_mathcodeNP (tanh, __x, \  register long double __exm1 = __expm1l (-__fabsl (__x + __x));	      \  return __exm1 / (__exm1 + 2.0) * __sgn1l (-__x))#endif__inline_mathcodeNP (floor, __x, \  register long double __value;						      \  __volatile unsigned short int __cw;					      \  __volatile unsigned short int __cwtmp;				      \  __asm __volatile ("fnstcw %0" : "=m" (__cw));				      \  __cwtmp = (__cw & 0xf3ff) | 0x0400; /* rounding down */		      \  __asm __volatile ("fldcw %0" : : "m" (__cwtmp));			      \  __asm __volatile ("frndint" : "=t" (__value) : "0" (__x));		      \  __asm __volatile ("fldcw %0" : : "m" (__cw));				      \  return __value)__inline_mathcodeNP (ceil, __x, \  register long double __value;						      \  __volatile unsigned short int __cw;					      \  __volatile unsigned short int __cwtmp;				      \  __asm __volatile ("fnstcw %0" : "=m" (__cw));				      \  __cwtmp = (__cw & 0xf3ff) | 0x0800; /* rounding up */			      \  __asm __volatile ("fldcw %0" : : "m" (__cwtmp));			      \  __asm __volatile ("frndint" : "=t" (__value) : "0" (__x));		      \  __asm __volatile ("fldcw %0" : : "m" (__cw));				      \  return __value)#define __ldexp_code \  register long double __value;						      \  __asm __volatile__							      \    ("fscale"								      \     : "=t" (__value) : "0" (__x), "u" ((long double) __y));		      \  return __value__MATH_INLINE doubleldexp (double __x, int __y) __THROW{  __ldexp_code;}/* Optimized versions for some non-standardized functions.  */#if defined __USE_ISOC99 || defined __USE_MISC# ifdef __FAST_MATH____inline_mathcodeNP (expm1, __x, __expm1_code)# endif/* We cannot rely on M_SQRT being defined.  So we do it for ourself   here.  */# define __M_SQRT2	1.41421356237309504880L	/* sqrt(2) */__inline_mathcodeNP (log1p, __x, \  register long double __value;						      \  if (__fabsl (__x) >= 1.0 - 0.5 * __M_SQRT2)				      \    __value = logl (1.0 + __x);						      \  else									      \    __asm __volatile__							      \      ("fldln2\n\t"							      \       "fxch\n\t"							      \       "fyl2xp1"							      \       : "=t" (__value) : "0" (__x) : "st(1)");				      \  return __value)/* The argument range of the inline version of asinhl is slightly reduced.  */__inline_mathcodeNP (asinh, __x, \  register long double  __y = __fabsl (__x);				      \  return (log1pl (__y * __y / (__sqrtl (__y * __y + 1.0) + 1.0) + __y)	      \	  * __sgn1l (__x)))__inline_mathcodeNP (acosh, __x, \  return logl (__x + __sqrtl (__x - 1.0) * __sqrtl (__x + 1.0)))__inline_mathcodeNP (atanh, __x, \  register long double __y = __fabsl (__x);				      \  return -0.5 * log1pl (-(__y + __y) / (1.0 + __y)) * __sgn1l (__x))/* The argument range of the inline version of hypotl is slightly reduced.  */__inline_mathcodeNP2 (hypot, __x, __y, return __sqrtl (__x * __x + __y * __y))__inline_mathcodeNP(logb, __x, \  register long double __value;						      \  register long double __junk;						      \  __asm __volatile__							      \    ("fxtract\n\t"							      \     : "=t" (__junk), "=u" (__value) : "0" (__x));			      \  return __value)#endif#ifdef __USE_ISOC99#ifdef __FAST_MATH____inline_mathop_declNP (log2, "fld1; fxch; fyl2x", "0" (__x) : "st(1)")#endif /* __FAST_MATH__ */__MATH_INLINE floatldexpf (float __x, int __y) __THROW{  __ldexp_code;}__MATH_INLINE long doubleldexpl (long double __x, int __y) __THROW{  __ldexp_code;}#ifdef __FAST_MATH____inline_mathcodeNP3 (fma, __x, __y, __z, return (__x * __y) + __z)__inline_mathopNP (rint, "frndint")#endif /* __FAST_MATH__ */#define __lrint_code \  long int __lrintres;							      \  __asm__ __volatile__							      \    ("fistpl %0"							      \     : "=m" (__lrintres) : "t" (__x) : "st");				      \  return __lrintres__MATH_INLINE long intlrintf (float __x) __THROW{  __lrint_code;}__MATH_INLINE long intlrint (double __x) __THROW{  __lrint_code;}__MATH_INLINE long intlrintl (long double __x) __THROW{  __lrint_code;}#undef __lrint_code#define __llrint_code \  long long int __llrintres;						      \  __asm__ __volatile__							      \    ("fistpll %0"							      \     : "=m" (__llrintres) : "t" (__x) : "st");				      \  return __llrintres__MATH_INLINE long long intllrintf (float __x) __THROW{  __llrint_code;}__MATH_INLINE long long intllrint (double __x) __THROW{  __llrint_code;}__MATH_INLINE long long intllrintl (long double __x) __THROW{  __llrint_code;}#undef __llrint_code#endif#ifdef __USE_MISC__inline_mathcodeNP2 (drem, __x, __y, \  register double __value;						      \  register int __clobbered;						      \  __asm __volatile__							      \    ("1:	fprem1\n\t"						      \     "fstsw	%%ax\n\t"						      \     "sahf\n\t"								      \     "jp	1b"							      \     : "=t" (__value), "=&a" (__clobbered) : "0" (__x), "u" (__y) : "cc");    \  return __value)/* This function is used in the `isfinite' macro.  */__MATH_INLINE int__finite (double __x) __THROW{  return (__extension__	  (((((union { double __d; int __i[2]; }) {__d: __x}).__i[1]	     | 0x800fffffu) + 1) >> 31));}/* Miscellaneous functions */#ifdef __FAST_MATH____inline_mathcode (__coshm1, __x, \  register long double __exm1 = __expm1l (__fabsl (__x));		      \  return 0.5 * (__exm1 / (__exm1 + 1.0)) * __exm1)__inline_mathcode (__acosh1p, __x, \  return log1pl (__x + __sqrtl (__x) * __sqrtl (__x + 2.0)))#endif /* __FAST_MATH__ */#endif /* __USE_MISC  *//* Undefine some of the large macros which are not used anymore.  */#undef __atan2_code#ifdef __FAST_MATH__# undef __expm1_code# undef __exp_code# undef __sincos_code#endif /* __FAST_MATH__ */#endif /* __NO_MATH_INLINES  *//* This code is used internally in the GNU libc.  */#ifdef __LIBC_INTERNAL_MATH_INLINES__inline_mathop (__ieee754_sqrt, "fsqrt")__inline_mathcode2 (__ieee754_atan2, __y, __x,		    register long double __value;		    __asm __volatile__ ("fpatan\n\t"					: "=t" (__value)					: "0" (__x), "u" (__y) : "st(1)");		    return __value;)#endif#endif /* __GNUC__  */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -