diff gcc/config/spu/spu-c.c @ 19:58ad6c70ea60

update gcc from 4.4.0 to 4.4.1.
author kent@firefly.cr.ie.u-ryukyu.ac.jp
date Thu, 24 Sep 2009 13:21:57 +0900
parents a06113de4d67
children 77e2b8dfacca
line wrap: on
line diff
--- a/gcc/config/spu/spu-c.c	Thu Sep 24 13:06:16 2009 +0900
+++ b/gcc/config/spu/spu-c.c	Thu Sep 24 13:21:57 2009 +0900
@@ -32,7 +32,6 @@
 #include "insn-codes.h"
 #include "recog.h"
 #include "optabs.h"
-#include "spu-builtins.h"
 
 
 /* Keep the vector keywords handy for fast comparisons.  */
@@ -101,8 +100,7 @@
 #define SCALAR_TYPE_P(t) (INTEGRAL_TYPE_P (t) \
 			  || SCALAR_FLOAT_TYPE_P (t) \
 			  || POINTER_TYPE_P (t))
-  spu_function_code new_fcode, fcode =
-    DECL_FUNCTION_CODE (fndecl) - END_BUILTINS;
+  int new_fcode, fcode = DECL_FUNCTION_CODE (fndecl) - END_BUILTINS;
   struct spu_builtin_description *desc;
   tree match = NULL_TREE;
 
@@ -122,8 +120,15 @@
       tree decl = spu_builtins[new_fcode].fndecl;
       tree params = TYPE_ARG_TYPES (TREE_TYPE (decl));
       tree arg, param;
+      bool all_scalar;
       int p;
 
+      /* Check whether all parameters are scalar.  */
+      all_scalar = true;
+      for (param = params; param != void_list_node; param = TREE_CHAIN (param))
+	if (!SCALAR_TYPE_P (TREE_VALUE (param)))
+	  all_scalar = false;
+
       for (param = params, arg = fnargs, p = 0;
 	   param != void_list_node;
 	   param = TREE_CHAIN (param), arg = TREE_CHAIN (arg), p++)
@@ -155,10 +160,7 @@
 	     parameter. */
 	  if ((!SCALAR_TYPE_P (param_type)
 	       || !SCALAR_TYPE_P (arg_type)
-	       || ((fcode == SPU_SPLATS || fcode == SPU_PROMOTE
-		    || fcode == SPU_HCMPEQ || fcode == SPU_HCMPGT
-		    || fcode == SPU_MASKB || fcode == SPU_MASKH
-		    || fcode == SPU_MASKW) && p == 0))
+	       || (all_scalar && p == 0))
 	      && !comptypes (TYPE_MAIN_VARIANT (param_type),
 			     TYPE_MAIN_VARIANT (arg_type)))
 	    break;