Mercurial > mxe-octave
diff src/build-msvctools/math/math.h.in @ 3061:f8299bb6c872
Initial support for native MSVC compilation.
* add MSVC support files: compiler wrappers and support libraries
* adapt libiconv to work with MSVC
* adapt gettext to work with MSVC
author | Michael Goffioul <michael.goffioul@gmail.com> |
---|---|
date | Mon, 17 Jun 2013 22:43:11 -0400 |
parents | |
children | e0257da7fcdc |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/build-msvctools/math/math.h.in Mon Jun 17 22:43:11 2013 -0400 @@ -0,0 +1,323 @@ +/* + * This file is part of msvcmath library. + * Author: Michael Goffioul + */ +#ifndef __MSVCMATHLIB_H__ +#define __MSVCMATHLIB_H__ + +#ifndef _MSC_VER +# error "this header can only be used with Visual C++ compiler" +#endif + +/* Make sure math constants are defined */ +#ifndef _USE_MATH_DEFINES +# define _USE_MATH_DEFINES +#endif + +/* + * Original math.h rom VC++ defines float and long double variants + * of math functions as inline in C++. This conflicts with C version + * defined below. + */ +#ifdef __cplusplus +# define frexpf __msvc_frexpf +# ifndef _M_IA64 +# define fabsf __msvc_fabsf +# define ldexpf __msvc_ldexpf +# ifndef _M_AMD64 +# define acosf __msvc_acosf +# define asinf __msvc_asinf +# define atanf __msvc_atanf +# define atan2f __msvc_atan2f +# define ceilf __msvc_ceilf +# define cosf __msvc_cosf +# define coshf __msvc_coshf +# define expf __msvc_expf +# define floorf __msvc_floorf +# define fmodf __msvc_fmodf +# define logf __msvc_logf +# define log10f __msvc_log10f +# define modff __msvc_modff +# define powf __msvc_powf +# define sinf __msvc_sinf +# define sinhf __msvc_sinhf +# define sqrtf __msvc_sqrtf +# define tanf __msvc_tanf +# define tanhf __msvc_tanhf +# endif +# endif +# define acosl __msvc_acosl +# define asinl __msvc_asinl +# define atanl __msvc_atanl +# define atan2l __msvc_atan2l +# define ceill __msvc_ceill +# define cosl __msvc_cosl +# define coshl __msvc_coshl +# define expl __msvc_expl +# define fabsl __msvc_fabsl +# define floorl __msvc_floorl +# define fmodl __msvc_fmodl +# define frexpl __msvc_frexpl +# define ldexpl __msvc_ldexpl +# define logl __msvc_logl +# define log10l __msvc_log10l +# define modfl __msvc_modfl +# define powl __msvc_powl +# define sinl __msvc_sinl +# define sinhl __msvc_sinhl +# define sqrtl __msvc_sqrtl +# define tanl __msvc_tanl +# define tanhl __msvc_tanhl +#endif + +/* Include VC++ original math.h */ +#include <@MSVCMATH@> + +/* Undo override of inlined version in C++ */ +#ifdef __cplusplus +# undef frexpf +# ifndef _M_IA64 +# undef fabsf +# undef ldexpf +# ifndef _M_AMD64 +# undef acosf +# undef asinf +# undef atanf +# undef atan2f +# undef ceilf +# undef cosf +# undef coshf +# undef expf +# undef floorf +# undef fmodf +# undef logf +# undef log10f +# undef modff +# undef powf +# undef sinf +# undef sinhf +# undef sqrtf +# undef tanf +# undef tanhf +# endif +# endif +# undef acosl +# undef asinl +# undef atanl +# undef atan2l +# undef ceill +# undef cosl +# undef coshl +# undef expl +# undef fabsl +# undef floorl +# undef fmodl +# undef frexpl +# undef ldexpl +# undef logl +# undef log10l +# undef modfl +# undef powl +# undef sinl +# undef sinhl +# undef sqrtl +# undef tanl +# undef tanhl +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Override definitions in VC++ math.h */ +#undef frexpf +extern float frexpf (float x, int* y); +#ifndef _M_IA64 +# undef fabsf +# undef ldexpf +extern float fabsf (float x); +extern float ldexpf (float x, int y); +# ifndef _M_AMD64 +# undef acosf +# undef asinf +# undef atanf +# undef atan2f +# undef ceilf +# undef cosf +# undef coshf +# undef expf +# undef floorf +# undef fmodf +# undef logf +# undef log10f +# undef modff +# undef powf +# undef sinf +# undef sinhf +# undef sqrtf +# undef tanf +# undef tanhf +extern float acosf (float x); +extern float asinf (float x); +extern float atanf (float x); +extern float atan2f (float y, float x); +extern float ceilf (float x); +extern float cosf (float x); +extern float coshf (float x); +extern float expf (float x); +extern float floorf (float x); +extern float fmodf (float x, float y); +extern float logf (float x); +extern float log10f (float x); +extern float modff (float x, float* y); +extern float powf (float x, float y); +extern float sinf (float x); +extern float sinhf (float x); +extern float sqrtf (float x); +extern float tanf (float x); +extern float tanhf (float x); +# endif /* ! _M_AMD64 */ +#endif /* ! _M_IA64 */ + +#undef acosl +#undef asinl +#undef atanl +#undef atan2l +#undef ceill +#undef cosl +#undef coshl +#undef expl +#undef fabsl +#undef floorl +#undef fmodl +#undef frexpl +#undef ldexpl +#undef logl +#undef log10l +#undef modfl +#undef powl +#undef sinl +#undef sinhl +#undef sqrtl +#undef tanl +#undef tanhl +extern long double acosl (long double x); +extern long double asinl (long double x); +extern long double atanl (long double x); +extern long double atan2l (long double y, long double x); +extern long double ceill (long double x); +extern long double cosl (long double x); +extern long double coshl (long double x); +extern long double expl (long double x); +extern long double fabsl (long double x); +extern long double floorl (long double x); +extern long double fmodl (long double x, long double y); +extern long double frexpl (long double x, int* y); +extern long double ldexpl (long double x, int y); +extern long double logl (long double x); +extern long double log10l (long double x); +extern long double modfl (long double x, long double* y); +extern long double powl (long double x, long double y); +extern long double sinl (long double x); +extern long double sinhl (long double x); +extern long double sqrtl (long double x); +extern long double tanl (long double x); +extern long double tanhl (long double x); + +/* Inverse hyperbolic functions */ +extern double acosh (double x); +extern double asinh (double x); +extern double atanh (double x); +extern float acoshf (float x); +extern float asinhf (float x); +extern float atanhf (float x); +extern long double acoshl (long double x); +extern long double asinhl (long double x); +extern long double atanhl (long double x); + +/* Cubic root functions */ +extern double cbrt (double x); +extern float cbrtf (float x); +extern long double cbrtl (long double x); + +/* Logarithmic functions */ +extern double exp2 (double x); +extern double expm1 (double x); +extern int ilogb (double x); +extern double log1p (double x); +extern double log2 (double x); +extern double logb (double x); +extern float exp2f (float x); +extern float expm1f (float x); +extern int ilogbf (float x); +extern float log1pf (float x); +extern float log2f (float x); +extern float logbf (float x); +extern long double exp2l (long double x); +extern long double expm1l (long double x); +extern int ilogbl (long double x); +extern long double log1pl (long double x); +extern long double log2l (long double x); +extern long double logbl (long double x); + +/* Rounding functions */ +extern long int lrint (double x); +extern long long int llrint (double x); +extern long int lround (double x); +extern double nearbyint (double x); +extern double rint (double x); +extern double round (double x); +extern double trunc (double x); +extern long int lrintf (float x); +extern long long int llrintf (float x); +extern long int lroundf (float x); +extern float nearbyintf (float x); +extern float rintf (float x); +extern float roundf (float x); +extern float truncf (float x); +extern long int lrintl (long double x); +extern long long int llrintl (long double x); +extern long int lroundl (long double x); +extern long double nearbyintl (long double x); +extern long double rintl (long double x); +extern long double roundl (long double x); +extern long double truncl (long double x); + +/* Other functions */ +extern double fma (double x, double y, double z); +extern float fmaf (float x, float y, float z); +extern long double fmal (long double x, long double y, long double z); + +extern int finite(double x); +extern int finitef(float x); +extern int finitel(long double x); + +extern int isinf(double x); +extern int isinff(float x); +extern int isinfl(long double x); + +extern int isnan(double x); +extern int isnanf(float x); +extern int isnanl(long double x); + +extern double nan (const char* tagp); +extern float nanf (const char* tagp); +extern long double nanl (const char* tagp); + +extern double nextafter (double x, double y); +extern float nextafterf (float x, float y); +extern long double nextafterl (long double x, long double y); + +extern double remainder(double x, double y); +extern float remainderf(float x, float y); +extern long double remainderl(long double x, long double y); + +extern double scalbn(double x, int exp); +extern float scalbnf(float x, int exp); +extern long double scalbnl(long double x, int exp); + +#ifdef __cplusplus +} +#endif + +#endif