Put correct source into tree.
authorMichael Meissner <meissner@gcc.gnu.org>
Tue, 22 Sep 1992 16:31:20 +0000 (16:31 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Tue, 22 Sep 1992 16:31:20 +0000 (16:31 +0000)
From-SVN: r2206

gcc/config/mips/mips.h

index 12f581cbf18eb3e8fccf94d84d4f742d7d33180c..800721b570c70f768a3e7fc8ac7f30ec06dc6223 100644 (file)
@@ -1628,14 +1628,20 @@ extern struct mips_frame_info current_frame_info;
    function.
 
    If `ARGS_GROW_DOWNWARD', this is the offset to the location above
-   the first argument's address.  */
+   the first argument's address.
+
+   On the MIPS, we must skip the first argument position if we are
+   returning a structure or a union, to account for it's address being
+   passed in $4.  */
 
 #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)
+       || TREE_CODE (TREE_TYPE (TREE_TYPE (FNDECL))) == UNION_TYPE)    \
+               ? UNITS_PER_WORD                                        \
+               : 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
@@ -1645,7 +1651,7 @@ extern struct mips_frame_info current_frame_info;
    in register. In case an argument list is of form GF used registers
    are a0 (a2,a3), but we should push over a1...  */
 
-#define REG_PARM_STACK_SPACE(FNDECL) (4*4)
+#define REG_PARM_STACK_SPACE(FNDECL) (4*UNITS_PER_WORD) - FIRST_PARM_OFFSET(FNDECL)
 
 /* Define this if it is the responsibility of the caller to
    allocate the area reserved for arguments passed in registers.