From aec373f1a1b31c887850c869440cb479abcb89b4 Mon Sep 17 00:00:00 2001 From: "J\"orn Rennecke" Date: Thu, 23 Apr 1998 20:57:06 +0000 Subject: [PATCH] Fix for execute/980205.c failure on SH[123]. * sh.c (sh_expand_prologue, in !SH3E code): Don't push an extra register for stdarg functions. * sh.h (current_function_varargs): Declare. (FUNCTION_ARG): Ignore NAMED for stdarg functions. From-SVN: r19391 --- gcc/ChangeLog | 7 +++++++ gcc/config/sh/sh.c | 6 +++--- gcc/config/sh/sh.h | 5 +++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dfb02184b09..3063e960fe6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Fri Apr 24 04:42:35 1998 J"orn Rennecke + + * sh.c (sh_expand_prologue, in !SH3E code): Don't push an extra + register for stdarg functions. + * sh.h (current_function_varargs): Declare. + (FUNCTION_ARG): Ignore NAMED for stdarg functions. + 1998-04-23 Jim Wilson * frame.c, libgcc2.c (stdlib.h, unistd.h): Don't include when diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 447716cb763..6441a41063c 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -3488,9 +3488,9 @@ sh_expand_prologue () for (i = 0; i < NPARM_REGS(SImode); i++) { int rn = NPARM_REGS(SImode) + FIRST_PARM_REG - i - 1; - if (i > (NPARM_REGS(SImode) - - current_function_args_info.arg_count[(int) SH_ARG_INT] - - current_function_varargs)) + if (i >= (NPARM_REGS(SImode) + - current_function_args_info.arg_count[(int) SH_ARG_INT] + )) break; push (rn); extra_push += 4; diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index ac1a622406e..2c008a43f1f 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -875,9 +875,11 @@ struct sh_args { NPARM_REGS words is at least partially passed in a register unless its data type forbids. */ +extern int current_function_varargs; + #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ ((PASS_IN_REG_P ((CUM), (MODE), (TYPE)) \ - && ((NAMED) || TARGET_SH3E)) \ + && ((NAMED) || TARGET_SH3E || ! current_function_varargs)) \ ? gen_rtx (REG, (MODE), \ (BASE_ARG_REG (MODE) + ROUND_REG ((CUM), (MODE)))) \ : 0) @@ -890,7 +892,6 @@ struct sh_args { #define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \ ((PASS_IN_REG_P ((CUM), (MODE), (TYPE)) \ - && ((NAMED) || TARGET_SH3E) \ && (ROUND_REG ((CUM), (MODE)) \ + (MODE != BLKmode \ ? ROUND_ADVANCE (GET_MODE_SIZE (MODE)) \ -- 2.43.5