This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[PATCH]: Fix operand numbers in m68hc11.md



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\";
     }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]