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;
\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"
`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