Re: [PATCH][AArch64] Remove varargs from aarch64_simd_expand_args

2014-09-02 Thread Marcus Shawcroft
On 20 August 2014 10:20, Alan Lawrence alan.lawre...@arm.com wrote:

 gcc/ChangeLog:

 * config/aarch64/aarch64-builtins.c (aarch64_simd_expand_args):
 Replace
 varargs with pointer parameter.
 (aarch64_simd_expand_builtin): pass pointer into previous.

OK /Marcus


[PATCH][AArch64] Remove varargs from aarch64_simd_expand_args

2014-08-20 Thread Alan Lawrence
This patch just replaces the varargs with a builtin_simd_arg*. The use of 
varargs seems to make stepping into, and breakpointing, aarch64_simd_expand_args 
difficult, and this adds typesafety and (I argue!) reduces complexity.


Tested check-gcc on aarch64-none-elf.

gcc/ChangeLog:

* config/aarch64/aarch64-builtins.c (aarch64_simd_expand_args): Replace
varargs with pointer parameter.
(aarch64_simd_expand_builtin): pass pointer into previous.diff --git a/gcc/config/aarch64/aarch64-builtins.c b/gcc/config/aarch64/aarch64-builtins.c
index fee17ecf637436c8704f565be2eb9ef23891209a..1af17900785685e4e005710d3bb1743d88a11c16 100644
--- a/gcc/config/aarch64/aarch64-builtins.c
+++ b/gcc/config/aarch64/aarch64-builtins.c
@@ -904,9 +904,8 @@ typedef enum
 
 static rtx
 aarch64_simd_expand_args (rtx target, int icode, int have_retval,
-			  tree exp, ...)
+			  tree exp, builtin_simd_arg *args)
 {
-  va_list ap;
   rtx pat;
   tree arg[SIMD_MAX_BUILTIN_ARGS];
   rtx op[SIMD_MAX_BUILTIN_ARGS];
@@ -920,11 +919,9 @@ aarch64_simd_expand_args (rtx target, int icode, int have_retval,
 	  || !(*insn_data[icode].operand[0].predicate) (target, tmode)))
 target = gen_reg_rtx (tmode);
 
-  va_start (ap, exp);
-
   for (;;)
 {
-  builtin_simd_arg thisarg = (builtin_simd_arg) va_arg (ap, int);
+  builtin_simd_arg thisarg = args[argc];
 
   if (thisarg == SIMD_ARG_STOP)
 	break;
@@ -960,8 +957,6 @@ aarch64_simd_expand_args (rtx target, int icode, int have_retval,
 	}
 }
 
-  va_end (ap);
-
   if (have_retval)
 switch (argc)
   {
@@ -1075,12 +1070,7 @@ aarch64_simd_expand_builtin (int fcode, tree exp, rtx target)
   /* The interface to aarch64_simd_expand_args expects a 0 if
  the function is void, and a 1 if it is not.  */
   return aarch64_simd_expand_args
-	  (target, icode, !is_void, exp,
-	   args[1],
-	   args[2],
-	   args[3],
-	   args[4],
-	   SIMD_ARG_STOP);
+	  (target, icode, !is_void, exp, args[1]);
 }
 
 rtx