diff options
Diffstat (limited to 'math')
-rw-r--r-- | math/tgmath.h | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/math/tgmath.h b/math/tgmath.h index 286ea56df0..0c02aaa6e7 100644 --- a/math/tgmath.h +++ b/math/tgmath.h @@ -36,6 +36,12 @@ #if __GNUC_PREREQ (2, 7) +# ifdef __NO_LONG_DOUBLE_MATH +# define __tgml(fct) fct +# else +# define __tgml(fct) fct ## l +# endif + /* This is ugly but unless gcc gets appropriate builtins we have to do something like this. Don't ask how it works. */ @@ -65,7 +71,7 @@ else if (sizeof (Val) == sizeof (float)) \ __tgmres = Fct##f (Val); \ else \ - __tgmres = Fct##l (Val); \ + __tgmres = __tgml(Fct) (Val); \ __tgmres; })) # define __TGMATH_BINARY_FIRST_REAL_ONLY(Val1, Val2, Fct) \ @@ -76,7 +82,7 @@ else if (sizeof (Val1) == sizeof (float)) \ __tgmres = Fct##f (Val1, Val2); \ else \ - __tgmres = Fct##l (Val1, Val2); \ + __tgmres = __tgml(Fct) (Val1, Val2); \ __tgmres; })) # define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \ @@ -84,7 +90,7 @@ if ((sizeof (Val1) > sizeof (double) \ || sizeof (Val2) > sizeof (double)) \ && __builtin_classify_type ((Val1) + (Val2)) == 8) \ - __tgmres = Fct##l (Val1, Val2); \ + __tgmres = __tgml(Fct) (Val1, Val2); \ else if (sizeof (Val1) == sizeof (double) \ || sizeof (Val2) == sizeof (double) \ || __builtin_classify_type ((Val1) \ @@ -99,7 +105,7 @@ if ((sizeof (Val1) > sizeof (double) \ || sizeof (Val2) > sizeof (double)) \ && __builtin_classify_type ((Val1) + (Val2)) == 8) \ - __tgmres = Fct##l (Val1, Val2, Val3); \ + __tgmres = __tgml(Fct) (Val1, Val2, Val3); \ else if (sizeof (Val1) == sizeof (double) \ || sizeof (Val2) == sizeof (double) \ || __builtin_classify_type ((Val1) \ @@ -116,7 +122,7 @@ || sizeof (Val3) > sizeof (double)) \ && __builtin_classify_type ((Val1) + (Val2) \ + (Val3)) == 8) \ - __tgmres = Fct##l (Val1, Val2, Val3); \ + __tgmres = __tgml(Fct) (Val1, Val2, Val3); \ else if (sizeof (Val1) == sizeof (double) \ || sizeof (Val2) == sizeof (double) \ || sizeof (Val3) == sizeof (double) \ @@ -135,9 +141,9 @@ && __builtin_classify_type (__real__ (Val)) == 8) \ { \ if (sizeof (__real__ (Val)) == sizeof (Val)) \ - __tgmres = Fct##l (Val); \ + __tgmres = __tgml(Fct) (Val); \ else \ - __tgmres = Cfct##l (Val); \ + __tgmres = __tgml(Cfct) (Val); \ } \ else if (sizeof (__real__ (Val)) == sizeof (double) \ || __builtin_classify_type (__real__ (Val)) \ @@ -167,7 +173,7 @@ else if (sizeof (Val) == sizeof (__complex__ float)) \ __tgmres = Fct##f (Val); \ else \ - __tgmres = Fct##l (Val); \ + __tgmres = __tgml(Fct) (Val); \ __tgmres; })) /* XXX This definition has to be changed as soon as the compiler understands @@ -182,9 +188,9 @@ { \ if (sizeof (__real__ (Val1)) == sizeof (Val1) \ && sizeof (__real__ (Val2)) == sizeof (Val2)) \ - __tgmres = Fct##l (Val1, Val2); \ + __tgmres = __tgml(Fct) (Val1, Val2); \ else \ - __tgmres = Cfct##l (Val1, Val2); \ + __tgmres = __tgml(Cfct) (Val1, Val2); \ } \ else if (sizeof (__real__ (Val1)) == sizeof (double) \ || sizeof (__real__ (Val2)) == sizeof(double) \ |