"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);
 

Reply via email to