+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>
* expmed.c (expand_mult, choose_multiplier): Change "2 *
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);
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
{{ 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