Naveen H. S navee...@kpitcummins.com wrote:
Please find attached the patch resbank.patch which fixes the issue
with resbank attribute. Currently, registers used in the routine are
also saved on using resbank attribute. These registers are saved with
resbank instruction and need not be saved separately.
The patch fixes the issue.
Looks that the patch ignores the case using movml. It could
be something like the attached patch, though I don't do any
tests.
* config/sh/sh.c (push_regs): Skip banked registers when
resbank attribute is specified.
(sh_expand_epilogue): Likewise.
--- ORIG/trunk/gcc/config/sh/sh.c 2012-03-28 17:51:20.0 +0900
+++ trunk/gcc/config/sh/sh.c2012-03-29 21:59:13.0 +0900
@@ -6487,7 +6487,9 @@ push_regs (HARD_REG_SET *mask, int inter
use_movml = true;
}
- if (use_movml)
+ if (sh_cfun_resbank_handler_p ())
+ ; /* Do nothing. */
+ else if (use_movml)
{
rtx x, mem, reg, set;
rtx sp_reg = gen_rtx_REG (SImode, STACK_POINTER_REGNUM);
@@ -7485,7 +7487,9 @@ sh_expand_epilogue (bool sibcall_p)
use_movml = true;
}
- if (use_movml)
+ if (sh_cfun_resbank_handler_p ())
+ ; /* Do nothing. */
+ else if (use_movml)
{
rtx sp_reg = gen_rtx_REG (SImode, STACK_POINTER_REGNUM);