* config/m68hc11/m68hc11.md ("add-split"): Fix add split when
authorciceron <ciceron@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 Oct 2001 13:33:55 +0000 (13:33 +0000)
committerciceron <ciceron@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 Oct 2001 13:33:55 +0000 (13:33 +0000)
operand 2 is the stack pointer.
("addr-peephole"): Fix address computation peephole when operand 2
is the stack pointer.

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

gcc/ChangeLog
gcc/config/m68hc11/m68hc11.md

index c546d5b..8c22804 100644 (file)
@@ -1,3 +1,10 @@
+2001-10-01  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
+
+       * config/m68hc11/m68hc11.md ("add-split"): Fix add split when
+       operand 2 is the stack pointer.
+       ("addr-peephole"): Fix address computation peephole when operand 2
+       is the stack pointer.
+
 Mon Oct  1 09:26:41 2001  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
        * config/i386/i386.c (ix86_va_arg): Call set_mem_alias_set.
index a5e1787..d978f96 100644 (file)
               (set (match_dup 0) (reg:HI D_REGNUM))])]
   "
    /* Save the operand2 in a temporary location and use it. */
-   if (H_REG_P (operands[2])
-       || reg_mentioned_p  (operands[0], operands[2]))
+   if ((H_REG_P (operands[2])
+        || reg_mentioned_p  (operands[0], operands[2]))
+       && !(SP_REG_P (operands[2]) && GET_CODE (operands[3]) == PLUS))
      {
        operands[4] = gen_rtx (REG, HImode, SOFT_TMP_REGNUM);
        operands[6] = operands[4];
 {
   int value_loaded = 1;
 
-  if (X_REG_P (operands[0]))
+  if (X_REG_P (operands[0]) || SP_REG_P (operands[2]))
     {
-      output_asm_insn (\"ldx\\t%2\\n\\txgdx\", operands);
+      rtx ops[2];
+
+      ops[0] = operands[0];
+      ops[1] = operands[2];
+      m68hc11_gen_movhi (insn, ops);
+      output_asm_insn (\"xgd%0\", operands);
     }
   else if (Y_REG_P (operands[0]))
     {