* include/_mingw.h (__MINGW_GNUC_PREREQ): Define. Use to
guard __MINGW_ATTRIB macro definitions. * include/math.h (logb[fl]): Don't define inlines for GCC-4.0+ && __FAST_MATH__. (rint[fl], lrint[fl], llrint[fl]); Likewise. Clean up line-continuation backslashes.
This commit is contained in:
		| @@ -1,9 +1,18 @@ | |||||||
| 2005-06-06  Danny Smith  <dannysmith@users.sourceforge | 2005-06-16  Danny Smith  <dannysmith@users.sourceforge.net> | ||||||
|  |  | ||||||
|  | 	* include/_mingw.h (__MINGW_GNUC_PREREQ): Define. Use to | ||||||
|  | 	guard __MINGW_ATTRIB macro definitions. | ||||||
|  | 	* include/math.h (logb[fl]):  Don't define inlines for | ||||||
|  | 	GCC-4.0+ && __FAST_MATH__. | ||||||
|  | 	(rint[fl], lrint[fl], llrint[fl]); Likewise.  Clean up | ||||||
|  | 	line-continuation backslashes. | ||||||
|  |  | ||||||
|  | 2005-06-06  Danny Smith  <dannysmith@users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* include/_mingw.h (__MINGW_ATTRIBUTE_NONNULL): Fix typo | 	* include/_mingw.h (__MINGW_ATTRIBUTE_NONNULL): Fix typo | ||||||
| 	in GNUC version guard. | 	in GNUC version guard. | ||||||
|  |  | ||||||
| 2005-05-20  Danny Smith  <dannysmith@users.sourceforge | 2005-05-20  Danny Smith  <dannysmith@users.sourceforge.net> | ||||||
|  |  | ||||||
| 	* crt1.c (_gnu_exception_handler): Handle illegal instruction | 	* crt1.c (_gnu_exception_handler): Handle illegal instruction | ||||||
| 	OS exception as a signal if user has defined a SIGILL handler. | 	OS exception as a signal if user has defined a SIGILL handler. | ||||||
| @@ -15,7 +24,7 @@ | |||||||
| 	* mingwex/math/nextafterl.c: Add nexttowardl alias. | 	* mingwex/math/nextafterl.c: Add nexttowardl alias. | ||||||
| 	* mingwex/Makefile.in (MATH_DISTFILES): Add nexttoward.c, | 	* mingwex/Makefile.in (MATH_DISTFILES): Add nexttoward.c, | ||||||
| 	mexttowardf.c, | 	mexttowardf.c, | ||||||
| 	(MATH_OBJS):  Add nexttoward.o,	mexttowardf.o, | 	(MATH_OBJS):  Add nexttoward.o,	nexttowardf.o, | ||||||
| 	* include/math.h (nexttoward, nextowardf, nexttowardl): Add | 	* include/math.h (nexttoward, nextowardf, nexttowardl): Add | ||||||
| 	prototypes. | 	prototypes. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -110,6 +110,14 @@ | |||||||
| #define __CRT_INLINE extern __inline__ | #define __CRT_INLINE extern __inline__ | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #if defined (__GNUC__) && defined (__GNUC_MINOR__) | ||||||
|  | #define __MINGW_GNUC_PREREQ(major, minor) \ | ||||||
|  |   (__GNUC__ > (major) \ | ||||||
|  |    || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor))) | ||||||
|  | #else | ||||||
|  | #define __MINGW_GNUC_PREREQ(major, minor)  0 | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| # define __UNUSED_PARAM(x)  | # define __UNUSED_PARAM(x)  | ||||||
| #else  | #else  | ||||||
| @@ -128,7 +136,7 @@ | |||||||
| #define __MINGW_ATTRIB_CONST | #define __MINGW_ATTRIB_CONST | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #if ( __GNUC__ >= 3) | #if __MINGW_GNUC_PREREQ (3, 0) | ||||||
| #define __MINGW_ATTRIB_MALLOC __attribute__ ((__malloc__)) | #define __MINGW_ATTRIB_MALLOC __attribute__ ((__malloc__)) | ||||||
| #define __MINGW_ATTRIB_PURE __attribute__ ((__pure__)) | #define __MINGW_ATTRIB_PURE __attribute__ ((__pure__)) | ||||||
| #else | #else | ||||||
| @@ -139,7 +147,7 @@ | |||||||
| /* Attribute `nonnull' was valid as of gcc 3.3.  We don't use GCC's | /* Attribute `nonnull' was valid as of gcc 3.3.  We don't use GCC's | ||||||
|    variadiac macro facility, because variadic macros cause syntax |    variadiac macro facility, because variadic macros cause syntax | ||||||
|    errors with  --traditional-cpp.  */ |    errors with  --traditional-cpp.  */ | ||||||
| #if (__GNUC__ > 3 ||( __GNUC__ == 3 &&  __GNUC_MINOR__ >= 3)) | #if  __MINGW_GNUC_PREREQ (3, 3) | ||||||
| #define __MINGW_ATTRIB_NONNULL(arg) __attribute__ ((__nonnull__ (arg))) | #define __MINGW_ATTRIB_NONNULL(arg) __attribute__ ((__nonnull__ (arg))) | ||||||
| #else | #else | ||||||
| #define __MINGW_ATTRIB_NONNULL(arg) | #define __MINGW_ATTRIB_NONNULL(arg) | ||||||
|   | |||||||
| @@ -500,6 +500,9 @@ extern double __cdecl logb (double); | |||||||
| extern float __cdecl logbf (float); | extern float __cdecl logbf (float); | ||||||
| extern long double __cdecl logbl (long double); | extern long double __cdecl logbl (long double); | ||||||
|  |  | ||||||
|  | /* Inline versions.  GCC-4.0+ can do a better fast-math optimization | ||||||
|  |    with __builtins. */  | ||||||
|  | #if !(__MINGW_GNUC_PREREQ (4, 0) && defined __FAST_MATH__ ) | ||||||
| __CRT_INLINE double __cdecl logb (double x) | __CRT_INLINE double __cdecl logb (double x) | ||||||
| { | { | ||||||
|   double res; |   double res; | ||||||
| @@ -523,6 +526,7 @@ __CRT_INLINE long double __cdecl logbl (long double x) | |||||||
|        "fstp	%%st" : "=t" (res) : "0" (x)); |        "fstp	%%st" : "=t" (res) : "0" (x)); | ||||||
|   return res; |   return res; | ||||||
| } | } | ||||||
|  | #endif /* !defined __FAST_MATH__ || !__MINGW_GNUC_PREREQ (4, 0) */ | ||||||
|  |  | ||||||
| /* 7.12.6.12  Double in C89 */ | /* 7.12.6.12  Double in C89 */ | ||||||
| extern float __cdecl modff (float, float*); | extern float __cdecl modff (float, float*); | ||||||
| @@ -597,6 +601,22 @@ extern long double __cdecl nearbyintl (long double); | |||||||
|  |  | ||||||
| /* 7.12.9.4 */ | /* 7.12.9.4 */ | ||||||
| /* round, using fpu control word settings */ | /* round, using fpu control word settings */ | ||||||
|  | extern double __cdecl rint (double); | ||||||
|  | extern float __cdecl rintf (float); | ||||||
|  | extern long double __cdecl rintl (long double); | ||||||
|  |  | ||||||
|  | /* 7.12.9.5 */ | ||||||
|  | extern long __cdecl lrint (double); | ||||||
|  | extern long __cdecl lrintf (float); | ||||||
|  | extern long __cdecl lrintl (long double); | ||||||
|  |  | ||||||
|  | extern long long __cdecl llrint (double); | ||||||
|  | extern long long __cdecl llrintf (float); | ||||||
|  | extern long long __cdecl llrintl (long double); | ||||||
|  |  | ||||||
|  | /* Inline versions of above.  | ||||||
|  |    GCC 4.0+ can do a better fast-math job with __builtins. */ | ||||||
|  | #if !(__MINGW_GNUC_PREREQ (4, 0) && defined __FAST_MATH__ ) | ||||||
| __CRT_INLINE double __cdecl rint (double x) | __CRT_INLINE double __cdecl rint (double x) | ||||||
| { | { | ||||||
|   double retval; |   double retval; | ||||||
| @@ -618,54 +638,54 @@ __CRT_INLINE long double __cdecl rintl (long double x) | |||||||
|   return retval; |   return retval; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* 7.12.9.5 */ |  | ||||||
| __CRT_INLINE long __cdecl lrint (double x)  | __CRT_INLINE long __cdecl lrint (double x)  | ||||||
| { | { | ||||||
|   long retval;   |   long retval;   | ||||||
|   __asm__ __volatile__							      \ |   __asm__ __volatile__ | ||||||
|     ("fistpl %0"  : "=m" (retval) : "t" (x) : "st");				      \ |     ("fistpl %0"  : "=m" (retval) : "t" (x) : "st"); | ||||||
|   return retval; |   return retval; | ||||||
| } | } | ||||||
|  |  | ||||||
| __CRT_INLINE long __cdecl lrintf (float x)  | __CRT_INLINE long __cdecl lrintf (float x)  | ||||||
| { | { | ||||||
|   long retval; |   long retval; | ||||||
|   __asm__ __volatile__							      \ |   __asm__ __volatile__ | ||||||
|     ("fistpl %0"  : "=m" (retval) : "t" (x) : "st");				      \ |     ("fistpl %0"  : "=m" (retval) : "t" (x) : "st"); | ||||||
|   return retval; |   return retval; | ||||||
| } | } | ||||||
|  |  | ||||||
| __CRT_INLINE long __cdecl lrintl (long double x)  | __CRT_INLINE long __cdecl lrintl (long double x)  | ||||||
| { | { | ||||||
|   long retval; |   long retval; | ||||||
|   __asm__ __volatile__							      \ |   __asm__ __volatile__ | ||||||
|     ("fistpl %0"  : "=m" (retval) : "t" (x) : "st");				      \ |     ("fistpl %0"  : "=m" (retval) : "t" (x) : "st"); | ||||||
|   return retval; |   return retval; | ||||||
| } | } | ||||||
|  |  | ||||||
| __CRT_INLINE long long __cdecl llrint (double x) | __CRT_INLINE long long __cdecl llrint (double x) | ||||||
| { | { | ||||||
|   long long retval; |   long long retval; | ||||||
|   __asm__ __volatile__							      \ |   __asm__ __volatile__ | ||||||
|     ("fistpll %0"  : "=m" (retval) : "t" (x) : "st");				      \ |     ("fistpll %0"  : "=m" (retval) : "t" (x) : "st"); | ||||||
|   return retval; |   return retval; | ||||||
| } | } | ||||||
|  |  | ||||||
| __CRT_INLINE long long __cdecl llrintf (float x) | __CRT_INLINE long long __cdecl llrintf (float x) | ||||||
| { | { | ||||||
|   long long retval; |   long long retval; | ||||||
|   __asm__ __volatile__							      \ |   __asm__ __volatile__ | ||||||
|     ("fistpll %0"  : "=m" (retval) : "t" (x) : "st");				      \ |     ("fistpll %0"  : "=m" (retval) : "t" (x) : "st"); | ||||||
|   return retval; |   return retval; | ||||||
| } | } | ||||||
|  |  | ||||||
| __CRT_INLINE long long __cdecl llrintl (long double x)  | __CRT_INLINE long long __cdecl llrintl (long double x)  | ||||||
| { | { | ||||||
|   long long retval; |   long long retval; | ||||||
|   __asm__ __volatile__							      \ |   __asm__ __volatile__ | ||||||
|     ("fistpll %0"  : "=m" (retval) : "t" (x) : "st");				      \ |     ("fistpll %0"  : "=m" (retval) : "t" (x) : "st"); | ||||||
|   return retval; |   return retval; | ||||||
| } | } | ||||||
|  | #endif /* !__FAST_MATH__ || !__MINGW_GNUC_PREREQ (4,0)  */ | ||||||
|  |  | ||||||
| /* 7.12.9.6 */ | /* 7.12.9.6 */ | ||||||
| /* round away from zero, regardless of fpu control word settings */ | /* round away from zero, regardless of fpu control word settings */ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user