From: J"orn Rennecke Date: Sun, 9 Nov 1997 08:59:10 +0000 (+0000) Subject: a29k.h (ELIGIBLE_FOR_EPILOGUE_DELAY): Avoid loads from varying addresses in the epilo... X-Git-Tag: releases/egcs-1.0.0~148 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9a3c8dac629d6bacd68f4b5df9301b5965f2f515;p=thirdparty%2Fgcc.git 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: r16393 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index be42ba49e466..554f842e2ea6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Sun Nov 9 02:00:29 1997 J"orn Rennecke + + * 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) * m88k/dgux.h (ASM_CPU_SPEC): Reformatted to suppress wrong whitespace diff --git a/gcc/config/a29k/a29k.h b/gcc/config/a29k/a29k.h index 59e9a13d628c..db6e378d252c 100644 --- a/gcc/config/a29k/a29k.h +++ b/gcc/config/a29k/a29k.h @@ -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 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) \ (get_attr_in_delay_slot (INSN) == IN_DELAY_SLOT_YES \ && ! (frame_pointer_needed \ && 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 of a trampoline, leaving space for the variable parts.