mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
49ab6098ee
commit
9e6a4b7701
|
@ -1,3 +1,12 @@
|
||||||
|
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);
|
||||||
|
|
||||||
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)
|
||||||
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[];
|
||||||
{{ 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
|
||||||
|
|
Loading…
Reference in New Issue