]> gcc.gnu.org Git - gcc.git/commitdiff
Fix varardic function returning a structure or union.
authorMichael Meissner <meissner@gcc.gnu.org>
Tue, 22 Sep 1992 16:20:16 +0000 (16:20 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Tue, 22 Sep 1992 16:20:16 +0000 (16:20 +0000)
From-SVN: r2205

gcc/config/mips/mips.c
gcc/config/mips/mips.h

index 6cb808bf12235105399156e393bfddaefdafbd66..7936bc28efa7468d77f92599c4df546ae67e6818 100644 (file)
@@ -2400,7 +2400,19 @@ init_cumulative_args (cum, fntype, libname)
   tree param, next_param;
 
   if (TARGET_DEBUG_E_MODE)
-    fprintf (stderr, "\ninit_cumulative_args\n");
+    {
+      fprintf (stderr, "\ninit_cumulative_args, fntype = 0x%.8lx", (long)fntype);
+      if (!fntype)
+       fputc ('\n', stderr);
+
+      else
+       {
+         tree ret_type = TREE_TYPE (fntype);
+         fprintf (stderr, ", fntype code = %s, ret code = %s\n",
+                  tree_code_name[ (int)TREE_CODE (fntype) ],
+                  tree_code_name[ (int)TREE_CODE (ret_type) ]);
+       }
+    }
 
   cum->gp_reg_found = 0;
   cum->arg_number = 0;
index f7df3a038c17bd34f1411c6491f397338539fea0..12f581cbf18eb3e8fccf94d84d4f742d7d33180c 100644 (file)
@@ -473,7 +473,7 @@ while (0)
 \f
 /* Print subsidiary information on the compiler version in use.  */
 
-#define MIPS_VERSION "[AL 1.1, MM 25]"
+#define MIPS_VERSION "[AL 1.1, MM 26]"
 
 #ifndef MACHINE_TYPE
 #define MACHINE_TYPE "BSD Mips"
@@ -1623,16 +1623,19 @@ extern struct mips_frame_info current_frame_info;
    `ACCUMULATE_OUTGOING_ARGS'.  */
 #define ACCUMULATE_OUTGOING_ARGS
 
-/* Offset of first parameter from the argument pointer register value.  */
-#define FIRST_PARM_OFFSET(FNDECL) 0
+/* Offset from the argument pointer register to the first argument's
+   address.  On some machines it may depend on the data type of the
+   function.
 
-/* Offset from top-of-stack address to location to store the
-   function parameter if it can't go in a register.
-   Addresses for following parameters are computed relative to this one.
+   If `ARGS_GROW_DOWNWARD', this is the offset to the location above
+   the first argument's address.  */
 
-   It also has the effect of counting register arguments in the total
-   argument size. */
-#define FIRST_PARM_CALLER_OFFSET(FNDECL) 0
+#define FIRST_PARM_OFFSET(FNDECL)                                      \
+  (FNDECL != 0                                                         \
+   && TREE_TYPE (FNDECL) != 0                                          \
+   && TREE_TYPE (TREE_TYPE (FNDECL)) != 0                              \
+   && (TREE_CODE (TREE_TYPE (TREE_TYPE (FNDECL))) == RECORD_TYPE       \
+       || TREE_CODE (TREE_TYPE (TREE_TYPE (FNDECL))) == UNION_TYPE) ? 4 : 0)
 
 /* When a parameter is passed in a register, stack space is still
    allocated for it.  For the MIPS, stack space must be allocated, cf
This page took 0.076304 seconds and 5 git commands to generate.