mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-22 11:39:46 +08:00
m68hc11.c (expand_prologue): For an interrupt handler save the soft registers after the frame pointer so...
* config/m68hc11/m68hc11.c (expand_prologue): For an interrupt handler save the soft registers after the frame pointer so that gdb can unwind the frame more easily. (expand_epilogue): Likewise in opposite order; allow to use X register as scratch if the return value is by reference. From-SVN: r65104
This commit is contained in:
parent
adff28c38d
commit
07faf2d6cd
@ -1,3 +1,11 @@
|
||||
2003-03-31 Stephane Carrez <stcarrez@nerim.fr>
|
||||
|
||||
* config/m68hc11/m68hc11.c (expand_prologue): For an interrupt handler
|
||||
save the soft registers after the frame pointer so that gdb can unwind
|
||||
the frame more easily.
|
||||
(expand_epilogue): Likewise in opposite order; allow to use X register
|
||||
as scratch if the return value is by reference.
|
||||
|
||||
2003-03-31 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR java/10145
|
||||
|
@ -1683,6 +1683,10 @@ expand_prologue ()
|
||||
else
|
||||
scratch = ix_reg;
|
||||
|
||||
/* Save current stack frame. */
|
||||
if (frame_pointer_needed)
|
||||
emit_move_after_reload (stack_push_word, hard_frame_pointer_rtx, scratch);
|
||||
|
||||
/* For an interrupt handler, we must preserve _.tmp, _.z and _.xy.
|
||||
Other soft registers in page0 need not to be saved because they
|
||||
will be restored by C functions. For a trap handler, we don't
|
||||
@ -1697,10 +1701,6 @@ expand_prologue ()
|
||||
scratch);
|
||||
}
|
||||
|
||||
/* Save current stack frame. */
|
||||
if (frame_pointer_needed)
|
||||
emit_move_after_reload (stack_push_word, hard_frame_pointer_rtx, scratch);
|
||||
|
||||
/* Allocate local variables. */
|
||||
if (TARGET_M6812 && (size > 4 || size == 3))
|
||||
{
|
||||
@ -1774,7 +1774,7 @@ expand_epilogue ()
|
||||
else
|
||||
return_size = GET_MODE_SIZE (GET_MODE (current_function_return_rtx));
|
||||
|
||||
if (return_size > HARD_REG_SIZE)
|
||||
if (return_size > HARD_REG_SIZE && return_size <= 2 * HARD_REG_SIZE)
|
||||
scratch = iy_reg;
|
||||
else
|
||||
scratch = ix_reg;
|
||||
@ -1821,10 +1821,6 @@ expand_epilogue ()
|
||||
stack_pointer_rtx, GEN_INT (1)));
|
||||
}
|
||||
|
||||
/* Restore previous frame pointer. */
|
||||
if (frame_pointer_needed)
|
||||
emit_move_after_reload (hard_frame_pointer_rtx, stack_pop_word, scratch);
|
||||
|
||||
/* For an interrupt handler, restore ZTMP, ZREG and XYREG. */
|
||||
if (current_function_interrupt)
|
||||
{
|
||||
@ -1835,6 +1831,10 @@ expand_epilogue ()
|
||||
emit_move_after_reload (m68hc11_soft_tmp_reg, stack_pop_word, scratch);
|
||||
}
|
||||
|
||||
/* Restore previous frame pointer. */
|
||||
if (frame_pointer_needed)
|
||||
emit_move_after_reload (hard_frame_pointer_rtx, stack_pop_word, scratch);
|
||||
|
||||
/* If the trap handler returns some value, copy the value
|
||||
in D, X onto the stack so that the rti will pop the return value
|
||||
correctly. */
|
||||
|
Loading…
Reference in New Issue
Block a user