OSDN Git Service

(output_move_qimode): Optimize pushing one byte if the source operand
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 13 Apr 1997 19:15:21 +0000 (19:15 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 13 Apr 1997 19:15:21 +0000 (19:15 +0000)
does not use the stack pointer.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@13891 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/config/m68k/m68k.c

index 59b9315..f0c1714 100644 (file)
@@ -1508,7 +1508,17 @@ output_move_qimode (operands)
                   gen_rtx (PLUS, VOIDmode, stack_pointer_rtx, const1_rtx));
       /* Just pushing a byte puts it in the high byte of the halfword. */
       /* We must put it in the low-order, high-numbered byte.  */
-      output_asm_insn ("move%.b %1,%-\n\tmove%.b %@,%2", xoperands);
+      if (!reg_mentioned_p (stack_pointer_rtx, operands[1]))
+       {
+         xoperands[3] = stack_pointer_rtx;
+#ifndef NO_ADDSUB_Q
+         output_asm_insn ("subq%.l %#2,%3\n\tmove%.b %1,%2", xoperands);
+#else
+         output_asm_insn ("sub%.l %#2,%3\n\tmove%.b %1,%2", xoperands);
+#endif
+       }
+      else
+       output_asm_insn ("move%.b %1,%-\n\tmove%.b %@,%2", xoperands);
       return "";
     }