Ticket #7007: 0001-Add-missing-definitions-to-math.h.patch

File 0001-Add-missing-definitions-to-math.h.patch, 3.1 KB (added by scottmc, 11 years ago)
  • headers/posix/math.h

    From e12a29d2f51aaae5976d601e2152a8096667c136 Mon Sep 17 00:00:00 2001
    From: Sam Toyer <sam@qxcv.net>
    Date: Sat, 1 Dec 2012 19:18:57 +1000
    Subject: [PATCH 1/5] Add missing definitions to math.h
    
    ---
     headers/posix/math.h |   71 ++++++++++++++++++++++++++++++++++++++++++++++++++
     1 file changed, 71 insertions(+)
    
    diff --git a/headers/posix/math.h b/headers/posix/math.h
    index df34b25..d094d0e 100644
    a b  
    55#ifndef _MATH_H_
    66#define _MATH_H_
    77
     8/* (float|double)_t typedefs */
     9
     10#ifdef __FLT_EVAL_METHOD__
     11    #define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
     12#else
     13    #define FLT_EVAL_METHOD 0
     14#endif
     15
     16#if FLT_EVAL_METHOD == 1
     17    typedef double float_t;
     18    typedef double double_t;
     19#elif FLT_EVAL_METHOD == 2
     20    typedef long double float_t;
     21    typedef long double double_t;
     22#else
     23    typedef float float_t;
     24    typedef double double_t;
     25#endif
    826
    927#define M_E             2.7182818284590452354   /* e */
    1028#define M_LOG2E         1.4426950408889634074   /* log 2e */
     
    5068#   define INFINITY         HUGE_VALF
    5169#endif
    5270
     71#include <limits.h>
     72#define MAXFLOAT FLT_MAX
     73
    5374/* floating-point categories */
    5475#define FP_NAN          0
    5576#define FP_INFINITE     1
     
    5778#define FP_SUBNORMAL    3
    5879#define FP_NORMAL       4
    5980
     81#ifdef __FP_FAST_FMA
     82    #define FP_FAST_FMA     __FP_FAST_FMA
     83#else
     84    #define FP_FAST_FMA     0
     85#endif
     86#ifdef __FP_FAST_FMAF
     87    #define FP_FAST_FMAF    __FP_FAST_FMAF
     88#else
     89    #define FP_FAST_FMAF    0
     90#endif
     91#ifdef __FP_FAST_FMAL
     92    #define FP_FAST_FMAL    __FP_FAST_FMAL
     93#else
     94    #define FP_FAST_FMAL    0
     95#endif
     96
     97#define FP_ILOGB0       INT_MAX
     98#define FP_ILOGBNAN     INT_MAX
     99
    60100#ifdef __cplusplus
    61101struct __exception;
    62102extern "C" int matherr(struct __exception *);
    struct exception {  
    73113    double  retval;
    74114};
    75115
     116#define MATH_ERRNO          1
     117#define MATH_ERREXCEPT      2
     118#define math_errhandling    0
     119
    76120#define DOMAIN      1
    77121#define SING        2
    78122#define OVERFLOW    3
    extern int __isinf(double value);  
    348392        : sizeof(value) == sizeof(double) ? __isinf(value)      \
    349393        : __isinfl(value))
    350394
     395#if __GNUC__ >= 4
     396    #define isgreater(x, y)         __builtin_isgreater((x), (y))
     397    #define isgreaterequal(x, y)    __builtin_isgreaterequal((x), (y))
     398    #define isless(x, y)            __builtin_isless((x), (y))
     399    #define islessequal(x, y)       __builtin_islessequal((x), (y))
     400    #define islessgreater(x, y)     __builtin_islessgreater((x), (y))
     401    #define isunordered(x, y)       __builtin_isunordered((x), (y))
     402#else
     403    /* these are only for GCC2, and require GNUC statement expressions */
     404    #define _wrap_expr_typeof(x, y, body) ({    \
     405        __typeof(x) X = (x);                    \
     406        __typeof(y) Y = (y);                    \
     407        body;})
     408    #define isgreater(x, y) \
     409        _wrap_expr_typeof(x, y, !isnan(X) && !isnan(Y) && X > Y)
     410    #define isgreaterequal(x, y) \
     411        _wrap_expr_typeof(x, y, !isnan(X) && !isnan(Y) && X >= Y)
     412    #define isless(x, y) \
     413        _wrap_expr_typeof(x, y, !isnan(X) && !isnan(Y) && X < Y)
     414    #define islessequal(x, y) \
     415        _wrap_expr_typeof(x, y, !isnan(X) && !isnan(Y) && X <= Y)
     416    #define islessgreater(x, y) \
     417        _wrap_expr_typeof(x, y, X < Y || Y < X)
     418    #define isunordered(x, y) \
     419        _wrap_expr_typeof(x, y, isnan(X) || isnan(Y))
     420#endif
     421
    351422#ifdef __cplusplus
    352423}
    353424#endif