aboutsummaryrefslogtreecommitdiff
path: root/math/tgmath.h
diff options
context:
space:
mode:
Diffstat (limited to 'math/tgmath.h')
-rw-r--r--math/tgmath.h39
1 files changed, 23 insertions, 16 deletions
diff --git a/math/tgmath.h b/math/tgmath.h
index 50d4d428ee..1f19b14058 100644
--- a/math/tgmath.h
+++ b/math/tgmath.h
@@ -71,7 +71,7 @@
# define __TGMATH_BINARY_FIRST_REAL_ONLY(Val1, Val2, Fct) \
(__extension__ ({ __tgmath_real_type (Val1) __tgmres; \
if (sizeof (Val1) == sizeof (double) \
- || __builtin_classify_type (Val) != 8) \
+ || __builtin_classify_type (Val1) != 8) \
__tgmres = Fct (Val1, Val2); \
else if (sizeof (Val1) == sizeof (float)) \
__tgmres = Fct##f (Val1, Val2); \
@@ -83,28 +83,30 @@
(__extension__ ({ __tgmath_real_type ((Val1) + (Val2)) __tgmres; \
if ((sizeof (Val1) > sizeof (double) \
|| sizeof (Val2) > sizeof (double)) \
- && __builtin_classify_type (Val) == 8) \
+ && __builtin_classify_type ((Val1) + (Val2)) == 8) \
__tgmres = Fct##l (Val1, Val2); \
else if (sizeof (Val1) == sizeof (double) \
|| sizeof (Val2) == sizeof (double) \
- || __builtin_classify_type (Val) != 8) \
+ || __builtin_classify_type ((Val1) \
+ + (Val2)) != 8) \
__tgmres = Fct (Val1, Val2); \
else \
- __tgmres = Fct (Val1, Val2); \
+ __tgmres = Fct##f (Val1, Val2); \
__tgmres; }))
# define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \
(__extension__ ({ __tgmath_real_type ((Val1) + (Val2)) __tgmres; \
if ((sizeof (Val1) > sizeof (double) \
|| sizeof (Val2) > sizeof (double)) \
- && __builtin_classify_type (Val) == 8) \
+ && __builtin_classify_type ((Val1) + (Val2)) == 8) \
__tgmres = Fct##l (Val1, Val2, Val3); \
else if (sizeof (Val1) == sizeof (double) \
|| sizeof (Val2) == sizeof (double) \
- || __builtin_classify_type (Val) != 8) \
+ || __builtin_classify_type ((Val1) \
+ + (Val2)) != 8) \
__tgmres = Fct (Val1, Val2, Val3); \
else \
- __tgmres = Fct (Val1, Val2, Val3); \
+ __tgmres = Fct##f (Val1, Val2, Val3); \
__tgmres; }))
# define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \
@@ -112,15 +114,17 @@
if ((sizeof (Val1) > sizeof (double) \
|| sizeof (Val2) > sizeof (double) \
|| sizeof (Val3) > sizeof (double)) \
- && __builtin_classify_type (Val) == 8) \
+ && __builtin_classify_type ((Val1) + (Val2) \
+ + (Val3)) == 8) \
__tgmres = Fct##l (Val1, Val2, Val3); \
else if (sizeof (Val1) == sizeof (double) \
|| sizeof (Val2) == sizeof (double) \
|| sizeof (Val3) == sizeof (double) \
- || __builtin_classify_type (Val) != 8) \
+ || __builtin_classify_type ((Val1) + (Val2) \
+ + (Val3)) != 8) \
__tgmres = Fct (Val1, Val2, Val3); \
else \
- __tgmres = Fct (Val1, Val2, Val3); \
+ __tgmres = Fct##f (Val1, Val2, Val3); \
__tgmres; }))
/* XXX This definition has to be changed as soon as the compiler understands
@@ -136,8 +140,8 @@
__tgmres = Cfct##l (Val); \
} \
else if (sizeof (__real__ (Val)) == sizeof (double) \
- || (__builtin_classify_type (__real__ (Val)) \
- != 8) \
+ || __builtin_classify_type (__real__ (Val)) \
+ != 8) \
{ \
if (sizeof (__real__ (Val)) == sizeof (Val)) \
__tgmres = Fct (Val); \
@@ -172,7 +176,9 @@
(__extension__ ({ __tgmath_real_type ((Val1) + (Val2)) __tgmres; \
if ((sizeof (__real__ (Val1)) > sizeof (double) \
|| sizeof (__real__ (Val2)) > sizeof (double)) \
- && __builtin_classify_type (__real__ (Val)) == 8) \
+ && __builtin_classify_type (__real__ (Val1) \
+ + __real__ (Val2)) \
+ == 8) \
{ \
if (sizeof (__real__ (Val1)) == sizeof (Val1) \
&& sizeof (__real__ (Val2)) == sizeof (Val2)) \
@@ -182,8 +188,9 @@
} \
else if (sizeof (__real__ (Val1)) == sizeof (double) \
|| sizeof (__real__ (Val2)) == sizeof(double) \
- || (__builtin_classify_type (__real__ (Val)) \
- != 8) \
+ || __builtin_classify_type (__real__ (Val1) \
+ + __real__ (Val2))\
+ != 8) \
{ \
if (sizeof (__real__ (Val1)) == sizeof (Val1) \
&& sizeof (__real__ (Val2)) == sizeof (Val2)) \
@@ -388,7 +395,7 @@
/* Multiply-add function computed as a ternary operation. */
-#define fma(Vat1, Val2, Val3) \
+#define fma(Val1, Val2, Val3) \
__TGMATH_TERNARY_REAL_ONLY (Val1, Val2, Val3, fma)