From: Michael Meissner Date: Tue, 22 Sep 1992 16:31:20 +0000 (+0000) Subject: Put correct source into tree. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3928229258266486c361fd35bc1fe239e82628e4;p=gcc.git Put correct source into tree. From-SVN: r2206 --- diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index 12f581cbf18..800721b570c 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -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.