From 8b55c4bab88b40872feffbb8ddf41b5b8e4d419e Mon Sep 17 00:00:00 2001
From: aldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sun, 30 Jun 2002 01:19:58 +0000
Subject: [PATCH] 2002-06-29  Aldy Hernandez  <aldyh@redhat.com>

        * config/i386/i386.c (ix86_init_mmx_sse_builtins): Use
        build_function_type_list instead of build_function_type.

        * config/ia64/ia64.c (ia64_init_builtins): Same.

        * config/alpha/alpha.c (alpha_init_builtins): Same.

        * config/rs6000/rs6000.c (altivec_init_builtins): Same.

        * config/arm/arm.c (arm_init_builtins): Same.

        * tree.h: Add build_function_type_list prototype.

        * tree.c (build_function_type_list): New.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55109 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog              |  17 ++
 gcc/config/alpha/alpha.c   |  19 +-
 gcc/config/arm/arm.c       |   5 +-
 gcc/config/i386/i386.c     | 458 ++++++++++++----------------------
 gcc/config/ia64/ia64.c     |  44 ++--
 gcc/config/rs6000/rs6000.c | 488 +++++++++++--------------------------
 gcc/tree.c                 |  25 ++
 gcc/tree.h                 |   1 +
 8 files changed, 357 insertions(+), 700 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b4e21eec7527..a1ec75bb271f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,20 @@
+2002-06-29  Aldy Hernandez  <aldyh@redhat.com>
+
+        * config/i386/i386.c (ix86_init_mmx_sse_builtins): Use
+        build_function_type_list instead of build_function_type.
+
+        * config/ia64/ia64.c (ia64_init_builtins): Same.
+
+        * config/alpha/alpha.c (alpha_init_builtins): Same.
+
+        * config/rs6000/rs6000.c (altivec_init_builtins): Same.
+
+        * config/arm/arm.c (arm_init_builtins): Same.
+
+        * tree.h: Add build_function_type_list prototype.
+
+        * tree.c (build_function_type_list): New.
+
 2002-06-29  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	* collect2.c (scan_prog_file): Fix typo in message.
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 24e8c5c5eda7..b109328d34aa 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -6498,22 +6498,17 @@ alpha_init_builtins ()
     if ((target_flags & p->target_mask) == p->target_mask)
       builtin_function (p->name, ftype, p->code, BUILT_IN_MD, NULL);
 
-  ftype = build_function_type (long_integer_type_node,
-			       tree_cons (NULL_TREE,
-					  long_integer_type_node,
-					  void_list_node));
+  ftype = build_function_type_list (long_integer_type_node,
+				    long_integer_type_node, NULL_TREE);
 
   p = one_arg_builtins;
   for (i = 0; i < ARRAY_SIZE (one_arg_builtins); ++i, ++p)
     if ((target_flags & p->target_mask) == p->target_mask)
       builtin_function (p->name, ftype, p->code, BUILT_IN_MD, NULL);
 
-  ftype = build_function_type (long_integer_type_node,
-			       tree_cons (NULL_TREE,
-					  long_integer_type_node,
-					  tree_cons (NULL_TREE,
-						     long_integer_type_node,
-						     void_list_node)));
+  ftype = build_function_type_list (long_integer_type_node,
+				    long_integer_type_node,
+				    long_integer_type_node, NULL_TREE);
 
   p = two_arg_builtins;
   for (i = 0; i < ARRAY_SIZE (two_arg_builtins); ++i, ++p)
@@ -6524,9 +6519,7 @@ alpha_init_builtins ()
   builtin_function ("__builtin_thread_pointer", ftype,
 		    ALPHA_BUILTIN_THREAD_POINTER, BUILT_IN_MD, NULL);
 
-  ftype = build_function_type (void_type_node, tree_cons (NULL_TREE,
-							  ptr_type_node,
-							  void_list_node));
+  ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
   builtin_function ("__builtin_set_thread_pointer", ftype,
 		    ALPHA_BUILTIN_SET_THREAD_POINTER, BUILT_IN_MD, NULL);
 }
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 5dce15b31c30..04212dbc2b28 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -9314,10 +9314,9 @@ arm_init_builtins ()
 
   tree int_ftype_int, void_ftype_pchar;
 
-  /* void func (void *) */
+  /* void func (char *) */
   void_ftype_pchar
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, pchar_type_node, endlink));
+    = build_function_type_list (void_type_node, pchar_type_node, NULL_TREE);
 
   /* int func (int) */
   int_ftype_int
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index f6b11012ab2a..1411bcd150ad 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -11823,7 +11823,6 @@ ix86_init_mmx_sse_builtins ()
 {
   const struct builtin_description * d;
   size_t i;
-  tree endlink = void_list_node;
 
   tree pchar_type_node = build_pointer_type (char_type_node);
   tree pfloat_type_node = build_pointer_type (float_type_node);
@@ -11833,405 +11832,252 @@ ix86_init_mmx_sse_builtins ()
 
   /* Comparisons.  */
   tree int_ftype_v4sf_v4sf
-    = build_function_type (integer_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE,
-						 V4SF_type_node,
-						 endlink)));
+    = build_function_type_list (integer_type_node,
+				V4SF_type_node, V4SF_type_node, NULL_TREE);
   tree v4si_ftype_v4sf_v4sf
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE,
-						 V4SF_type_node,
-						 endlink)));
+    = build_function_type_list (V4SI_type_node,
+				V4SF_type_node, V4SF_type_node, NULL_TREE);
   /* MMX/SSE/integer conversions.  */
   tree int_ftype_v4sf
-    = build_function_type (integer_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      endlink));
+    = build_function_type_list (integer_type_node,
+				V4SF_type_node, NULL_TREE);
   tree int_ftype_v8qi
-    = build_function_type (integer_type_node,
-			   tree_cons (NULL_TREE, V8QI_type_node,
-				      endlink));
+    = build_function_type_list (integer_type_node, V8QI_type_node, NULL_TREE);
   tree v4sf_ftype_v4sf_int
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 endlink)));
+    = build_function_type_list (V4SF_type_node,
+				V4SF_type_node, integer_type_node, NULL_TREE);
   tree v4sf_ftype_v4sf_v2si
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE, V2SI_type_node,
-						 endlink)));
+    = build_function_type_list (V4SF_type_node,
+				V4SF_type_node, V2SI_type_node, NULL_TREE);
   tree int_ftype_v4hi_int
-    = build_function_type (integer_type_node,
-			   tree_cons (NULL_TREE, V4HI_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 endlink)));
+    = build_function_type_list (integer_type_node,
+				V4HI_type_node, integer_type_node, NULL_TREE);
   tree v4hi_ftype_v4hi_int_int
-    = build_function_type (V4HI_type_node,
-			   tree_cons (NULL_TREE, V4HI_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 tree_cons (NULL_TREE,
-							    integer_type_node,
-							    endlink))));
+    = build_function_type_list (V4HI_type_node,
+				integer_type_node, integer_type_node,
+				NULL_TREE);
   /* Miscellaneous.  */
   tree v8qi_ftype_v4hi_v4hi
-    = build_function_type (V8QI_type_node,
-			   tree_cons (NULL_TREE, V4HI_type_node,
-				      tree_cons (NULL_TREE, V4HI_type_node,
-						 endlink)));
+    = build_function_type_list (V8QI_type_node,
+				V4HI_type_node, V4HI_type_node, NULL_TREE);
   tree v4hi_ftype_v2si_v2si
-    = build_function_type (V4HI_type_node,
-			   tree_cons (NULL_TREE, V2SI_type_node,
-				      tree_cons (NULL_TREE, V2SI_type_node,
-						 endlink)));
+    = build_function_type_list (V4HI_type_node,
+				V2SI_type_node, V2SI_type_node, NULL_TREE);
   tree v4sf_ftype_v4sf_v4sf_int
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE, V4SF_type_node,
-						 tree_cons (NULL_TREE,
-							    integer_type_node,
-							    endlink))));
+    = build_function_type_list (V4SF_type_node,
+				V4SF_type_node, V4SF_type_node,
+				integer_type_node, NULL_TREE);
   tree v2si_ftype_v4hi_v4hi
-    = build_function_type (V2SI_type_node,
-			   tree_cons (NULL_TREE, V4HI_type_node,
-				      tree_cons (NULL_TREE, V4HI_type_node,
-						 endlink)));
+    = build_function_type_list (V2SI_type_node,
+				V4HI_type_node, V4HI_type_node, NULL_TREE);
   tree v4hi_ftype_v4hi_int
-    = build_function_type (V4HI_type_node,
-			   tree_cons (NULL_TREE, V4HI_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 endlink)));
+    = build_function_type_list (V4HI_type_node,
+				V4HI_type_node, V4HI_type_node,
+				integer_type_node, NULL_TREE);
   tree v4hi_ftype_v4hi_di
-    = build_function_type (V4HI_type_node,
-			   tree_cons (NULL_TREE, V4HI_type_node,
-				      tree_cons (NULL_TREE,
-						 long_long_integer_type_node,
-						 endlink)));
+    = build_function_type_list (V4HI_type_node,
+				V4HI_type_node, long_long_unsigned_type_node,
+				NULL_TREE);
   tree v2si_ftype_v2si_di
-    = build_function_type (V2SI_type_node,
-			   tree_cons (NULL_TREE, V2SI_type_node,
-				      tree_cons (NULL_TREE,
-						 long_long_integer_type_node,
-						 endlink)));
+    = build_function_type_list (V2SI_type_node,
+				V2SI_type_node, long_long_unsigned_type_node,
+				NULL_TREE);
   tree void_ftype_void
-    = build_function_type (void_type_node, endlink);
+    = build_function_type (void_type_node, void_list_node);
   tree void_ftype_unsigned
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, unsigned_type_node,
-				      endlink));
+    = build_function_type_list (void_type_node, unsigned_type_node, NULL_TREE);
   tree unsigned_ftype_void
-    = build_function_type (unsigned_type_node, endlink);
+    = build_function_type (unsigned_type_node, void_list_node);
   tree di_ftype_void
-    = build_function_type (long_long_unsigned_type_node, endlink);
+    = build_function_type (long_long_unsigned_type_node, void_list_node);
   tree v4sf_ftype_void
-    = build_function_type (V4SF_type_node, endlink);
+    = build_function_type (V4SF_type_node, void_list_node);
   tree v2si_ftype_v4sf
-    = build_function_type (V2SI_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      endlink));
+    = build_function_type_list (V2SI_type_node, V4SF_type_node, NULL_TREE);
   /* Loads/stores.  */
-  tree maskmovq_args = tree_cons (NULL_TREE, V8QI_type_node,
-				  tree_cons (NULL_TREE, V8QI_type_node,
-					     tree_cons (NULL_TREE,
-							pchar_type_node,
-							endlink)));
   tree void_ftype_v8qi_v8qi_pchar
-    = build_function_type (void_type_node, maskmovq_args);
+    = build_function_type_list (void_type_node,
+				V8QI_type_node, V8QI_type_node,
+				pchar_type_node, NULL_TREE);
   tree v4sf_ftype_pfloat
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, pfloat_type_node,
-				      endlink));
+    = build_function_type_list (V4SF_type_node, pfloat_type_node, NULL_TREE);
   /* @@@ the type is bogus */
   tree v4sf_ftype_v4sf_pv2si
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE, pv2si_type_node,
-						 endlink)));
+    = build_function_type_list (V4SF_type_node,
+				V4SF_type_node, pv2di_type_node, NULL_TREE);
   tree void_ftype_pv2si_v4sf
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, pv2si_type_node,
-				      tree_cons (NULL_TREE, V4SF_type_node,
-						 endlink)));
+    = build_function_type_list (void_type_node,
+				pv2di_type_node, V4SF_type_node, NULL_TREE);
   tree void_ftype_pfloat_v4sf
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, pfloat_type_node,
-				      tree_cons (NULL_TREE, V4SF_type_node,
-						 endlink)));
+    = build_function_type_list (void_type_node,
+				pfloat_type_node, V4SF_type_node, NULL_TREE);
   tree void_ftype_pdi_di
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, pdi_type_node,
-				      tree_cons (NULL_TREE,
-						 long_long_unsigned_type_node,
-						 endlink)));
+    = build_function_type_list (void_type_node,
+				pdi_type_node, long_long_unsigned_type_node,
+				NULL_TREE);
   tree void_ftype_pv2di_v2di
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, pv2di_type_node,
-				      tree_cons (NULL_TREE,
-						 V2DI_type_node,
-						 endlink)));
+    = build_function_type_list (void_type_node,
+				pv2di_type_node, V2DI_type_node, NULL_TREE);
   /* Normal vector unops.  */
   tree v4sf_ftype_v4sf
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      endlink));
+    = build_function_type_list (V4SF_type_node, V4SF_type_node, NULL_TREE);
 
   /* Normal vector binops.  */
   tree v4sf_ftype_v4sf_v4sf
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE, V4SF_type_node,
-						 endlink)));
+    = build_function_type_list (V4SF_type_node,
+				V4SF_type_node, V4SF_type_node, NULL_TREE);
   tree v8qi_ftype_v8qi_v8qi
-    = build_function_type (V8QI_type_node,
-			   tree_cons (NULL_TREE, V8QI_type_node,
-				      tree_cons (NULL_TREE, V8QI_type_node,
-						 endlink)));
+    = build_function_type_list (V8QI_type_node,
+				V8QI_type_node, V8QI_type_node, NULL_TREE);
   tree v4hi_ftype_v4hi_v4hi
-    = build_function_type (V4HI_type_node,
-			   tree_cons (NULL_TREE, V4HI_type_node,
-				      tree_cons (NULL_TREE, V4HI_type_node,
-						 endlink)));
+    = build_function_type_list (V4HI_type_node,
+				V4HI_type_node, V4HI_type_node, NULL_TREE);
   tree v2si_ftype_v2si_v2si
-    = build_function_type (V2SI_type_node,
-			   tree_cons (NULL_TREE, V2SI_type_node,
-				      tree_cons (NULL_TREE, V2SI_type_node,
-						 endlink)));
+    = build_function_type_list (V2SI_type_node,
+				V2SI_type_node, V2SI_type_node, NULL_TREE);
   tree di_ftype_di_di
-    = build_function_type (long_long_unsigned_type_node,
-			   tree_cons (NULL_TREE, long_long_unsigned_type_node,
-				      tree_cons (NULL_TREE,
-						 long_long_unsigned_type_node,
-						 endlink)));
+    = build_function_type_list (long_long_unsigned_type_node,
+				long_long_unsigned_type_node,
+				long_long_unsigned_type_node, NULL_TREE);
 
   tree v2si_ftype_v2sf
-    = build_function_type (V2SI_type_node,
-                           tree_cons (NULL_TREE, V2SF_type_node,
-                                      endlink));
+    = build_function_type_list (V2SI_type_node, V2SFmode, NULL_TREE);
   tree v2sf_ftype_v2si
-    = build_function_type (V2SF_type_node,
-                           tree_cons (NULL_TREE, V2SI_type_node,
-                                      endlink));
+    = build_function_type_list (V2SF_type_node, V2SI_type_node, NULL_TREE);
   tree v2si_ftype_v2si
-    = build_function_type (V2SI_type_node,
-                           tree_cons (NULL_TREE, V2SI_type_node,
-                                      endlink));
+    = build_function_type_list (V2SI_type_node, V2SI_type_node, NULL_TREE);
   tree v2sf_ftype_v2sf
-    = build_function_type (V2SF_type_node,
-                           tree_cons (NULL_TREE, V2SF_type_node,
-                                      endlink));
+    = build_function_type_list (V2SF_type_node, V2SF_type_node, NULL_TREE);
   tree v2sf_ftype_v2sf_v2sf
-    = build_function_type (V2SF_type_node,
-                           tree_cons (NULL_TREE, V2SF_type_node,
-                                      tree_cons (NULL_TREE,
-                                                 V2SF_type_node,
-                                                 endlink)));
+    = build_function_type_list (V2SF_type_node,
+				V2SF_type_node, V2SF_type_node, NULL_TREE);
   tree v2si_ftype_v2sf_v2sf
-    = build_function_type (V2SI_type_node,
-                           tree_cons (NULL_TREE, V2SF_type_node,
-                                      tree_cons (NULL_TREE,
-                                                 V2SF_type_node,
-                                                 endlink)));
+    = build_function_type_list (V2SI_type_node,
+				V2SF_type_node, V2SF_type_node, NULL_TREE);
   tree pint_type_node    = build_pointer_type (integer_type_node);
   tree pdouble_type_node = build_pointer_type (double_type_node);
   tree int_ftype_v2df_v2df
-    = build_function_type (integer_type_node,
-			   tree_cons (NULL_TREE, V2DF_type_node,
-			   tree_cons (NULL_TREE, V2DF_type_node, endlink)));
+    = build_function_type_list (integer_type_node,
+				V2DF_type_node, V2DF_type_node, NULL_TREE);
 
   tree ti_ftype_void
-    = build_function_type (intTI_type_node, endlink);
+    = build_function_type (intTI_type_node, void_list_node);
   tree ti_ftype_ti_ti
-    = build_function_type (intTI_type_node,
-			   tree_cons (NULL_TREE, intTI_type_node,
-				      tree_cons (NULL_TREE, intTI_type_node,
-						 endlink)));
+    = build_function_type_list (intTI_type_node,
+				intTI_type_node, intTI_type_node, NULL_TREE);
   tree void_ftype_pvoid
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, ptr_type_node, endlink));
+    = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
   tree v2di_ftype_di
-    = build_function_type (V2DI_type_node,
-			   tree_cons (NULL_TREE, long_long_unsigned_type_node,
-				      endlink));
+    = build_function_type_list (V2DI_type_node,
+				long_long_unsigned_type_node, NULL_TREE);
   tree v4sf_ftype_v4si
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node, endlink));
+    = build_function_type_list (V4SF_type_node, V4SI_type_node, NULL_TREE);
   tree v4si_ftype_v4sf
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node, endlink));
+    = build_function_type_list (V4SI_type_node, V4SF_type_node, NULL_TREE);
   tree v2df_ftype_v4si
-    = build_function_type (V2DF_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node, endlink));
+    = build_function_type_list (V2DF_type_node, V4SI_type_node, NULL_TREE);
   tree v4si_ftype_v2df
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V2DF_type_node, endlink));
+    = build_function_type_list (V4SI_type_node, V2DF_type_node, NULL_TREE);
   tree v2si_ftype_v2df
-    = build_function_type (V2SI_type_node,
-			   tree_cons (NULL_TREE, V2DF_type_node, endlink));
+    = build_function_type_list (V2SI_type_node, V2DF_type_node, NULL_TREE);
   tree v4sf_ftype_v2df
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V2DF_type_node, endlink));
+    = build_function_type_list (V4SF_type_node, V2DF_type_node, NULL_TREE);
   tree v2df_ftype_v2si
-    = build_function_type (V2DF_type_node,
-			   tree_cons (NULL_TREE, V2SI_type_node, endlink));
+    = build_function_type_list (V2DF_type_node, V2SI_type_node, NULL_TREE);
   tree v2df_ftype_v4sf
-    = build_function_type (V2DF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node, endlink));
+    = build_function_type_list (V2DF_type_node, V4SF_type_node, NULL_TREE);
   tree int_ftype_v2df
-    = build_function_type (integer_type_node,
-			   tree_cons (NULL_TREE, V2DF_type_node, endlink));
+    = build_function_type_list (integer_type_node, V2DF_type_node, NULL_TREE);
   tree v2df_ftype_v2df_int
-    = build_function_type (V2DF_type_node,
-			   tree_cons (NULL_TREE, V2DF_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 endlink)));
+    = build_function_type_list (V2DF_type_node,
+				V2DF_type_node, integer_type_node, NULL_TREE);
   tree v4sf_ftype_v4sf_v2df
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE, V2DF_type_node,
-						 endlink)));
+    = build_function_type_list (V4SF_type_node,
+				V4SF_type_node, V2DF_type_node, NULL_TREE);
   tree v2df_ftype_v2df_v4sf
-    = build_function_type (V2DF_type_node,
-			   tree_cons (NULL_TREE, V2DF_type_node,
-				      tree_cons (NULL_TREE, V4SF_type_node,
-						 endlink)));
+    = build_function_type_list (V2DF_type_node,
+				V2DF_type_node, V4SF_type_node, NULL_TREE);
   tree v2df_ftype_v2df_v2df_int
-    = build_function_type (V2DF_type_node,
-			   tree_cons (NULL_TREE, V2DF_type_node,
-				      tree_cons (NULL_TREE, V2DF_type_node,
-						 tree_cons (NULL_TREE,
-							    integer_type_node,
-							    endlink))));
+    = build_function_type_list (V2DF_type_node,
+				V2DF_type_node, V2DF_type_node,
+				integer_type_node,
+				NULL_TREE);
   tree v2df_ftype_v2df_pv2si
-    = build_function_type (V2DF_type_node,
-			   tree_cons (NULL_TREE, V2DF_type_node,
-				      tree_cons (NULL_TREE, pv2si_type_node,
-						 endlink)));
+    = build_function_type_list (V2DF_type_node,
+				V2DF_type_node, pv2si_type_node, NULL_TREE);
   tree void_ftype_pv2si_v2df
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, pv2si_type_node,
-				      tree_cons (NULL_TREE, V2DF_type_node,
-						 endlink)));
+    = build_function_type_list (void_type_node,
+				pv2si_type_node, V2DF_type_node, NULL_TREE);
   tree void_ftype_pdouble_v2df
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, pdouble_type_node,
-				      tree_cons (NULL_TREE, V2DF_type_node,
-						 endlink)));
+    = build_function_type_list (void_type_node,
+				pdouble_type_node, V2DF_type_node, NULL_TREE);
   tree void_ftype_pint_int
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, pint_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 endlink)));
-  tree maskmovdqu_args = tree_cons (NULL_TREE, V16QI_type_node,
-				    tree_cons (NULL_TREE, V16QI_type_node,
-					       tree_cons (NULL_TREE,
-							  pchar_type_node,
-							  endlink)));
+    = build_function_type_list (void_type_node,
+				pint_type_node, integer_type_node, NULL_TREE);
   tree void_ftype_v16qi_v16qi_pchar
-    = build_function_type (void_type_node, maskmovdqu_args);
+    = build_function_type_list (void_type_node,
+				V16QI_type_node, V16QI_type_node,
+				pchar_type_node, NULL_TREE);
   tree v2df_ftype_pdouble
-    = build_function_type (V2DF_type_node,
-			   tree_cons (NULL_TREE, pdouble_type_node,
-				      endlink));
+    = build_function_type_list (V2DF_type_node, pdouble_type_node, NULL_TREE);
   tree v2df_ftype_v2df_v2df
-    = build_function_type (V2DF_type_node,
-			   tree_cons (NULL_TREE, V2DF_type_node,
-				      tree_cons (NULL_TREE, V2DF_type_node,
-						 endlink)));
+    = build_function_type_list (V2DF_type_node,
+				V2DF_type_node, V2DF_type_node, NULL_TREE);
   tree v16qi_ftype_v16qi_v16qi
-    = build_function_type (V16QI_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node,
-				      tree_cons (NULL_TREE, V16QI_type_node,
-						 endlink)));
+    = build_function_type_list (V16QI_type_node,
+				V16QI_type_node, V16QI_type_node, NULL_TREE);
   tree v8hi_ftype_v8hi_v8hi
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, V8HI_type_node,
-						 endlink)));
+    = build_function_type_list (V8HI_type_node,
+				V8HI_type_node, V8HI_type_node, NULL_TREE);
   tree v4si_ftype_v4si_v4si
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node,
-				      tree_cons (NULL_TREE, V4SI_type_node,
-						 endlink)));
+    = build_function_type_list (V4SI_type_node,
+				V4SI_type_node, V4SI_type_node, NULL_TREE);
   tree v2di_ftype_v2di_v2di
-    = build_function_type (V2DI_type_node,
-			   tree_cons (NULL_TREE, V2DI_type_node,
-				      tree_cons (NULL_TREE, V2DI_type_node,
-						 endlink)));
+    = build_function_type_list (V2DI_type_node,
+				V2DI_type_node, V2DI_type_node, NULL_TREE);
   tree v2di_ftype_v2df_v2df
-    = build_function_type (V2DI_type_node,
-			   tree_cons (NULL_TREE, V2DF_type_node,
-				      tree_cons (NULL_TREE, V2DF_type_node,
-						 endlink)));
+    = build_function_type_list (V2DI_type_node,
+				V2DF_type_node, V2DF_type_node, NULL_TREE);
   tree v2df_ftype_v2df
-    = build_function_type (V2DF_type_node,
-			   tree_cons (NULL_TREE, V2DF_type_node,
-				      endlink));
+    = build_function_type_list (V2DF_type_node, V2DF_type_node, NULL_TREE);
   tree v2df_ftype_double
-    = build_function_type (V2DF_type_node,
-			   tree_cons (NULL_TREE, double_type_node,
-				      endlink));
+    = build_function_type_list (V2DF_type_node, double_type_node, NULL_TREE);
   tree v2df_ftype_double_double
-    = build_function_type (V2DF_type_node,
-			   tree_cons (NULL_TREE, double_type_node,
-				      tree_cons (NULL_TREE, double_type_node,
-						 endlink)));
+    = build_function_type_list (V2DF_type_node,
+				double_type_node, double_type_node, NULL_TREE);
   tree int_ftype_v8hi_int
-    = build_function_type (integer_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 endlink)));
+    = build_function_type_list (integer_type_node,
+				V8HI_type_node, integer_type_node, NULL_TREE);
   tree v8hi_ftype_v8hi_int_int
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 tree_cons (NULL_TREE,
-							    integer_type_node,
-							    endlink))));
+    = build_function_type_list (V8HI_type_node,
+				V8HI_type_node, integer_type_node,
+				integer_type_node, NULL_TREE);
   tree v2di_ftype_v2di_int
-    = build_function_type (V2DI_type_node,
-			   tree_cons (NULL_TREE, V2DI_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 endlink)));
+    = build_function_type_list (V2DI_type_node,
+				V2DI_type_node, integer_type_node, NULL_TREE);
   tree v4si_ftype_v4si_int
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 endlink)));
+    = build_function_type_list (V4SI_type_node,
+				V4SI_type_node, integer_type_node, NULL_TREE);
   tree v8hi_ftype_v8hi_int
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 endlink)));
+    = build_function_type_list (V8HI_type_node,
+				V8HI_type_node, integer_type_node, NULL_TREE);
   tree v8hi_ftype_v8hi_v2di
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, V2DI_type_node,
-						 endlink)));
+    = build_function_type_list (V8HI_type_node,
+				V8HI_type_node, V2DI_type_node, NULL_TREE);
   tree v4si_ftype_v4si_v2di
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node,
-				      tree_cons (NULL_TREE, V2DI_type_node,
-						 endlink)));
+    = build_function_type_list (V4SI_type_node,
+				V4SI_type_node, V2DI_type_node, NULL_TREE);
   tree v4si_ftype_v8hi_v8hi
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, V8HI_type_node,
-						 endlink)));
+    = build_function_type_list (V4SI_type_node,
+				V8HI_type_node, V8HI_type_node, NULL_TREE);
   tree di_ftype_v8qi_v8qi
-    = build_function_type (long_long_unsigned_type_node,
-			   tree_cons (NULL_TREE, V8QI_type_node,
-				      tree_cons (NULL_TREE, V8QI_type_node,
-						 endlink)));
+    = build_function_type_list (long_long_unsigned_type_node,
+				V8QI_type_node, V8QI_type_node, NULL_TREE);
   tree v2di_ftype_v16qi_v16qi
-    = build_function_type (V2DI_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node,
-				      tree_cons (NULL_TREE, V16QI_type_node,
-						 endlink)));
+    = build_function_type_list (V2DI_type_node,
+				V16QI_type_node, V16QI_type_node, NULL_TREE);
   tree int_ftype_v16qi
-    = build_function_type (integer_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node, endlink));
+    = build_function_type_list (integer_type_node, V16QI_type_node, NULL_TREE);
 
   /* Add all builtins that are more or less simple operations on two
      operands.  */
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index e7ef534873c2..4f7380af976e 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -7506,52 +7506,40 @@ ia64_init_builtins ()
 {
   tree psi_type_node = build_pointer_type (integer_type_node);
   tree pdi_type_node = build_pointer_type (long_integer_type_node);
-  tree endlink = void_list_node;
 
   /* __sync_val_compare_and_swap_si, __sync_bool_compare_and_swap_si */
   tree si_ftype_psi_si_si
-    = build_function_type (integer_type_node,
-                           tree_cons (NULL_TREE, psi_type_node,
-                                      tree_cons (NULL_TREE, integer_type_node,
-                                                 tree_cons (NULL_TREE,
-							    integer_type_node,
-                                                            endlink))));
+    = build_function_type_list (integer_type_node,
+				psi_type_node, integer_type_node,
+				integer_type_node, NULL_TREE);
 
   /* __sync_val_compare_and_swap_di, __sync_bool_compare_and_swap_di */
   tree di_ftype_pdi_di_di
-    = build_function_type (long_integer_type_node,
-                           tree_cons (NULL_TREE, pdi_type_node,
-                                      tree_cons (NULL_TREE,
-						 long_integer_type_node,
-                                                 tree_cons (NULL_TREE,
-							long_integer_type_node,
-							endlink))));
+    = build_function_type_list (long_integer_type_node,
+				pdi_type_node, long_integer_type_node,
+				long_integer_type_node, NULL_TREE);
   /* __sync_synchronize */
   tree void_ftype_void
-    = build_function_type (void_type_node, endlink);
+    = build_function_type (void_type_node, void_list_node);
 
   /* __sync_lock_test_and_set_si */
   tree si_ftype_psi_si
-    = build_function_type (integer_type_node,
-                           tree_cons (NULL_TREE, psi_type_node,
-                           tree_cons (NULL_TREE, integer_type_node, endlink)));
+    = build_function_type_list (integer_type_node,
+				psi_type_node, integer_type_node, NULL_TREE);
 
   /* __sync_lock_test_and_set_di */
   tree di_ftype_pdi_di
-    = build_function_type (long_integer_type_node,
-                           tree_cons (NULL_TREE, pdi_type_node,
-                           tree_cons (NULL_TREE, long_integer_type_node,
-				      endlink)));
+    = build_function_type_list (long_integer_type_node,
+				pdi_type_node, long_integer_type_node,
+				NULL_TREE);
 
   /* __sync_lock_release_si */
   tree void_ftype_psi
-    = build_function_type (void_type_node, tree_cons (NULL_TREE, psi_type_node,
-						      endlink));
+    = build_function_type_list (void_type_node, psi_type_node, NULL_TREE);
 
   /* __sync_lock_release_di */
   tree void_ftype_pdi
-    = build_function_type (void_type_node, tree_cons (NULL_TREE, pdi_type_node,
-						      endlink));
+    = build_function_type_list (void_type_node, pdi_type_node, NULL_TREE);
 
 #define def_builtin(name, type, code) \
   builtin_function ((name), (type), (code), BUILT_IN_MD, NULL)
@@ -7578,11 +7566,11 @@ ia64_init_builtins ()
 	       IA64_BUILTIN_LOCK_RELEASE_DI);
 
   def_builtin ("__builtin_ia64_bsp",
-	       build_function_type (ptr_type_node, endlink),
+	       build_function_type (ptr_type_node, void_list_node),
 	       IA64_BUILTIN_BSP);
 
   def_builtin ("__builtin_ia64_flushrs", 
-	       build_function_type (void_type_node, endlink), 
+	       build_function_type (void_type_node, void_list_node), 
 	       IA64_BUILTIN_FLUSHRS);
 
   def_builtin ("__sync_fetch_and_add_si", si_ftype_psi_si,
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 8420d7b8ea5b..20cb29942ed4 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -4281,8 +4281,6 @@ altivec_init_builtins (void)
   struct builtin_description_predicates *dp;
   size_t i;
 
-  tree endlink = void_list_node;
-
   tree pint_type_node = build_pointer_type (integer_type_node);
   tree pvoid_type_node = build_pointer_type (void_type_node);
   tree pshort_type_node = build_pointer_type (short_integer_type_node);
@@ -4290,423 +4288,213 @@ altivec_init_builtins (void)
   tree pfloat_type_node = build_pointer_type (float_type_node);
 
   tree v4sf_ftype_v4sf_v4sf_v16qi
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE, V4SF_type_node,
-						 tree_cons (NULL_TREE, 
-							    V16QI_type_node,
-							    endlink))));
+    = build_function_type_list (V4SF_type_node,
+				V4SF_type_node, V4SF_type_node,
+				V16QI_type_node, NULL_TREE);
   tree v4si_ftype_v4si_v4si_v16qi
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node,
-				      tree_cons (NULL_TREE, V4SI_type_node,
-						 tree_cons (NULL_TREE, 
-							    V16QI_type_node,
-							    endlink))));
+    = build_function_type_list (V4SI_type_node,
+				V4SI_type_node, V4SI_type_node,
+				V16QI_type_node, NULL_TREE);
   tree v8hi_ftype_v8hi_v8hi_v16qi
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, V8HI_type_node,
-						 tree_cons (NULL_TREE, 
-							    V16QI_type_node,
-							    endlink))));
+    = build_function_type_list (V8HI_type_node,
+				V8HI_type_node, V8HI_type_node,
+				V16QI_type_node, NULL_TREE);
   tree v16qi_ftype_v16qi_v16qi_v16qi
-    = build_function_type (V16QI_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node,
-				      tree_cons (NULL_TREE, V16QI_type_node,
-						 tree_cons (NULL_TREE, 
-							    V16QI_type_node,
-							    endlink))));
-
-  /* V4SI foo (char).  */
+    = build_function_type_list (V16QI_type_node,
+				V16QI_type_node, V16QI_type_node,
+				V16QI_type_node, NULL_TREE);
   tree v4si_ftype_char
-    = build_function_type (V4SI_type_node,
-		           tree_cons (NULL_TREE, char_type_node, endlink));
-
-  /* V8HI foo (char).  */
+    = build_function_type_list (V4SI_type_node, char_type_node, NULL_TREE);
   tree v8hi_ftype_char
-    = build_function_type (V8HI_type_node,
-		           tree_cons (NULL_TREE, char_type_node, endlink));
-
-  /* V16QI foo (char).  */
+    = build_function_type_list (V8HI_type_node, char_type_node, NULL_TREE);
   tree v16qi_ftype_char
-    = build_function_type (V16QI_type_node,
-		           tree_cons (NULL_TREE, char_type_node, endlink));
-  /* V4SF foo (V4SF).  */
+    = build_function_type_list (V16QI_type_node, char_type_node, NULL_TREE);
   tree v4sf_ftype_v4sf
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node, endlink));
-
-  /* V4SI foo (int *).  */
+    = build_function_type_list (V4SF_type_node, V4SF_type_node, NULL_TREE);
   tree v4si_ftype_pint
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, pint_type_node, endlink));
-  /* V8HI foo (short *).  */
+    = build_function_type_list (V4SI_type_node, pint_type_node, NULL_TREE);
   tree v8hi_ftype_pshort
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, pshort_type_node, endlink));
-  /* V16QI foo (char *).  */
+    = build_function_type_list (V8HI_type_node, pshort_type_node, NULL_TREE);
   tree v16qi_ftype_pchar
-    = build_function_type (V16QI_type_node,
-			   tree_cons (NULL_TREE, pchar_type_node, endlink));
-  /* V4SF foo (float *).  */
+    = build_function_type_list (V16QI_type_node, pchar_type_node, NULL_TREE);
   tree v4sf_ftype_pfloat
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, pfloat_type_node, endlink));
-
-  /* V8HI foo (V16QI).  */
+    = build_function_type_list (V4SF_type_node, pfloat_type_node, NULL_TREE);
   tree v8hi_ftype_v16qi
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node, endlink));
-
-  /* void foo (void *, int, char/literal).  */
+    = build_function_type_list (V8HI_type_node, V16QI_type_node, NULL_TREE);
   tree void_ftype_pvoid_int_char
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, pvoid_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 tree_cons (NULL_TREE,
-							    char_type_node,
-							    endlink))));
-
-  /* void foo (int *, V4SI).  */
+    = build_function_type_list (void_type_node,
+				pvoid_type_node, integer_type_node,
+				char_type_node, NULL_TREE);
   tree void_ftype_pint_v4si
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, pint_type_node,
-				      tree_cons (NULL_TREE, V4SI_type_node,
-						 endlink)));
-  /* void foo (short *, V8HI).  */
+    = build_function_type_list (void_type_node,
+				pint_type_node, V4SI_type_node, NULL_TREE);
   tree void_ftype_pshort_v8hi
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, pshort_type_node,
-				      tree_cons (NULL_TREE, V8HI_type_node,
-						 endlink)));
-  /* void foo (char *, V16QI).  */
+    = build_function_type_list (void_type_node,
+				pshort_type_node, V8HI_type_node, NULL_TREE);
   tree void_ftype_pchar_v16qi
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, pchar_type_node,
-				      tree_cons (NULL_TREE, V16QI_type_node,
-						 endlink)));
-  /* void foo (float *, V4SF).  */
+    = build_function_type_list (void_type_node,
+				pchar_type_node, V16QI_type_node, NULL_TREE);
   tree void_ftype_pfloat_v4sf
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, pfloat_type_node,
-				      tree_cons (NULL_TREE, V4SF_type_node,
-						 endlink)));
-
-  /* void foo (V4SI).  */
+    = build_function_type_list (void_type_node,
+				pfloat_type_node, V4SF_type_node, NULL_TREE);
   tree void_ftype_v4si
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node,
-				      endlink));
-
-  /* void foo (vint, int, void *).  */
+    = build_function_type_list (void_type_node, V4SI_type_node, NULL_TREE);
   tree void_ftype_v4si_int_pvoid
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 tree_cons (NULL_TREE,
-							    pvoid_type_node,
-							    endlink))));
-
-  /* void foo (vchar, int, void *).  */
+    = build_function_type_list (void_type_node,
+				V4SI_type_node, integer_type_node,
+				pvoid_type_node, NULL_TREE);
+
   tree void_ftype_v16qi_int_pvoid
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 tree_cons (NULL_TREE,
-							    pvoid_type_node,
-							    endlink))));
-
-  /* void foo (vshort, int, void *).  */
+    = build_function_type_list (void_type_node,
+				V16QI_type_node, integer_type_node,
+				pvoid_type_node, NULL_TREE);
   tree void_ftype_v8hi_int_pvoid
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, integer_type_node,
-						 tree_cons (NULL_TREE,
-							    pvoid_type_node,
-							    endlink))));
-
-  /* void foo (char).  */
+    = build_function_type_list (void_type_node,
+				V8HI_type_node, integer_type_node,
+				pvoid_type_node, NULL_TREE);
   tree void_ftype_qi
-    = build_function_type (void_type_node,
-			   tree_cons (NULL_TREE, char_type_node,
-				      endlink));
-
-  /* void foo (void).  */
+    = build_function_type_list (void_type_node, char_type_node, NULL_TREE);
   tree void_ftype_void
     = build_function_type (void_type_node, void_list_node);
-
-  /* vshort foo (void).  */
   tree v8hi_ftype_void
     = build_function_type (V8HI_type_node, void_list_node);
 
   tree v4si_ftype_v4si_v4si
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node,
-				      tree_cons (NULL_TREE, V4SI_type_node,
-						 endlink)));
-
-  /* These are for the unsigned 5 bit literals.  */
-
+    = build_function_type_list (V4SI_type_node,
+				V4SI_type_node, V4SI_type_node, NULL_TREE);
   tree v4sf_ftype_v4si_char
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node,
-				      tree_cons (NULL_TREE, char_type_node,
-						 endlink)));
+    = build_function_type_list (V4SF_type_node,
+				V4SI_type_node, char_type_node, NULL_TREE);
   tree v4si_ftype_v4sf_char
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE, char_type_node,
-						 endlink)));
+    = build_function_type_list (V4SI_type_node,
+				V4SF_type_node, char_type_node, NULL_TREE);
   tree v4si_ftype_v4si_char
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node,
-				      tree_cons (NULL_TREE, char_type_node,
-						 endlink)));
+    = build_function_type_list (V4SI_type_node,
+				V4SI_type_node, char_type_node, NULL_TREE);
   tree v8hi_ftype_v8hi_char
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, char_type_node,
-						 endlink)));
+    = build_function_type_list (V8HI_type_node,
+				V8HI_type_node, char_type_node, NULL_TREE);
   tree v16qi_ftype_v16qi_char
-    = build_function_type (V16QI_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node,
-				      tree_cons (NULL_TREE, char_type_node,
-						 endlink)));
-
-  /* These are for the unsigned 4 bit literals.  */
-
+    = build_function_type_list (V16QI_type_node,
+				V16QI_type_node, char_type_node, NULL_TREE);
   tree v16qi_ftype_v16qi_v16qi_char
-    = build_function_type (V16QI_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node,
-				      tree_cons (NULL_TREE, V16QI_type_node,
-						 tree_cons (NULL_TREE,
-							    char_type_node,
-							    endlink))));
-
+    = build_function_type_list (V16QI_type_node,
+				V16QI_type_node, V16QI_type_node,
+				char_type_node, NULL_TREE);
   tree v8hi_ftype_v8hi_v8hi_char
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, V8HI_type_node,
-						 tree_cons (NULL_TREE,
-							    char_type_node,
-							    endlink))));
-
+    = build_function_type_list (V8HI_type_node,
+				V8HI_type_node, V8HI_type_node,
+				char_type_node, NULL_TREE);
   tree v4si_ftype_v4si_v4si_char
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node,
-				      tree_cons (NULL_TREE, V4SI_type_node,
-						 tree_cons (NULL_TREE,
-							    char_type_node,
-							    endlink))));
-
+    = build_function_type_list (V4SI_type_node,
+				V4SI_type_node, V4SI_type_node,
+				char_type_node, NULL_TREE);
   tree v4sf_ftype_v4sf_v4sf_char
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE, V4SF_type_node,
-						 tree_cons (NULL_TREE,
-							    char_type_node,
-							    endlink))));
-
-  /* End of 4 bit literals.  */
-
+    = build_function_type_list (V4SF_type_node,
+				V4SF_type_node, V4SF_type_node,
+				char_type_node, NULL_TREE);
   tree v4sf_ftype_v4sf_v4sf
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE, V4SF_type_node,
-						 endlink)));
+    = build_function_type_list (V4SF_type_node,
+				V4SF_type_node, V4SF_type_node, NULL_TREE);
   tree v4sf_ftype_v4sf_v4sf_v4si
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE, V4SF_type_node,
-						 tree_cons (NULL_TREE,
-							    V4SI_type_node,
-							    endlink))));
+    = build_function_type_list (V4SF_type_node,
+				V4SF_type_node, V4SF_type_node,
+				V4SI_type_node, NULL_TREE);
   tree v4sf_ftype_v4sf_v4sf_v4sf
-    = build_function_type (V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE, V4SF_type_node,
-						 tree_cons (NULL_TREE, 
-							    V4SF_type_node,
-							    endlink))));
+    = build_function_type_list (V4SF_type_node,
+				V4SF_type_node, V4SF_type_node,
+				V4SF_type_node, NULL_TREE);
   tree v4si_ftype_v4si_v4si_v4si 
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node,
-				      tree_cons (NULL_TREE, V4SI_type_node,
-						 tree_cons (NULL_TREE,
-							    V4SI_type_node,
-							    endlink))));
-
+    = build_function_type_list (V4SI_type_node,
+				V4SI_type_node, V4SI_type_node,
+				V4SI_type_node, NULL_TREE);
   tree v8hi_ftype_v8hi_v8hi
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, V8HI_type_node,
-						 endlink)));
+    = build_function_type_list (V8HI_type_node,
+				V8HI_type_node, V8HI_type_node, NULL_TREE);
   tree v8hi_ftype_v8hi_v8hi_v8hi
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, V8HI_type_node,
-						 tree_cons (NULL_TREE, 
-							    V8HI_type_node,
-							    endlink))));
+    = build_function_type_list (V8HI_type_node,
+				V8HI_type_node, V8HI_type_node,
+				V8HI_type_node, NULL_TREE);
  tree v4si_ftype_v8hi_v8hi_v4si
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, V8HI_type_node,
-						 tree_cons (NULL_TREE,
-							    V4SI_type_node,
-							    endlink))));
+    = build_function_type_list (V4SI_type_node,
+				V8HI_type_node, V8HI_type_node,
+				V4SI_type_node, NULL_TREE);
  tree v4si_ftype_v16qi_v16qi_v4si
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node,
-				      tree_cons (NULL_TREE, V16QI_type_node,
-						 tree_cons (NULL_TREE,
-							    V4SI_type_node,
-							    endlink))));
-  
+    = build_function_type_list (V4SI_type_node,
+				V16QI_type_node, V16QI_type_node,
+				V4SI_type_node, NULL_TREE);
   tree v16qi_ftype_v16qi_v16qi
-    = build_function_type (V16QI_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node,
-				      tree_cons (NULL_TREE, V16QI_type_node,
-						 endlink)));
-  
+    = build_function_type_list (V16QI_type_node,
+				V16QI_type_node, V16QI_type_node, NULL_TREE);
   tree v4si_ftype_v4sf_v4sf
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE, V4SF_type_node,
-						 endlink)));
-
+    = build_function_type_list (V4SI_type_node,
+				V4SF_type_node, V4SF_type_node, NULL_TREE);
   tree v4si_ftype_v4si
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node, endlink));
-
+    = build_function_type_list (V4SI_type_node, V4SI_type_node, NULL_TREE);
   tree v8hi_ftype_v8hi
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node, endlink));
-
+    = build_function_type_list (V8HI_type_node, V8HI_type_node, NULL_TREE);
   tree v16qi_ftype_v16qi
-    = build_function_type (V16QI_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node, endlink));
-
+    = build_function_type_list (V16QI_type_node, V16QI_type_node, NULL_TREE);
   tree v8hi_ftype_v16qi_v16qi
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node,
-				      tree_cons (NULL_TREE, V16QI_type_node,
-						 endlink)));
-
+    = build_function_type_list (V8HI_type_node,
+				V16QI_type_node, V16QI_type_node, NULL_TREE);
   tree v4si_ftype_v8hi_v8hi
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, V8HI_type_node,
-						 endlink)));
-
+    = build_function_type_list (V4SI_type_node,
+				V8HI_type_node, V8HI_type_node, NULL_TREE);
   tree v8hi_ftype_v4si_v4si
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node,
-				      tree_cons (NULL_TREE, V4SI_type_node,
-						 endlink)));
-
+    = build_function_type_list (V8HI_type_node,
+				V4SI_type_node, V4SI_type_node, NULL_TREE);
   tree v16qi_ftype_v8hi_v8hi
-    = build_function_type (V16QI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, V8HI_type_node,
-						 endlink)));
-
+    = build_function_type_list (V16QI_type_node,
+				V8HI_type_node, V8HI_type_node, NULL_TREE);
   tree v4si_ftype_v16qi_v4si
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node,
-				      tree_cons (NULL_TREE, V4SI_type_node,
-						 endlink)));
-
+    = build_function_type_list (V4SI_type_node,
+				V16QI_type_node, V4SI_type_node, NULL_TREE);
   tree v4si_ftype_v16qi_v16qi
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node,
-				      tree_cons (NULL_TREE, V16QI_type_node,
-						 endlink)));
-
+    = build_function_type_list (V4SI_type_node,
+				V16QI_type_node, V16QI_type_node, NULL_TREE);
   tree v4si_ftype_v8hi_v4si
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, V4SI_type_node,
-						 endlink)));
-
+    = build_function_type_list (V4SI_type_node,
+				V8HI_type_node, V4SI_type_node, NULL_TREE);
   tree v4si_ftype_v8hi
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node, endlink));
-
+    = build_function_type_list (V4SI_type_node, V8HI_type_node, NULL_TREE);
   tree int_ftype_v4si_v4si
-    = build_function_type (integer_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node,
-				      tree_cons (NULL_TREE, V4SI_type_node,
-						 endlink)));
-
+    = build_function_type_list (integer_type_node,
+				V4SI_type_node, V4SI_type_node, NULL_TREE);
   tree int_ftype_v4sf_v4sf
-    = build_function_type (integer_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      tree_cons (NULL_TREE, V4SF_type_node,
-						 endlink)));
-
+    = build_function_type_list (integer_type_node,
+				V4SF_type_node, V4SF_type_node, NULL_TREE);
   tree int_ftype_v16qi_v16qi
-    = build_function_type (integer_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node,
-				      tree_cons (NULL_TREE, V16QI_type_node,
-						 endlink)));
-
+    = build_function_type_list (integer_type_node,
+				V16QI_type_node, V16QI_type_node, NULL_TREE);
   tree int_ftype_int_v4si_v4si
-    = build_function_type
-    (integer_type_node,
-     tree_cons (NULL_TREE, integer_type_node,
-		tree_cons (NULL_TREE, V4SI_type_node,
-			   tree_cons (NULL_TREE, V4SI_type_node,
-				      endlink))));
-
+    = build_function_type_list (integer_type_node,
+				integer_type_node, V4SI_type_node,
+				V4SI_type_node, NULL_TREE);
   tree int_ftype_int_v4sf_v4sf
-    = build_function_type
-    (integer_type_node,
-     tree_cons (NULL_TREE, integer_type_node,
-		tree_cons (NULL_TREE, V4SF_type_node,
-			   tree_cons (NULL_TREE, V4SF_type_node,
-				      endlink))));
-
+    = build_function_type_list (integer_type_node,
+				integer_type_node, V4SF_type_node,
+				V4SF_type_node, NULL_TREE);
   tree int_ftype_int_v8hi_v8hi
-    = build_function_type
-    (integer_type_node,
-     tree_cons (NULL_TREE, integer_type_node,
-		 tree_cons (NULL_TREE, V8HI_type_node,
-			    tree_cons (NULL_TREE, V8HI_type_node,
-				       endlink))));
-
+    = build_function_type_list (integer_type_node,
+				integer_type_node, V8HI_type_node,
+				V8HI_type_node, NULL_TREE);
   tree int_ftype_int_v16qi_v16qi
-    = build_function_type
-    (integer_type_node,
-     tree_cons (NULL_TREE, integer_type_node,
-		tree_cons (NULL_TREE, V16QI_type_node,
-			   tree_cons (NULL_TREE, V16QI_type_node,
-				      endlink))));
-
+    = build_function_type_list (integer_type_node,
+				integer_type_node, V16QI_type_node,
+				V16QI_type_node, NULL_TREE);
   tree v16qi_ftype_int_pvoid
-    = build_function_type (V16QI_type_node,
-			   tree_cons (NULL_TREE, integer_type_node,
-				      tree_cons (NULL_TREE, pvoid_type_node,
-						 endlink)));
-
+    = build_function_type_list (V16QI_type_node,
+				integer_type_node, pvoid_type_node, NULL_TREE);
   tree v4si_ftype_int_pvoid
-    = build_function_type (V4SI_type_node,
-			   tree_cons (NULL_TREE, integer_type_node,
-				      tree_cons (NULL_TREE, pvoid_type_node,
-						 endlink)));
-
+    = build_function_type_list (V4SI_type_node,
+				integer_type_node, pvoid_type_node, NULL_TREE);
   tree v8hi_ftype_int_pvoid
-    = build_function_type (V8HI_type_node,
-			   tree_cons (NULL_TREE, integer_type_node,
-				      tree_cons (NULL_TREE, pvoid_type_node,
-						 endlink)));
-
+    = build_function_type_list (V8HI_type_node,
+				integer_type_node, pvoid_type_node, NULL_TREE);
   tree int_ftype_v8hi_v8hi
-    = build_function_type (integer_type_node,
-			   tree_cons (NULL_TREE, V8HI_type_node,
-				      tree_cons (NULL_TREE, V8HI_type_node,
-						 endlink)));
+    = build_function_type_list (integer_type_node,
+				V8HI_type_node, V8HI_type_node, NULL_TREE);
 
   def_builtin (MASK_ALTIVEC, "__builtin_altivec_ld_internal_4sf", v4sf_ftype_pfloat, ALTIVEC_BUILTIN_LD_INTERNAL_4sf);
   def_builtin (MASK_ALTIVEC, "__builtin_altivec_st_internal_4sf", void_ftype_pfloat_v4sf, ALTIVEC_BUILTIN_ST_INTERNAL_4sf);
diff --git a/gcc/tree.c b/gcc/tree.c
index 512e523cdc47..78364e1e3f44 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -3801,6 +3801,31 @@ build_function_type (value_type, arg_types)
   return t;
 }
 
+/* Like build_function_type, but take a vararg list of nodes.  The
+   list of nodes should end with a NULL_TREE.  This is typically used
+   for creating function types for builtins.  */
+
+tree
+build_function_type_list VPARAMS ((tree first, ...))
+{
+  tree t, args, last;
+
+  VA_OPEN (p, first);
+  VA_FIXEDARG (p, tree, first);
+
+  t = va_arg (p, tree);
+  for (args = NULL_TREE; t != NULL_TREE; t = va_arg (p, tree))
+    args = tree_cons (NULL_TREE, t, args);
+
+  last = args;
+  args = nreverse (args);
+  TREE_CHAIN (last) = void_list_node;
+  args = build_function_type (first, args);
+
+  VA_CLOSE (p);
+  return args;
+}
+
 /* Construct, lay out and return the type of methods belonging to class
    BASETYPE and whose arguments and values are described by TYPE.
    If that type exists already, reuse it.
diff --git a/gcc/tree.h b/gcc/tree.h
index 4888bc72fe7a..4fcbdd0a19aa 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -2178,6 +2178,7 @@ extern tree build_index_type		PARAMS ((tree));
 extern tree build_index_2_type		PARAMS ((tree, tree));
 extern tree build_array_type		PARAMS ((tree, tree));
 extern tree build_function_type		PARAMS ((tree, tree));
+extern tree build_function_type_list	PARAMS ((tree, ...));
 extern tree build_method_type		PARAMS ((tree, tree));
 extern tree build_offset_type		PARAMS ((tree, tree));
 extern tree build_complex_type		PARAMS ((tree));
-- 
GitLab