This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH]: Fix operand numbers in m68hc11.md
- To: gcc-patches at gcc dot gnu dot org
- Subject: [PATCH]: Fix operand numbers in m68hc11.md
- From: Stephane Carrez <Stephane dot Carrez at worldnet dot fr>
- Date: Thu, 11 Jan 2001 21:12:48 +0100
Hi!
Several insns in the 68HC11 machine description file were
using wrong operand numbers. Although it was ok for 2.95,
recent improvements in genoutput.c now catches these errors.
I've integrated this patch to fix operand numbers as well
as invalid use of '@' templates in m68hc11.md.
Stephane
2001-01-11 Stephane Carrez <Stephane.Carrez@worldnet.fr>
* config/m68hc11/m68hc11.md (*adcq, *subcq): Fix operand numbers.
(*ashlsi3_const16_zexthi, *ashlsi3_const1): Likewise.
(*lshrsi3_const, *lshrsi3_const1, *lshrsi3_const16): Likewise.
(*ashrsi3, *ashrsi3_const, *ashlsi3, *ashlsi3_const): Likewise.
(*ashlsi3_const1, *lshrsi3, *ashlsi3_const16): Likewise.
(cmphi_z_used): Don't use '@' for the output.
(tstqi_z_used): Likewise.
(cmpqi_z_used): Likewise.
(one_cmplsi2): Likewise.
Index: config/m68hc11/m68hc11.md
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/m68hc11/m68hc11.md,v
retrieving revision 1.1
diff -u -r1.1 m68hc11.md
--- m68hc11.md 2000/09/08 20:54:44 1.1
+++ m68hc11.md 2001/01/11 21:09:06
@@ -1,5 +1,5 @@
;;- Machine description file for Motorola 68HC11 and 68HC12.
-;;- Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+;;- Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
;;- Contributed by Stephane Carrez (stcarrez@worldnet.fr)
;; This file is part of GNU CC.
@@ -214,8 +214,7 @@
(use (match_operand:HI 1 "hard_reg_operand" "dxy"))
(use (reg:HI 11))]
""
- "@
- #")
+ "#")
(define_split /* "tstqi_z_used" */
[(set (cc0)
@@ -305,8 +304,7 @@
(use (match_operand:HI 2 "hard_reg_operand" "dxy"))
(use (reg:HI 11))]
""
- "@
- #")
+ "#")
(define_split /* "cmphi_z_used" */
[(set (cc0)
@@ -385,8 +383,7 @@
(use (match_operand:HI 2 "hard_reg_operand" "dxy"))
(use (reg:HI 11))]
""
- "@
- #")
+ "#")
(define_split /* cmpqi_z_used */
[(set (cc0)
@@ -2113,10 +2110,10 @@
(define_insn "*adcq"
[(set (match_operand:QI 0 "register_operand" "=q")
(plus:QI (plus:QI (reg:QI 7)
- (match_operand:QI 2 "register_operand" "%0"))
- (match_operand:QI 3 "general_operand" "ium")))]
+ (match_operand:QI 1 "register_operand" "%0"))
+ (match_operand:QI 2 "general_operand" "ium")))]
""
- "adc%0\\t%b3")
+ "adc%0\\t%b2")
;;--------------------------------------------------------------------
;;- Subtract instructions.
@@ -2368,10 +2365,10 @@
(define_insn "*subcq"
[(set (match_operand:QI 0 "register_operand" "=q")
(minus:QI (minus:QI (reg:QI 7)
- (match_operand:QI 2 "register_operand" "0"))
- (match_operand:QI 3 "general_operand" "ium")))]
+ (match_operand:QI 1 "register_operand" "0"))
+ (match_operand:QI 2 "general_operand" "ium")))]
""
- "sbc%0\\t%b3")
+ "sbc%0\\t%b2")
;;--------------------------------------------------------------------
;;- Multiply instructions.
@@ -3504,8 +3501,7 @@
[(set (match_operand:SI 0 "non_push_operand" "=D")
(not:SI (match_operand:SI 1 "general_operand" "0")))]
""
- "@
- bsr\\t___one_cmplsi2")
+ "bsr\\t___one_cmplsi2")
(define_insn "one_cmplhi2"
[(set (match_operand:HI 0 "non_push_operand" "=d,!um,*A")
@@ -3746,7 +3742,7 @@
[(set (match_operand:SI 0 "nonimmediate_operand" "=D,*um")
(ashift:SI (match_operand:SI 1 "general_operand" "Duim,D")
(const_int 16)))
- (clobber (match_scratch:HI 3 "=X,X"))]
+ (clobber (match_scratch:HI 2 "=X,X"))]
""
"#")
@@ -3755,7 +3751,7 @@
(ashift:SI (zero_extend:HI
(match_operand:HI 1 "general_operand" "duim*A"))
(const_int 16)))
- (clobber (match_scratch:HI 3 "=X"))]
+ (clobber (match_scratch:HI 2 "=X"))]
""
"#")
@@ -3764,7 +3760,7 @@
(ashift:SI (zero_extend:HI
(match_operand:HI 1 "general_operand" "duim*a"))
(const_int 16)))
- (clobber (match_scratch:HI 3 "=X"))]
+ (clobber (match_scratch:HI 2 "=X"))]
"reload_completed"
[(set (reg:HI 0) (match_dup 1))
(set (reg:HI 1) (const_int 0))]
@@ -3774,7 +3770,7 @@
[(set (match_operand:SI 0 "non_push_operand" "=D,D,*um,?*um")
(ashift:SI (match_operand:SI 1 "nonimmediate_operand" "0,*um,0,*um")
(const_int 1)))
- (clobber (match_scratch:HI 3 "=X,X,&d,&d"))]
+ (clobber (match_scratch:HI 2 "=X,X,&d,&d"))]
""
"*
{
@@ -3828,20 +3824,20 @@
(define_insn "*ashlsi3_const"
[(set (match_operand:SI 0 "register_operand" "+D")
(ashift:SI (match_dup 0)
- (match_operand:HI 2 "const_int_operand" "")))
- (clobber (match_scratch:HI 3 "=y"))]
+ (match_operand:HI 1 "const_int_operand" "")))
+ (clobber (match_scratch:HI 2 "=y"))]
""
"*
{
CC_STATUS_INIT;
- return \"ldy\\t%2\\n\\tbsr\\t___ashlsi3\";
+ return \"ldy\\t%1\\n\\tbsr\\t___ashlsi3\";
}")
(define_insn "*ashlsi3"
[(set (match_operand:SI 0 "register_operand" "+D,D")
(ashift:SI (match_dup 0)
- (match_operand:HI 2 "general_operand" "y,m")))
- (clobber (match_scratch:HI 3 "=2,X"))]
+ (match_operand:HI 1 "general_operand" "y,m")))
+ (clobber (match_scratch:HI 2 "=1,X"))]
""
"*
{
@@ -3852,12 +3848,12 @@
and this conflicts with all reloads. Since X, Y, Z are used there
is not enough register in class A_REGS.
- Assuming that 'operands[2]' does not refer to the stack (which
+ Assuming that 'operands[1]' does not refer to the stack (which
is true for 68hc11 only, we save temporary the value of Y. */
- if (!Y_REG_P (operands[3]))
+ if (!Y_REG_P (operands[2]))
{
output_asm_insn (\"pshy\", operands);
- output_asm_insn (\"ldy\\t%2\", operands);
+ output_asm_insn (\"ldy\\t%1\", operands);
output_asm_insn (\"bsr\\t___ashlsi3\", operands);
return \"puly\";
}
@@ -4229,20 +4225,20 @@
(define_insn "*ashrsi3_const"
[(set (match_operand:SI 0 "register_operand" "+D")
(ashiftrt:SI (match_dup 0)
- (match_operand:HI 2 "const_int_operand" "")))
- (clobber (match_scratch:HI 3 "=y"))]
+ (match_operand:HI 1 "const_int_operand" "")))
+ (clobber (match_scratch:HI 2 "=y"))]
""
"*
{
CC_STATUS_INIT;
- return \"ldy\\t%2\\n\\tbsr\\t___ashrsi3\";
+ return \"ldy\\t%1\\n\\tbsr\\t___ashrsi3\";
}")
(define_insn "*ashrsi3"
[(set (match_operand:SI 0 "register_operand" "+D,D")
(ashiftrt:SI (match_dup 0)
- (match_operand:HI 2 "general_operand" "y,m")))
- (clobber (match_scratch:HI 3 "=2,X"))]
+ (match_operand:HI 1 "general_operand" "y,m")))
+ (clobber (match_scratch:HI 2 "=1,X"))]
""
"*
{
@@ -4252,12 +4248,12 @@
and this conflicts with all reloads. Since X, Y, Z are used there
is not enough register in class A_REGS.
- Assuming that 'operands[2]' does not refer to the stack (which
+ Assuming that 'operands[1]' does not refer to the stack (which
is true for 68hc11 only, we save temporary the value of Y. */
- if (!Y_REG_P (operands[3]))
+ if (!Y_REG_P (operands[2]))
{
output_asm_insn (\"pshy\", operands);
- output_asm_insn (\"ldy\\t%2\", operands);
+ output_asm_insn (\"ldy\\t%1\", operands);
output_asm_insn (\"bsr\\t___ashrsi3\", operands);
return \"puly\";
}
@@ -4504,7 +4500,7 @@
[(set (match_operand:SI 0 "non_push_operand" "=D,D,um")
(lshiftrt:SI (match_operand:SI 1 "general_operand" "uim,0,D")
(const_int 16)))
- (clobber (match_scratch:HI 3 "=X,X,X"))]
+ (clobber (match_scratch:HI 2 "=X,X,X"))]
""
"#
xgdx\\n\\tldx\\t#0
@@ -4514,7 +4510,7 @@
[(set (match_operand:SI 0 "non_push_operand" "=D,*um")
(lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "D*um,*um")
(const_int 1)))
- (clobber (match_scratch:HI 3 "=X,&d"))]
+ (clobber (match_scratch:HI 2 "=X,&d"))]
""
"*
{
@@ -4563,20 +4559,20 @@
(define_insn "*lshrsi3_const"
[(set (match_operand:SI 0 "register_operand" "+D")
(lshiftrt:SI (match_dup 0)
- (match_operand:HI 2 "const_int_operand" "")))
- (clobber (match_scratch:HI 3 "=y"))]
+ (match_operand:HI 1 "const_int_operand" "")))
+ (clobber (match_scratch:HI 2 "=y"))]
""
"*
{
CC_STATUS_INIT;
- return \"ldy\\t%2\\n\\tbsr\\t___lshrsi3\";
+ return \"ldy\\t%1\\n\\tbsr\\t___lshrsi3\";
}")
(define_insn "*lshrsi3"
[(set (match_operand:SI 0 "register_operand" "+D,D")
(lshiftrt:SI (match_dup 0)
- (match_operand:HI 2 "general_operand" "y,m")))
- (clobber (match_scratch:HI 3 "=2,X"))]
+ (match_operand:HI 1 "general_operand" "y,m")))
+ (clobber (match_scratch:HI 2 "=1,X"))]
""
"*
{
@@ -4586,12 +4582,12 @@
and this conflicts with all reloads. Since X, Y, Z are used there
is not enough register in class A_REGS.
- Assuming that 'operands[2]' does not refer to the stack (which
+ Assuming that 'operands[1]' does not refer to the stack (which
is true for 68hc11 only, we save temporary the value of Y. */
- if (!Y_REG_P (operands[3]))
+ if (!Y_REG_P (operands[2]))
{
output_asm_insn (\"pshy\", operands);
- output_asm_insn (\"ldy\\t%2\", operands);
+ output_asm_insn (\"ldy\\t%1\", operands);
output_asm_insn (\"bsr\\t___lshrsi3\", operands);
return \"puly\";
}