From 43a727554dae9550dbd823af097964fef4aaa265 Mon Sep 17 00:00:00 2001 From: Stephane Carrez Date: Thu, 5 Jul 2001 23:17:10 +0200 Subject: [PATCH] m68hc11.md ("*ashlsi3"): Operand 1 can be a memory reference using the stack pointer... * config/m68hc11/m68hc11.md ("*ashlsi3"): Operand 1 can be a memory reference using the stack pointer, adjust it since we push Y temporarily. ("*ashrsi3"): Likewise. ("*lshrsi3"): Likewise. From-SVN: r43791 --- gcc/ChangeLog | 8 ++++++++ gcc/config/m68hc11/m68hc11.md | 27 ++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cd9975771b0..03e9a4c127b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2001-07-04 Stephane Carrez + + * config/m68hc11/m68hc11.md ("*ashlsi3"): Operand 1 can be a memory + reference using the stack pointer, adjust it since we push Y + temporarily. + ("*ashrsi3"): Likewise. + ("*lshrsi3"): Likewise. + 2001-07-05 Stephane Carrez * config/m68hc11/m68hc11.h (RETURN_ADDR_RTX): Fix return address diff --git a/gcc/config/m68hc11/m68hc11.md b/gcc/config/m68hc11/m68hc11.md index b7b8fe38d90..f5992049563 100644 --- a/gcc/config/m68hc11/m68hc11.md +++ b/gcc/config/m68hc11/m68hc11.md @@ -4190,8 +4190,15 @@ is true for 68hc11 only, we save temporary the value of Y. */ if (!Y_REG_P (operands[2])) { + rtx ops[1]; + + ops[0] = operands[1]; output_asm_insn (\"pshy\", operands); - output_asm_insn (\"ldy\\t%1\", operands); + if (reg_mentioned_p (stack_pointer_rtx, operands[1])) + { + ops[0] = adjust_address (operands[1], GET_MODE (operands[1]), 2); + } + output_asm_insn (\"ldy\\t%0\", ops); output_asm_insn (\"bsr\\t___ashlsi3\", operands); return \"puly\"; } @@ -4591,8 +4598,15 @@ is true for 68hc11 only, we save temporary the value of Y. */ if (!Y_REG_P (operands[2])) { + rtx ops[1]; + + ops[0] = operands[1]; output_asm_insn (\"pshy\", operands); - output_asm_insn (\"ldy\\t%1\", operands); + if (reg_mentioned_p (stack_pointer_rtx, operands[1])) + { + ops[0] = adjust_address (operands[1], GET_MODE (operands[1]), 2); + } + output_asm_insn (\"ldy\\t%0\", ops); output_asm_insn (\"bsr\\t___ashrsi3\", operands); return \"puly\"; } @@ -4928,8 +4942,15 @@ is true for 68hc11 only, we save temporary the value of Y. */ if (!Y_REG_P (operands[2])) { + rtx ops[1]; + + ops[0] = operands[1]; output_asm_insn (\"pshy\", operands); - output_asm_insn (\"ldy\\t%1\", operands); + if (reg_mentioned_p (stack_pointer_rtx, operands[1])) + { + ops[0] = adjust_address (operands[1], GET_MODE (operands[1]), 2); + } + output_asm_insn (\"ldy\\t%0\", ops); output_asm_insn (\"bsr\\t___lshrsi3\", operands); return \"puly\"; } -- 2.30.2