about summary refs log tree commit diff
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)