From: David Miller <da...@davemloft.net> Date: Fri, 01 Jun 2012 13:50:48 -0400 (EDT)
> I hit the same problem, but solved it by removing the > 'from' parameter entirely. To move things forward I committed the following: -------------------- Restore Sparc build. gcc/ * config/sparc/sparc.h (INITIAL_ELIMINATION_OFFSET): Split out to new function sparc_initial_elimination_offset. * config/sparc/sparc.c (sparc_initial_elimination_offset): New function. * config/sparc/sparc-protos.h (sparc_initial_elimination_offset): Prototype it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@188142 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 9 +++++++++ gcc/config/sparc/sparc-protos.h | 1 + gcc/config/sparc/sparc.c | 17 +++++++++++++++++ gcc/config/sparc/sparc.h | 15 ++++++--------- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5a43bb7..2eb5720 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2012-06-02 Steven Bosscher <ste...@gcc.gnu.org> + + * config/sparc/sparc.h (INITIAL_ELIMINATION_OFFSET): Split out to + new function sparc_initial_elimination_offset. + * config/sparc/sparc.c (sparc_initial_elimination_offset): New + function. + * config/sparc/sparc-protos.h (sparc_initial_elimination_offset): + Prototype it. + 2012-06-2 Kenneth Zadeck <zad...@naturalbridge.com> * expmed.c (expand_mult, choose_multiplier): Change "2 * diff --git a/gcc/config/sparc/sparc-protos.h b/gcc/config/sparc/sparc-protos.h index 52acc09..b03f5cc 100644 --- a/gcc/config/sparc/sparc-protos.h +++ b/gcc/config/sparc/sparc-protos.h @@ -37,6 +37,7 @@ extern enum direction function_arg_padding (enum machine_mode, const_tree); extern void order_regs_for_local_alloc (void); extern HOST_WIDE_INT sparc_compute_frame_size (HOST_WIDE_INT, int); +extern int sparc_initial_elimination_offset (int); extern void sparc_expand_prologue (void); extern void sparc_flat_expand_prologue (void); extern void sparc_expand_epilogue (bool); diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index 54fce8f..7b1899d 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -4551,6 +4551,23 @@ sparc_compute_frame_size (HOST_WIDE_INT size, int leaf_function) return frame_size; } +/* Implement the macro INITIAL_ELIMINATION_OFFSET, return the OFFSET. */ + +int +sparc_initial_elimination_offset (int to) +{ + int offset; + + if (to == STACK_POINTER_REGNUM) + offset = sparc_compute_frame_size (get_frame_size (), + current_function_is_leaf); + else + offset = 0; + + offset += SPARC_STACK_BIAS; + return offset; +} + /* Output any necessary .register pseudo-ops. */ void diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index a2bf09f..234edcf 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -1104,15 +1104,12 @@ extern char leaf_reg_remap[]; {{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM} } -#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ - do { \ - if ((TO) == STACK_POINTER_REGNUM) \ - (OFFSET) = sparc_compute_frame_size (get_frame_size (), \ - current_function_is_leaf); \ - else \ - (OFFSET) = 0; \ - (OFFSET) += SPARC_STACK_BIAS; \ - } while (0) +#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ + do \ + { \ + (OFFSET) = sparc_initial_elimination_offset ((TO)); \ + } \ + while (0) /* Keep the stack pointer constant throughout the function. This is both an optimization and a necessity: longjmp -- 1.7.10