Commit 9e6a4b77 by Steven Bosscher Committed by David S. Miller

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.

From-SVN: r188142
parent 49ab6098
2012-06-02 Steven Bosscher <steven@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 <zadeck@naturalbridge.com> 2012-06-2 Kenneth Zadeck <zadeck@naturalbridge.com>
* expmed.c (expand_mult, choose_multiplier): Change "2 * * expmed.c (expand_mult, choose_multiplier): Change "2 *
......
...@@ -37,6 +37,7 @@ extern enum direction function_arg_padding (enum machine_mode, const_tree); ...@@ -37,6 +37,7 @@ extern enum direction function_arg_padding (enum machine_mode, const_tree);
extern void order_regs_for_local_alloc (void); extern void order_regs_for_local_alloc (void);
extern HOST_WIDE_INT sparc_compute_frame_size (HOST_WIDE_INT, int); 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_expand_prologue (void);
extern void sparc_flat_expand_prologue (void); extern void sparc_flat_expand_prologue (void);
extern void sparc_expand_epilogue (bool); extern void sparc_expand_epilogue (bool);
......
...@@ -4551,6 +4551,23 @@ sparc_compute_frame_size (HOST_WIDE_INT size, int leaf_function) ...@@ -4551,6 +4551,23 @@ sparc_compute_frame_size (HOST_WIDE_INT size, int leaf_function)
return frame_size; 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. */ /* Output any necessary .register pseudo-ops. */
void void
......
...@@ -1104,15 +1104,12 @@ extern char leaf_reg_remap[]; ...@@ -1104,15 +1104,12 @@ extern char leaf_reg_remap[];
{{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ {{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
{ FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM} } { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM} }
#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
do { \ do \
if ((TO) == STACK_POINTER_REGNUM) \ { \
(OFFSET) = sparc_compute_frame_size (get_frame_size (), \ (OFFSET) = sparc_initial_elimination_offset ((TO)); \
current_function_is_leaf); \ } \
else \ while (0)
(OFFSET) = 0; \
(OFFSET) += SPARC_STACK_BIAS; \
} while (0)
/* Keep the stack pointer constant throughout the function. /* Keep the stack pointer constant throughout the function.
This is both an optimization and a necessity: longjmp This is both an optimization and a necessity: longjmp
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment