a29k.h (ELIGIBLE_FOR_EPILOGUE_DELAY): Avoid loads from varying addresses in the epilogue delay slot.

* a29k.h (ELIGIBLE_FOR_EPILOGUE_DELAY): Avoid loads from varying
        addresses in the epilogue delay slot.

From-SVN: r16394
This commit is contained in:
J"orn Rennecke 1997-11-09 08:59:55 +00:00 committed by Jeff Law
parent 553914ad8b
commit 7091039c68
2 changed files with 12 additions and 2 deletions

View File

@ -1,3 +1,8 @@
Sun Nov 9 02:00:29 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
* a29k.h (ELIGIBLE_FOR_EPILOGUE_DELAY): Avoid loads from varying
addresses in the epilogue delay slot.
Sun Nov 9 01:40:40 1997 Manfred Hollstein (manfred@s-direktnet.de) Sun Nov 9 01:40:40 1997 Manfred Hollstein (manfred@s-direktnet.de)
* m88k/dgux.h (ASM_CPU_SPEC): Reformatted to suppress wrong whitespace * m88k/dgux.h (ASM_CPU_SPEC): Reformatted to suppress wrong whitespace

View File

@ -987,13 +987,18 @@ extern char *a29k_function_name;
On the 29k, we must be able to place it in a delay slot, it must On the 29k, we must be able to place it in a delay slot, it must
not use sp if the frame pointer cannot be eliminated, and it cannot not use sp if the frame pointer cannot be eliminated, and it cannot
use local regs if we need to push the register stack. */ use local regs if we need to push the register stack.
If this is a SET with a memory as source, it might load from
a stack slot, unless the address is constant. */
#define ELIGIBLE_FOR_EPILOGUE_DELAY(INSN,N) \ #define ELIGIBLE_FOR_EPILOGUE_DELAY(INSN,N) \
(get_attr_in_delay_slot (INSN) == IN_DELAY_SLOT_YES \ (get_attr_in_delay_slot (INSN) == IN_DELAY_SLOT_YES \
&& ! (frame_pointer_needed \ && ! (frame_pointer_needed \
&& reg_mentioned_p (stack_pointer_rtx, PATTERN (INSN))) \ && reg_mentioned_p (stack_pointer_rtx, PATTERN (INSN))) \
&& ! (needs_regstack_p () && uses_local_reg_p (PATTERN (INSN)))) && ! (needs_regstack_p () && uses_local_reg_p (PATTERN (INSN))) \
&& (GET_CODE (PATTERN (INSN)) != SET \
|| GET_CODE (SET_SRC (PATTERN (INSN))) != MEM \
|| ! rtx_varies_p (XEXP (SET_SRC (PATTERN (INSN)), 0))))
/* Output assembler code for a block containing the constant parts /* Output assembler code for a block containing the constant parts
of a trampoline, leaving space for the variable parts. of a trampoline, leaving space for the variable parts.