* config/rs6000/rs6000.c (rs6000_psave_function_arg): New function.
(rs6000_finish_function_arg): Likewise.
(rs6000_function_arg): Use rs6000_psave_function_arg and
rs6000_finish_function_arg to handle both vector and floating
point arguments that are also passed in GPRs / the stack.

This is okay, but

@@ -9711,85 +9781,33 @@ rs6000_function_arg (cumulative_args_t c
  {
   rtx rvec[GP_ARG_NUM_REG + 1];
   rtx r;
-  int k;
-  bool needs_psave;
-  enum machine_mode fmode = mode;
+  int k = 0;
   unsigned long n_fpreg = (GET_MODE_SIZE (mode) + 7) >> 3;

+  /* Do we also need to pass this argument in the parameter
+     save area?  */
+  if (type && (cum->nargs_prototype <= 0
+       || (DEFAULT_ABI == ABI_AIX
+   && TARGET_XL_COMPAT
+   && align_words >= GP_ARG_NUM_REG)))
+    k = rs6000_psave_function_arg (mode, type, align_words, rvec);
+
+  /* Describe where this argument goes in the fprs.  */
+
+  /* Check if the argument is split over registers and memory.
+     This can only ever happen for long double or _Decimal128;
+     complex types are handled via split_complex_arg.  */
+  enum machine_mode fmode = mode;

Why did you move the declaration of fmode away from the beginning of
the scope block? C++ and C99 accept it, but I would prefer it in the
beginning of the block.

Thanks, David

Reply via email to