(output_move_qimode): Optimize pushing one byte if the source operand
authorRichard Kenner <kenner@gcc.gnu.org>
Sun, 13 Apr 1997 19:15:21 +0000 (15:15 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Sun, 13 Apr 1997 19:15:21 +0000 (15:15 -0400)
does not use the stack pointer.

From-SVN: r13891

gcc/config/m68k/m68k.c

index 59b931525e194d0dedf2148e3b407a8121e65d5c..f0c171414ef88eec5f85290d20a693732d14954d 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 "";
     }