"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.000000000 +0900 +++ trunk/gcc/config/sh/sh.c 2012-03-29 21:59:13.000000000 +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);