1 /* DO NOT EDIT THIS FILE. 2 3 It has been auto-edited by fixincludes from: 4 5 "/scratch/clm/2008q3-sde-lite/install/mips-sde-elf/usr/include/math.h" 6 7 This had to be done to correct non-standard usages in the 8 original, manufacturer supplied header file. */ 9 10 #ifndef _MATH_H_ 11 12 #define _MATH_H_ 13 14 /* Indicate that we honor AEABI portability if requested. */ 15 #if defined _AEABI_PORTABILITY_LEVEL && _AEABI_PORTABILITY_LEVEL != 0 && !defined _AEABI_PORTABLE 16 # define _AEABI_PORTABLE 17 #endif 18 19 #include <sys/reent.h> 20 #include <machine/ieeefp.h> 21 #include "_ansi.h" 22 23 _BEGIN_STD_C 24 25 union __dmath 26 { 27 __ULong i[2]; 28 double d; 29 }; 30 31 union __fmath 32 { 33 __ULong i[1]; 34 float f; 35 }; 36 37 union __ldmath 38 { 39 __ULong i[4]; 40 _LONG_DOUBLE ld; 41 }; 42 43 /* Natural log of 2 */ 44 #define _M_LOG2_E 0.693147180559945309417 45 46 #if defined(__GNUC__) && \ 47 ( (__GNUC__ >= 4) || \ 48 ( (__GNUC__ >= 3) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 3) ) ) 49 50 /* gcc >= 3.3 implicitly defines builtins for HUGE_VALx values. */ 51 52 # ifndef HUGE_VAL 53 # define HUGE_VAL (__builtin_huge_val()) 54 # endif 55 56 # ifndef HUGE_VALF 57 # define HUGE_VALF (__builtin_huge_valf()) 58 # endif 59 60 # ifndef HUGE_VALL 61 # define HUGE_VALL (__builtin_huge_vall()) 62 # endif 63 64 # ifndef INFINITY 65 # define INFINITY (__builtin_inff()) 66 # endif 67 68 # ifndef NAN 69 # define NAN (__builtin_nanf("")) 70 # endif 71 72 #else /* !gcc >= 3.3 */ 73 74 /* No builtins. Use floating-point unions instead. Declare as an array 75 without bounds so no matter what small data support a port and/or 76 library has, the reference will be via the general method for accessing 77 globals. */ 78 79 #ifndef HUGE_VAL 80 extern __IMPORT const union __dmath __infinity[]; 81 #define HUGE_VAL (__infinity[0].d) 82 #endif 83 84 #ifndef HUGE_VALF 85 extern __IMPORT const union __fmath __infinityf[]; 86 #define HUGE_VALF (__infinityf[0].f) 87 #endif 88 89 #ifndef HUGE_VALL 90 extern __IMPORT const union __ldmath __infinityld[]; 91 #define HUGE_VALL (__infinityld[0].ld) 92 #endif 93 94 #endif /* !gcc >= 3.3 */ 95 96 /* Reentrant ANSI C functions. */ 97 98 #ifndef __math_68881 99 extern double atan _PARAMS((double)); 100 extern double cos _PARAMS((double)); 101 extern double sin _PARAMS((double)); 102 extern double tan _PARAMS((double)); 103 extern double tanh _PARAMS((double)); 104 extern double frexp _PARAMS((double, int *)); 105 extern double modf _PARAMS((double, double *)); 106 extern double ceil _PARAMS((double)); 107 extern double fabs _PARAMS((double)); 108 extern double floor _PARAMS((double)); 109 #endif /* ! defined (__math_68881) */ 110 111 /* Non reentrant ANSI C functions. */ 112 113 #ifndef _REENT_ONLY 114 #ifndef __math_6881 115 extern double acos _PARAMS((double)); 116 extern double asin _PARAMS((double)); 117 extern double atan2 _PARAMS((double, double)); 118 extern double cosh _PARAMS((double)); 119 extern double sinh _PARAMS((double)); 120 extern double exp _PARAMS((double)); 121 extern double ldexp _PARAMS((double, int)); 122 extern double log _PARAMS((double)); 123 extern double log10 _PARAMS((double)); 124 extern double pow _PARAMS((double, double)); 125 extern double sqrt _PARAMS((double)); 126 extern double fmod _PARAMS((double, double)); 127 #endif /* ! defined (__math_68881) */ 128 #endif /* ! defined (_REENT_ONLY) */ 129 130 #if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L 131 132 /* ISO C99 types and macros. */ 133 134 #ifndef FLT_EVAL_METHOD 135 #define FLT_EVAL_METHOD 0 136 typedef float float_t; 137 typedef double double_t; 138 #endif /* FLT_EVAL_METHOD */ 139 140 #define FP_NAN 0 141 #define FP_INFINITE 1 142 #define FP_ZERO 2 143 #define FP_SUBNORMAL 3 144 #define FP_NORMAL 4 145 146 #ifndef FP_ILOGB0 147 # define FP_ILOGB0 (-INT_MAX) 148 #endif 149 #ifndef FP_ILOGBNAN 150 # define FP_ILOGBNAN INT_MAX 151 #endif 152 153 #ifndef MATH_ERRNO 154 # define MATH_ERRNO 1 155 #endif 156 #ifndef MATH_ERREXCEPT 157 # define MATH_ERREXCEPT 2 158 #endif 159 #ifndef math_errhandling 160 # define math_errhandling MATH_ERRNO 161 #endif 162 163 extern int __isinff (float x); 164 extern int __isinfd (double x); 165 extern int __isnanf (float x); 166 extern int __isnand (double x); 167 extern int __fpclassifyf (float x); 168 extern int __fpclassifyd (double x); 169 extern int __signbitf (float x); 170 extern int __signbitd (double x); 171 172 #define fpclassify(x) \ 173 (__extension__ ({__typeof__(x) __x = (x); \ 174 (sizeof (__x) == sizeof (float)) ? __fpclassifyf(__x) : __fpclassifyd(__x);})) 175 176 #ifndef isfinite 177 #define isfinite(y) \ 178 (__extension__ ({__typeof__(y) __y = (y); \ 179 fpclassify(__y) != FP_INFINITE && fpclassify(__y) != FP_NAN;})) 180 #endif 181 182 /* Note: isinf and isnan were once functions in newlib that took double 183 * arguments. C99 specifies that these names are reserved for macros 184 * supporting multiple floating point types. Thus, they are 185 * now defined as macros. Implementations of the old functions 186 * taking double arguments still exist for compatibility purposes. */ 187 #ifndef isinf 188 #define isinf(x) \ 189 (__extension__ ({__typeof__(x) __x = (x); \ 190 (sizeof (__x) == sizeof (float)) ? __isinff(__x) : __isinfd(__x);})) 191 #endif 192 193 #ifndef isnan 194 #define isnan(x) \ 195 (__extension__ ({__typeof__(x) __x = (x); \ 196 (sizeof (__x) == sizeof (float)) ? __isnanf(__x) : __isnand(__x);})) 197 #endif 198 199 #define isnormal(y) (fpclassify(y) == FP_NORMAL) 200 #define signbit(x) \ 201 (__extension__ ({__typeof__(x) __x = (x); \ 202 (sizeof(__x) == sizeof(float)) ? __signbitf(__x) : __signbitd(__x);})) 203 204 #define isgreater(x,y) \ 205 (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ 206 !isunordered(__x,__y) && (__x > __y);})) 207 #define isgreaterequal(x,y) \ 208 (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ 209 !isunordered(__x,__y) && (__x >= __y);})) 210 #define isless(x,y) \ 211 (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ 212 !isunordered(__x,__y) && (__x < __y);})) 213 #define islessequal(x,y) \ 214 (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ 215 !isunordered(__x,__y) && (__x <= __y);})) 216 #define islessgreater(x,y) \ 217 (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ 218 !isunordered(__x,__y) && (__x < __y || __x > __y);})) 219 220 #define isunordered(a,b) \ 221 (__extension__ ({__typeof__(a) __a = (a); __typeof__(b) __b = (b); \ 222 fpclassify(__a) == FP_NAN || fpclassify(__b) == FP_NAN;})) 223 224 /* Non ANSI double precision functions. */ 225 226 extern double infinity _PARAMS((void)); 227 extern double nan _PARAMS((const char *)); 228 extern int finite _PARAMS((double)); 229 extern double copysign _PARAMS((double, double)); 230 extern int ilogb _PARAMS((double)); 231 232 extern double asinh _PARAMS((double)); 233 extern double cbrt _PARAMS((double)); 234 extern double nextafter _PARAMS((double, double)); 235 extern double rint _PARAMS((double)); 236 extern double scalbn _PARAMS((double, int)); 237 238 extern double exp2 _PARAMS((double)); 239 extern double scalbln _PARAMS((double, long int)); 240 extern double tgamma _PARAMS((double)); 241 extern double nearbyint _PARAMS((double)); 242 extern long int lrint _PARAMS((double)); 243 extern _LONG_LONG int llrint _PARAMS((double)); 244 extern double round _PARAMS((double)); 245 extern long int lround _PARAMS((double)); 246 extern double trunc _PARAMS((double)); 247 extern double remquo _PARAMS((double, double, int *)); 248 extern double copysign _PARAMS((double, double)); 249 extern double fdim _PARAMS((double, double)); 250 extern double fmax _PARAMS((double, double)); 251 extern double fmin _PARAMS((double, double)); 252 extern double fma _PARAMS((double, double, double)); 253 254 #ifndef __math_68881 255 extern double log1p _PARAMS((double)); 256 extern double expm1 _PARAMS((double)); 257 #endif /* ! defined (__math_68881) */ 258 259 #ifndef _REENT_ONLY 260 extern double acosh _PARAMS((double)); 261 extern double atanh _PARAMS((double)); 262 extern double remainder _PARAMS((double, double)); 263 extern double gamma _PARAMS((double)); 264 extern double lgamma _PARAMS((double)); 265 extern double erf _PARAMS((double)); 266 extern double erfc _PARAMS((double)); 267 #define log2(x) (log (x) / _M_LOG2_E) 268 269 #ifndef __math_68881 270 extern double hypot _PARAMS((double, double)); 271 #endif 272 273 #endif /* ! defined (_REENT_ONLY) */ 274 275 /* Single precision versions of ANSI functions. */ 276 277 extern float atanf _PARAMS((float)); 278 extern float cosf _PARAMS((float)); 279 extern float sinf _PARAMS((float)); 280 extern float tanf _PARAMS((float)); 281 extern float tanhf _PARAMS((float)); 282 extern float frexpf _PARAMS((float, int *)); 283 extern float modff _PARAMS((float, float *)); 284 extern float ceilf _PARAMS((float)); 285 extern float fabsf _PARAMS((float)); 286 extern float floorf _PARAMS((float)); 287 288 #ifndef _REENT_ONLY 289 extern float acosf _PARAMS((float)); 290 extern float asinf _PARAMS((float)); 291 extern float atan2f _PARAMS((float, float)); 292 extern float coshf _PARAMS((float)); 293 extern float sinhf _PARAMS((float)); 294 extern float expf _PARAMS((float)); 295 extern float ldexpf _PARAMS((float, int)); 296 extern float logf _PARAMS((float)); 297 extern float log10f _PARAMS((float)); 298 extern float powf _PARAMS((float, float)); 299 extern float sqrtf _PARAMS((float)); 300 extern float fmodf _PARAMS((float, float)); 301 #endif /* ! defined (_REENT_ONLY) */ 302 303 /* Other single precision functions. */ 304 305 extern float exp2f _PARAMS((float)); 306 extern float scalblnf _PARAMS((float, long int)); 307 extern float tgammaf _PARAMS((float)); 308 extern float nearbyintf _PARAMS((float)); 309 extern long int lrintf _PARAMS((float)); 310 extern _LONG_LONG llrintf _PARAMS((float)); 311 extern float roundf _PARAMS((float)); 312 extern long int lroundf _PARAMS((float)); 313 extern float truncf _PARAMS((float)); 314 extern float remquof _PARAMS((float, float, int *)); 315 extern float copysignf _PARAMS((float, float)); 316 extern float fdimf _PARAMS((float, float)); 317 extern float fmaxf _PARAMS((float, float)); 318 extern float fminf _PARAMS((float, float)); 319 extern float fmaf _PARAMS((float, float, float)); 320 321 extern float infinityf _PARAMS((void)); 322 extern float nanf _PARAMS((const char *)); 323 extern int isnanf _PARAMS((float)); 324 extern int isinff _PARAMS((float)); 325 extern int finitef _PARAMS((float)); 326 extern float copysignf _PARAMS((float, float)); 327 extern int ilogbf _PARAMS((float)); 328 329 extern float asinhf _PARAMS((float)); 330 extern float cbrtf _PARAMS((float)); 331 extern float nextafterf _PARAMS((float, float)); 332 extern float rintf _PARAMS((float)); 333 extern float scalbnf _PARAMS((float, int)); 334 extern float log1pf _PARAMS((float)); 335 extern float expm1f _PARAMS((float)); 336 337 #ifndef _REENT_ONLY 338 extern float acoshf _PARAMS((float)); 339 extern float atanhf _PARAMS((float)); 340 extern float remainderf _PARAMS((float, float)); 341 extern float gammaf _PARAMS((float)); 342 extern float lgammaf _PARAMS((float)); 343 extern float erff _PARAMS((float)); 344 extern float erfcf _PARAMS((float)); 345 #define log2f(x) (logf (x) / (float) _M_LOG2_E) 346 extern float hypotf _PARAMS((float, float)); 347 #endif /* ! defined (_REENT_ONLY) */ 348 349 /* Other long double precision functions. */ 350 extern _LONG_DOUBLE rintl _PARAMS((_LONG_DOUBLE)); 351 extern long int lrintl _PARAMS((_LONG_DOUBLE)); 352 extern _LONG_LONG llrintl _PARAMS((_LONG_DOUBLE)); 353 354 #endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L */ 355 356 #if !defined (__STRICT_ANSI__) || defined(__cplusplus) 357 358 359 extern double drem _PARAMS((double, double)); 360 extern void sincos _PARAMS((double, double *, double *)); 361 extern double gamma_r _PARAMS((double, int *)); 362 extern double lgamma_r _PARAMS((double, int *)); 363 364 extern double y0 _PARAMS((double)); 365 extern double y1 _PARAMS((double)); 366 extern double yn _PARAMS((int, double)); 367 extern double j0 _PARAMS((double)); 368 extern double j1 _PARAMS((double)); 369 extern double jn _PARAMS((int, double)); 370 371 extern float cabsf(); 372 extern float dremf _PARAMS((float, float)); 373 extern void sincosf _PARAMS((float, float *, float *)); 374 extern float gammaf_r _PARAMS((float, int *)); 375 extern float lgammaf_r _PARAMS((float, int *)); 376 377 extern float y0f _PARAMS((float)); 378 extern float y1f _PARAMS((float)); 379 extern float ynf _PARAMS((int, float)); 380 extern float j0f _PARAMS((float)); 381 extern float j1f _PARAMS((float)); 382 extern float jnf _PARAMS((int, float)); 383 384 /* GNU extensions */ 385 # ifndef exp10 386 extern double exp10 _PARAMS((double)); 387 # endif 388 # ifndef pow10 389 extern double pow10 _PARAMS((double)); 390 # endif 391 # ifndef exp10f 392 extern float exp10f _PARAMS((float)); 393 # endif 394 # ifndef pow10f 395 extern float pow10f _PARAMS((float)); 396 # endif 397 398 #endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) */ 399 400 #ifndef __STRICT_ANSI__ 401 402 /* The gamma functions use a global variable, signgam. */ 403 #ifndef _REENT_ONLY 404 #define signgam (*__signgam()) 405 extern int *__signgam _PARAMS((void)); 406 #endif /* ! defined (_REENT_ONLY) */ 407 408 #define __signgam_r(ptr) _REENT_SIGNGAM(ptr) 409 410 /* The exception structure passed to the matherr routine. */ 411 /* We have a problem when using C++ since `exception' is a reserved 412 name in C++. */ 413 #ifdef __cplusplus 414 struct __exception 415 #else 416 struct exception 417 #endif 418 { 419 int type; 420 char *name; 421 double arg1; 422 double arg2; 423 double retval; 424 int err; 425 }; 426 427 #ifdef __cplusplus 428 extern int matherr _PARAMS((struct __exception *e)); 429 #else 430 extern int matherr _PARAMS((struct exception *e)); 431 #endif 432 433 /* Values for the type field of struct exception. */ 434 435 #define DOMAIN 1 436 #define SING 2 437 #define OVERFLOW 3 438 #define UNDERFLOW 4 439 #define TLOSS 5 440 #define PLOSS 6 441 442 /* Useful constants. */ 443 444 #define MAXFLOAT 3.40282347e+38F 445 446 #define M_E 2.7182818284590452354 447 #define M_LOG2E 1.4426950408889634074 448 #define M_LOG10E 0.43429448190325182765 449 #define M_LN2 0.69314718055994530942 450 #define M_LN10 2.30258509299404568402 451 #define M_PI 3.14159265358979323846 452 #define M_TWOPI (M_PI * 2.0) 453 #define M_PI_2 1.57079632679489661923 454 #define M_PI_4 0.78539816339744830962 455 #define M_3PI_4 2.3561944901923448370E0 456 #define M_SQRTPI 1.77245385090551602792981 457 #define M_1_PI 0.31830988618379067154 458 #define M_2_PI 0.63661977236758134308 459 #define M_2_SQRTPI 1.12837916709551257390 460 #define M_SQRT2 1.41421356237309504880 461 #define M_SQRT1_2 0.70710678118654752440 462 #define M_LN2LO 1.9082149292705877000E-10 463 #define M_LN2HI 6.9314718036912381649E-1 464 #define M_SQRT3 1.73205080756887719000 465 #define M_IVLN10 0.43429448190325182765 /* 1 / log(10) */ 466 #define M_LOG2_E _M_LOG2_E 467 #define M_INVLN2 1.4426950408889633870E0 /* 1 / log(2) */ 468 469 /* Global control over fdlibm error handling. */ 470 471 enum __fdlibm_version 472 { 473 __fdlibm_ieee = -1, 474 __fdlibm_svid, 475 __fdlibm_xopen, 476 __fdlibm_posix 477 }; 478 479 #define _LIB_VERSION_TYPE enum __fdlibm_version 480 #define _LIB_VERSION __fdlib_version 481 482 extern __IMPORT _LIB_VERSION_TYPE _LIB_VERSION; 483 484 #define _IEEE_ __fdlibm_ieee 485 #define _SVID_ __fdlibm_svid 486 #define _XOPEN_ __fdlibm_xopen 487 #define _POSIX_ __fdlibm_posix 488 489 #endif /* ! defined (__STRICT_ANSI__) */ 490 491 _END_STD_C 492 493 #ifdef __FAST_MATH__ 494 #include <machine/fastmath.h> 495 #endif 496 497 #endif /* _MATH_H_ */ 498