fdlibm.c
上传用户:poi891205
上传日期:2013-07-15
资源大小:9745k
文件大小:18k
源码类别:

DVD

开发平台:

C/C++

  1. # 1 "fdlibm.h"
  2. #ifndef __IEEE_BIG_ENDIAN
  3. #ifndef __IEEE_LITTLE_ENDIAN
  4. #if defined(__arm__) || defined(__thumb__)
  5. /* ARM always has big-endian words.  Within those words the byte ordering
  6.    appears to be big or little endian.  Newlib doesn't seem to care about
  7.    the byte ordering within words.  */
  8. #define __IEEE_BIG_ENDIAN
  9. #endif
  10. #ifdef __hppa__
  11. #define __IEEE_BIG_ENDIAN
  12. #endif
  13. #ifdef __sparc__
  14. #define __IEEE_BIG_ENDIAN
  15. #endif
  16. //#if defined(__m68k__) || defined(__mc68000__)
  17. //#define __IEEE_BIG_ENDIAN
  18. //#endif
  19. #if defined (__H8300__) || defined (__H8300H__) || defined (__H8300S__)
  20. #define __IEEE_BIG_ENDIAN
  21. #define __SMALL_BITFIELDS
  22. #define _DOUBLE_IS_32BITS
  23. #endif
  24. #ifdef __H8500__
  25. #define __IEEE_BIG_ENDIAN
  26. #define __SMALL_BITFIELDS
  27. #define _DOUBLE_IS_32BITS
  28. #endif
  29. #ifdef __sh__
  30. #ifdef __LITTLE_ENDIAN__
  31. #define __IEEE_LITTLE_ENDIAN
  32. #else
  33. #define __IEEE_BIG_ENDIAN
  34. #endif
  35. #if defined(__SH3E__) || defined(__SH4_SINGLE_ONLY__)
  36. #define _DOUBLE_IS_32BITS
  37. #endif
  38. #endif
  39. #ifdef _AM29K
  40. #define __IEEE_BIG_ENDIAN
  41. #endif
  42. #ifdef __i386__
  43. #define __IEEE_LITTLE_ENDIAN
  44. #endif
  45. #ifdef __i960__
  46. #define __IEEE_LITTLE_ENDIAN
  47. #endif
  48. #ifdef __M32R__
  49. #define __IEEE_BIG_ENDIAN
  50. #endif
  51. #ifdef __MIPSEL__
  52. #define __IEEE_LITTLE_ENDIAN
  53. #endif
  54. #ifdef __MIPSEB__
  55. #define __IEEE_BIG_ENDIAN
  56. #endif
  57. /* necv70 was __IEEE_LITTLE_ENDIAN. */
  58. #ifdef __W65__
  59. #define __IEEE_LITTLE_ENDIAN
  60. #define __SMALL_BITFIELDS
  61. #define _DOUBLE_IS_32BITS
  62. #endif
  63. #if defined(__Z8001__) || defined(__Z8002__)
  64. #define __IEEE_BIG_ENDIAN
  65. #endif
  66. #ifdef __m88k__
  67. #define __IEEE_BIG_ENDIAN
  68. #endif
  69. #ifdef __mn10300__
  70. #define __IEEE_LITTLE_ENDIAN
  71. #endif
  72. #ifdef __mn10200__
  73. #define __IEEE_LITTLE_ENDIAN
  74. #define __SMALL_BITFIELDS
  75. #define _DOUBLE_IS_32BITS
  76. #endif
  77. #ifdef __v800
  78. #define __IEEE_LITTLE_ENDIAN
  79. #endif
  80. #ifdef __v850
  81. #define __IEEE_LITTLE_ENDIAN
  82. #endif
  83. #ifdef __D10V__
  84. #define __IEEE_BIG_ENDIAN
  85. #define _DOUBLE_IS_32BITS
  86. #define __SMALL_BITFIELDS
  87. #endif
  88. #ifdef __PPC__
  89. #if (defined(_BIG_ENDIAN) && _BIG_ENDIAN) || (defined(_AIX) && _AIX)
  90. #define __IEEE_BIG_ENDIAN
  91. #else
  92. #if (defined(_LITTLE_ENDIAN) && _LITTLE_ENDIAN) || (defined(__sun__) && __sun__) || (defined(_WIN32) && _WIN32)
  93. #define __IEEE_LITTLE_ENDIAN
  94. #endif
  95. #endif
  96. #endif
  97. #ifdef __arc__
  98. #ifdef __big_endian__
  99. #define __IEEE_BIG_ENDIAN
  100. #else
  101. #define __IEEE_LITTLE_ENDIAN
  102. #endif
  103. #endif
  104. #ifndef __IEEE_BIG_ENDIAN
  105. #ifndef __IEEE_LITTLE_ENDIAN
  106. #error Endianess not declared!!
  107. #endif /* not __IEEE_LITTLE_ENDIAN */
  108. #endif /* not __IEEE_BIG_ENDIAN */
  109. #endif /* not __IEEE_LITTLE_ENDIAN */
  110. #endif /* not __IEEE_BIG_ENDIAN */
  111.  
  112. # 1 "/home/potatooo/fcc/lib/gcc-lib/mips-ecoff/2.8.1/include/math.h" 1 3
  113.  
  114. # 1 "/home/potatooo/fcc/mips-ecoff/include/sys/reent.h" 1 3
  115.  
  116.  
  117. # 1 "/home/potatooo/fcc/lib/gcc-lib/mips-ecoff/2.8.1/include/_ansi.h" 1 3
  118.  
  119.  
  120. # 1 "/home/potatooo/fcc/mips-ecoff/include/sys/config.h" 1 3
  121.  
  122.  
  123. # 14 "/home/potatooo/fcc/mips-ecoff/include/sys/config.h" 3
  124. # 25 "/home/potatooo/fcc/mips-ecoff/include/sys/config.h" 3
  125.  
  126. # 44 "/home/potatooo/fcc/mips-ecoff/include/sys/config.h" 3
  127.  
  128. typedef int __int32_t;
  129. typedef unsigned int __uint32_t;
  130. # 15 "/home/potatooo/fcc/lib/gcc-lib/mips-ecoff/2.8.1/include/_ansi.h" 2 3
  131.  
  132.  
  133. # 61 "/home/potatooo/fcc/lib/gcc-lib/mips-ecoff/2.8.1/include/_ansi.h" 3
  134.  
  135. # 13 "/home/potatooo/fcc/mips-ecoff/include/sys/reent.h" 2 3
  136. struct _glue 
  137. {
  138.   struct _glue *_next;
  139.   int _niobs;
  140.   struct __sFILE *_iobs;
  141. };
  142. struct _Bigint 
  143. {
  144.   struct _Bigint *_next;
  145.   int _k, _maxwds, _sign, _wds;
  146.   unsigned long _x[1];
  147. };
  148.  
  149. struct _atexit {
  150. struct _atexit *_next;  
  151. int _ind;  
  152. void (*_fns[32 ])();  
  153. };
  154.  
  155. struct __sbuf {
  156. unsigned char *_base;
  157. int _size;
  158. };
  159.  
  160. typedef long _fpos_t;  
  161.  
  162.  
  163. struct __sFILE {
  164.   unsigned char *_p;  
  165.   int _r;  
  166.   int _w;  
  167.   short _flags;  
  168.   short _file;  
  169.   struct __sbuf _bf;  
  170.   int _lbfsize;  
  171.    
  172.   void *  _cookie;  
  173.   int  (*_read)   (void *  _cookie, char *_buf, int _n)  ;
  174.   int  (*_write)   (void *  _cookie, const char *_buf, int _n)  ;
  175.   _fpos_t  (*_seek)   (void *  _cookie, _fpos_t _offset, int _whence)  ;
  176.   int  (*_close)   (void *  _cookie)  ;
  177.    
  178.   struct __sbuf _ub;  
  179.   unsigned char *_up;  
  180.   int _ur;  
  181.    
  182.   unsigned char _ubuf[3];  
  183.   unsigned char _nbuf[1];  
  184.    
  185.   struct __sbuf _lb;  
  186.    
  187.   int _blksize;  
  188.   int _offset;  
  189.   struct _reent *_data;
  190. };
  191.  
  192. struct _reent
  193. {
  194.    
  195.   int _errno;
  196.    
  197.   struct __sFILE *_stdin, *_stdout, *_stderr;
  198.   int  _inc;  
  199.   char _emergency[25];
  200.  
  201.   int _current_category;  
  202.   const  char *_current_locale;
  203.   int __sdidinit;  
  204.   void  (*__cleanup)   (struct _reent *)  ;
  205.    
  206.   struct _Bigint *_result;
  207.   int _result_k;
  208.   struct _Bigint *_p5s;
  209.   struct _Bigint **_freelist;
  210.    
  211.   int _cvtlen;  
  212.   char *_cvtbuf;
  213.    
  214.   unsigned char * _nextf[30 ];
  215.   unsigned int _nmalloc[30 ];
  216.    
  217.   struct _atexit *_atexit;  
  218.   struct _atexit _atexit0;  
  219.    
  220.   void (**(_sig_func))();
  221.    
  222.   struct _glue __sglue;  
  223.   struct __sFILE __sf[3];  
  224. };
  225.  
  226. extern struct _reent *_impure_ptr  ;
  227. void _reclaim_reent  (struct _reent *)  ;
  228.  
  229. # 9 "/home/potatooo/fcc/lib/gcc-lib/mips-ecoff/2.8.1/include/math.h" 2 3
  230. # 1 "/home/potatooo/fcc/mips-ecoff/include/machine/ieeefp.h" 1 3
  231. # 44 "/home/potatooo/fcc/mips-ecoff/include/machine/ieeefp.h" 3
  232.  
  233. # 118 "/home/potatooo/fcc/mips-ecoff/include/machine/ieeefp.h" 3
  234. # 10 "/home/potatooo/fcc/lib/gcc-lib/mips-ecoff/2.8.1/include/math.h" 2 3
  235.  
  236. union __dmath
  237. {
  238.   __uint32_t i[2];
  239.   double d;
  240. };
  241. extern const union __dmath __infinity;
  242.  
  243. extern double atan  (double)  ;
  244. extern double cos  (double)  ;
  245. extern double sin  (double)  ;
  246. extern double tan  (double)  ;
  247. extern double tanh  (double)  ;
  248. extern double frexp  (double, int *)  ;
  249. extern double modf  (double, double *)  ;
  250. extern double ceil  (double)  ;
  251. extern double fabs  (double)  ;
  252. extern double floor  (double)  ;
  253.  
  254. extern double acos  (double)  ;
  255. extern double asin  (double)  ;
  256. extern double atan2  (double, double)  ;
  257. extern double cosh  (double)  ;
  258. extern double sinh  (double)  ;
  259. extern double exp  (double)  ;
  260. extern double ldexp  (double, int)  ;
  261. extern double log  (double)  ;
  262. extern double log10  (double)  ;
  263. extern double pow  (double, double)  ;
  264. extern double sqrt  (double)  ;
  265. extern double fmod  (double, double)  ;
  266.  
  267. extern double infinity  (void)  ;
  268. extern double nan  (void)  ;
  269. extern int isnan  (double)  ;
  270. extern int isinf  (double)  ;
  271. extern int finite  (double)  ;
  272. extern double copysign  (double, double)  ;
  273. extern int ilogb  (double)  ;
  274. extern double asinh  (double)  ;
  275. extern double cbrt  (double)  ;
  276. extern double nextafter  (double, double)  ;
  277. extern double rint  (double)  ;
  278. extern double scalbn  (double, int)  ;
  279. extern double log1p  (double)  ;
  280. extern double expm1  (double)  ;
  281. extern double acosh  (double)  ;
  282. extern double atanh  (double)  ;
  283. extern double remainder  (double, double)  ;
  284. extern double gamma  (double)  ;
  285. extern double gamma_r  (double, int *)  ;
  286. extern double lgamma  (double)  ;
  287. extern double lgamma_r  (double, int *)  ;
  288. extern double erf  (double)  ;
  289. extern double erfc  (double)  ;
  290. extern double y0  (double)  ;
  291. extern double y1  (double)  ;
  292. extern double yn  (int, double)  ;
  293. extern double j0  (double)  ;
  294. extern double j1  (double)  ;
  295. extern double jn  (int, double)  ;
  296. extern double hypot  (double, double)  ;
  297. extern double cabs();
  298. extern double drem  (double, double)  ;
  299.  
  300. extern float atanf  (float)  ;
  301. extern float cosf  (float)  ;
  302. extern float sinf  (float)  ;
  303. extern float tanf  (float)  ;
  304. extern float tanhf  (float)  ;
  305. extern float frexpf  (float, int *)  ;
  306. extern float modff  (float, float *)  ;
  307. extern float ceilf  (float)  ;
  308. extern float fabsf  (float)  ;
  309. extern float floorf  (float)  ;
  310. extern float acosf  (float)  ;
  311. extern float asinf  (float)  ;
  312. extern float atan2f  (float, float)  ;
  313. extern float coshf  (float)  ;
  314. extern float sinhf  (float)  ;
  315. extern float expf  (float)  ;
  316. extern float ldexpf  (float, int)  ;
  317. extern float logf  (float)  ;
  318. extern float log10f  (float)  ;
  319. extern float powf  (float, float)  ;
  320. extern float sqrtf  (float)  ;
  321. extern float fmodf  (float, float)  ;
  322.  
  323. extern float infinityf  (void)  ;
  324. extern float nanf  (void)  ;
  325. extern int isnanf  (float)  ;
  326. extern int isinff  (float)  ;
  327. extern int finitef  (float)  ;
  328. extern float copysignf  (float, float)  ;
  329. extern int ilogbf  (float)  ;
  330. extern float asinhf  (float)  ;
  331. extern float cbrtf  (float)  ;
  332. extern float nextafterf  (float, float)  ;
  333. extern float rintf  (float)  ;
  334. extern float scalbnf  (float, int)  ;
  335. extern float log1pf  (float)  ;
  336. extern float expm1f  (float)  ;
  337. extern float acoshf  (float)  ;
  338. extern float atanhf  (float)  ;
  339. extern float remainderf  (float, float)  ;
  340. extern float gammaf  (float)  ;
  341. extern float gammaf_r  (float, int *)  ;
  342. extern float lgammaf  (float)  ;
  343. extern float lgammaf_r  (float, int *)  ;
  344. extern float erff  (float)  ;
  345. extern float erfcf  (float)  ;
  346. extern float y0f  (float)  ;
  347. extern float y1f  (float)  ;
  348. extern float ynf  (int, float)  ;
  349. extern float j0f  (float)  ;
  350. extern float j1f  (float)  ;
  351. extern float jnf  (int, float)  ;
  352. extern float hypotf  (float, float)  ;
  353. extern float cabsf();
  354. extern float dremf  (float, float)  ;
  355.  
  356. extern int signgam;
  357. struct exception;
  358.  
  359. struct exception 
  360. {
  361.   int type;
  362.   char *name;
  363.   double arg1;
  364.   double arg2;
  365.   double retval;
  366.   int err;
  367. };
  368. # 233 "/home/potatooo/fcc/lib/gcc-lib/mips-ecoff/2.8.1/include/math.h" 3
  369. extern int matherr  (struct exception *e)  ;
  370.  
  371.  
  372.  
  373. enum __fdlibm_version
  374. {
  375.   __fdlibm_ieee = -1,
  376.   __fdlibm_svid,
  377.   __fdlibm_xopen,
  378.   __fdlibm_posix
  379. };
  380. extern enum __fdlibm_version  __fdlib_version ;
  381. # 15 "fdlibm.h" 2
  382. # 1 "/home/potatooo/fcc/mips-ecoff/include/machine/ieeefp.h" 1 3
  383. # 44 "/home/potatooo/fcc/mips-ecoff/include/machine/ieeefp.h" 3
  384.  
  385. # 118 "/home/potatooo/fcc/mips-ecoff/include/machine/ieeefp.h" 3
  386. # 16 "fdlibm.h" 2
  387.  
  388.  
  389.  
  390. extern double logb  (double)  ;
  391. extern double scalb  (double, double)  ;
  392. extern double significand  (double)  ;
  393.  
  394. extern double __ieee754_sqrt  (double)  ;
  395. extern double __ieee754_acos  (double)  ;
  396. extern double __ieee754_acosh  (double)  ;
  397. extern double __ieee754_log  (double)  ;
  398. extern double __ieee754_atanh  (double)  ;
  399. extern double __ieee754_asin  (double)  ;
  400. extern double __ieee754_atan2  (double,double)  ;
  401. extern double __ieee754_exp  (double)  ;
  402. extern double __ieee754_cosh  (double)  ;
  403. extern double __ieee754_fmod  (double,double)  ;
  404. extern double __ieee754_pow  (double,double)  ;
  405. extern double __ieee754_lgamma_r  (double,int *)  ;
  406. extern double __ieee754_gamma_r  (double,int *)  ;
  407. extern double __ieee754_log10  (double)  ;
  408. extern double __ieee754_sinh  (double)  ;
  409. extern double __ieee754_hypot  (double,double)  ;
  410. extern double __ieee754_j0  (double)  ;
  411. extern double __ieee754_j1  (double)  ;
  412. extern double __ieee754_y0  (double)  ;
  413. extern double __ieee754_y1  (double)  ;
  414. extern double __ieee754_jn  (int,double)  ;
  415. extern double __ieee754_yn  (int,double)  ;
  416. extern double __ieee754_remainder  (double,double)  ;
  417. extern __int32_t __ieee754_rem_pio2  (double,double*)  ;
  418. extern double __ieee754_scalb  (double,double)  ;
  419.  
  420. extern double __kernel_standard  (double,double,int)  ;
  421. extern double __kernel_sin  (double,double,int)  ;
  422. extern double __kernel_cos  (double,double)  ;
  423. extern double __kernel_tan  (double,double,int)  ;
  424. extern int    __kernel_rem_pio2  (double*,double*,int,int,int,const __int32_t*)  ;
  425.  
  426. extern float logbf  (float)  ;
  427. extern float scalbf  (float, float)  ;
  428. extern float significandf  (float)  ;
  429.  
  430. extern float __ieee754_sqrtf  (float)  ;
  431. extern float __ieee754_acosf  (float)  ;
  432. extern float __ieee754_acoshf  (float)  ;
  433. extern float __ieee754_logf  (float)  ;
  434. extern float __ieee754_atanhf  (float)  ;
  435. extern float __ieee754_asinf  (float)  ;
  436. extern float __ieee754_atan2f  (float,float)  ;
  437. extern float __ieee754_expf  (float)  ;
  438. extern float __ieee754_coshf  (float)  ;
  439. extern float __ieee754_fmodf  (float,float)  ;
  440. extern float __ieee754_powf  (float,float)  ;
  441. extern float __ieee754_lgammaf_r  (float,int *)  ;
  442. extern float __ieee754_gammaf_r  (float,int *)  ;
  443. extern float __ieee754_log10f  (float)  ;
  444. extern float __ieee754_sinhf  (float)  ;
  445. extern float __ieee754_hypotf  (float,float)  ;
  446. extern float __ieee754_j0f  (float)  ;
  447. extern float __ieee754_j1f  (float)  ;
  448. extern float __ieee754_y0f  (float)  ;
  449. extern float __ieee754_y1f  (float)  ;
  450. extern float __ieee754_jnf  (int,float)  ;
  451. extern float __ieee754_ynf  (int,float)  ;
  452. extern float __ieee754_remainderf  (float,float)  ;
  453. extern __int32_t __ieee754_rem_pio2f  (float,float*)  ;
  454. extern float __ieee754_scalbf  (float,float)  ;
  455.  
  456. extern float __kernel_sinf  (float,float,int)  ;
  457. extern float __kernel_cosf  (float,float)  ;
  458. extern float __kernel_tanf  (float,float,int)  ;
  459. extern int   __kernel_rem_pio2f  (float*,float*,int,int,int,const __int32_t*)  ;
  460.  
  461. #ifdef __IEEE_BIG_ENDIAN
  462. typedef union
  463. {
  464.   double value;
  465.   struct
  466.   {
  467.     __uint32_t msw;
  468.     __uint32_t lsw;
  469.   } parts;
  470. } ieee_double_shape_type;
  471. #endif
  472. #ifdef __IEEE_LITTLE_ENDIAN
  473. typedef union
  474. {
  475.   double value;
  476.   struct
  477.   {
  478.     __uint32_t lsw;
  479.     __uint32_t msw;
  480.   } parts;
  481. } ieee_double_shape_type;
  482. #endif
  483. /* Get two 32 bit ints from a double.  */
  484. #define EXTRACT_WORDS(ix0,ix1,d)                                
  485. do {                                                            
  486.   ieee_double_shape_type ew_u;                                  
  487.   ew_u.value = (d);                                             
  488.   (ix0) = ew_u.parts.msw;                                       
  489.   (ix1) = ew_u.parts.lsw;                                       
  490. } while (0)
  491. /* Get the more significant 32 bit int from a double.  */
  492. #define GET_HIGH_WORD(i,d)                                      
  493. do {                                                            
  494.   ieee_double_shape_type gh_u;                                  
  495.   gh_u.value = (d);                                             
  496.   (i) = gh_u.parts.msw;                                         
  497. } while (0)
  498. /* Get the less significant 32 bit int from a double.  */
  499. #define GET_LOW_WORD(i,d)                                       
  500. do {                                                            
  501.   ieee_double_shape_type gl_u;                                  
  502.   gl_u.value = (d);                                             
  503.   (i) = gl_u.parts.lsw;                                         
  504. } while (0)
  505. /* Set a double from two 32 bit ints.  */
  506. #define INSERT_WORDS(d,ix0,ix1)                                 
  507. do {                                                            
  508.   ieee_double_shape_type iw_u;                                  
  509.   iw_u.parts.msw = (ix0);                                       
  510.   iw_u.parts.lsw = (ix1);                                       
  511.   (d) = iw_u.value;                                             
  512. } while (0)
  513. /* Set the more significant 32 bits of a double from an int.  */
  514. #define SET_HIGH_WORD(d,v)                                      
  515. do {                                                            
  516.   ieee_double_shape_type sh_u;                                  
  517.   sh_u.value = (d);                                             
  518.   sh_u.parts.msw = (v);                                         
  519.   (d) = sh_u.value;                                             
  520. } while (0)
  521. /* Set the less significant 32 bits of a double from an int.  */
  522. #define SET_LOW_WORD(d,v)                                       
  523. do {                                                            
  524.   ieee_double_shape_type sl_u;                                  
  525.   sl_u.value = (d);                                             
  526.   sl_u.parts.lsw = (v);                                         
  527.   (d) = sl_u.value;                                             
  528. } while (0)
  529.  
  530. typedef union
  531. {
  532.   float value;
  533.   __uint32_t word;
  534. } ieee_float_shape_type;
  535.  
  536. #define GET_FLOAT_WORD(i,d)                                     
  537. do {                                                            
  538.   ieee_float_shape_type gf_u;                                   
  539.   gf_u.value = (d);                                             
  540.   (i) = gf_u.word;                                              
  541. } while (0)
  542. /* Set a float from a 32 bit int.  */
  543. #define SET_FLOAT_WORD(d,i)                                     
  544. do {                                                            
  545.   ieee_float_shape_type sf_u;                                   
  546.   sf_u.word = (i);                                              
  547.   (d) = sf_u.value;                                             
  548. } while (0)