ia64.c (ia64_function_arg_1): Move code around.
authorTristan Gingold <gingold@adacore.com>
Mon, 12 Mar 2012 15:52:51 +0000 (15:52 +0000)
committerTristan Gingold <gingold@gcc.gnu.org>
Mon, 12 Mar 2012 15:52:51 +0000 (15:52 +0000)
2012-03-12  Tristan Gingold  <gingold@adacore.com>

* config/ia64/ia64.c (ia64_function_arg_1): Move code around.
(ia64_function_arg_advance): Ditto.

From-SVN: r185246

gcc/ChangeLog
gcc/config/ia64/ia64.c

index 425f07a80e277fa8f177f5103904bdc61d420dd0..f3119994aa58e0670a4ab86059b834adb779c308 100644 (file)
@@ -1,3 +1,8 @@
+2012-03-12  Tristan Gingold  <gingold@adacore.com>
+
+       * config/ia64/ia64.c (ia64_function_arg_1): Move code around.
+       (ia64_function_arg_advance): Ditto.
+
 2012-03-12  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * config.gcc (mips*-*-openbsd*): Remove.
index b5fad9fd8e0075eae9e52c6d7c3239199fb4a089..5b2d74826296ac6d9f0b1b4d4258ff9eac0b25b0 100644 (file)
@@ -4491,6 +4491,15 @@ ia64_function_arg_1 (cumulative_args_t cum_v, enum machine_mode mode,
   if (cum->words + offset >= MAX_ARGUMENT_SLOTS)
     return 0;
 
+  /* On OpenVMS argument is either in Rn or Fn.  */
+  if (TARGET_ABI_OPEN_VMS)
+    {
+      if (FLOAT_MODE_P (mode))
+       return gen_rtx_REG (mode, FR_ARG_FIRST + cum->words);
+      else
+       return gen_rtx_REG (mode, basereg + cum->words);
+    }
+
   /* Check for and handle homogeneous FP aggregates.  */
   if (type)
     hfa_mode = hfa_element_mode (type, 0);
@@ -4577,15 +4586,6 @@ ia64_function_arg_1 (cumulative_args_t cum_v, enum machine_mode mode,
       return gen_rtx_PARALLEL (mode, gen_rtvec_v (i, loc));
     }
   
-  /* On OpenVMS variable argument is either in Rn or Fn.  */
-  else if (TARGET_ABI_OPEN_VMS && named == 0)
-    {
-      if (FLOAT_MODE_P (mode))
-       return gen_rtx_REG (mode, FR_ARG_FIRST + cum->words);
-      else
-       return gen_rtx_REG (mode, basereg + cum->words);
-    }
-
   /* Integral and aggregates go in general registers.  If we have run out of
      FR registers, then FP values must also go in general registers.  This can
      happen when we have a SFmode HFA.  */
@@ -4736,6 +4736,14 @@ ia64_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
   cum->atypes[cum->words] = ia64_arg_type (mode);
   cum->words += words + offset;
 
+  /* On OpenVMS argument is either in Rn or Fn.  */
+  if (TARGET_ABI_OPEN_VMS)
+    {
+      cum->int_regs = cum->words;
+      cum->fp_regs = cum->words;
+      return;
+    }
+
   /* Check for and handle homogeneous FP aggregates.  */
   if (type)
     hfa_mode = hfa_element_mode (type, 0);
@@ -4776,13 +4784,6 @@ ia64_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
       cum->fp_regs = fp_regs;
     }
 
-  /* On OpenVMS variable argument is either in Rn or Fn.  */
-  else if (TARGET_ABI_OPEN_VMS && named == 0)
-    {
-      cum->int_regs = cum->words;
-      cum->fp_regs = cum->words;
-    }
-
   /* Integral and aggregates go in general registers.  So do TFmode FP values.
      If we have run out of FR registers, then other FP values must also go in
      general registers.  This can happen when we have a SFmode HFA.  */