From: Richard Henderson Date: Tue, 19 Mar 2002 22:16:10 +0000 (-0800) Subject: ia64.c: Revert 2002-03-01 patch. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ebf0e888b125a10798d1a8c972305d8413f27a76;p=gcc.git ia64.c: Revert 2002-03-01 patch. * config/ia64/ia64.c: Revert 2002-03-01 patch. * config/ia64/ia64.h (INIT_EXPANDERS): New. From-SVN: r51048 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 979e2e6ac16..60bb8246d0d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-03-19 Richard Henderson + + * config/ia64/ia64.c: Revert 2002-03-01 patch. + * config/ia64/ia64.h (INIT_EXPANDERS): New. + 2002-03-19 Jim Blandy * cppmacro.c (cpp_macro_definition): Emit a space after the macro diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index d42a01f73ac..a9ea756d37a 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -1671,9 +1671,10 @@ ia64_initial_elimination_offset (from, to) /* Arguments start above the 16 byte save area, unless stdarg in which case we store through the 16 byte save area. */ if (to == HARD_FRAME_POINTER_REGNUM) - offset = 16; + offset = 16 - current_function_pretend_args_size; else if (to == STACK_POINTER_REGNUM) - offset = current_frame_info.total_size + 16; + offset = (current_frame_info.total_size + + 16 - current_function_pretend_args_size); else abort (); break; @@ -3226,7 +3227,7 @@ ia64_va_start (stdarg_p, valist, nextarg) else ofs = (arg_words >= MAX_ARGUMENT_SLOTS ? -UNITS_PER_WORD : 0); - nextarg = plus_constant (nextarg, ofs - current_function_pretend_args_size); + nextarg = plus_constant (nextarg, ofs); std_expand_builtin_va_start (1, valist, nextarg); } diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h index b8f2449f91a..c0d81ec69f1 100644 --- a/gcc/config/ia64/ia64.h +++ b/gcc/config/ia64/ia64.h @@ -1145,6 +1145,14 @@ enum reg_class in it. */ #define ARG_POINTER_REGNUM R_GR(0) +/* Due to the way varargs and argument spilling happens, the argument + pointer is not 16-byte aligned like the stack pointer. */ +#define INIT_EXPANDERS \ + do { \ + if (cfun && cfun->emit->regno_pointer_align) \ + REGNO_POINTER_ALIGN (ARG_POINTER_REGNUM) = 64; \ + } while (0) + /* The register number for the return address register. For IA-64, this is not actually a pointer as the name suggests, but that's a name that gen_rtx_REG already takes care to keep unique. We modify