(andsi3): Changed into define_expand.
authorRichard Kenner <kenner@gcc.gnu.org>
Sat, 7 Dec 1996 23:28:02 +0000 (18:28 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Sat, 7 Dec 1996 23:28:02 +0000 (18:28 -0500)
(andsi3_internal): Rename from old andsi3, changed condition to !TARGET_5200.
(andsi2_5200): New insn.
(iorsi3): Change into define_expand.
(iorsi2_internal): Rename from old iorsi3, changed condition to !TARGET_5200.
(iorsi2_5200): New insn.
(xorsi3): Change into define_expand.
(xorsi2_internal): Rename from old xorsi3, changed condition to !TARGET_5200.
(xorsi2_5200): New insn.

From-SVN: r13240

gcc/config/m68k/m68k.md

index db598c5dcc185310a50e64e5fefd4c39e74f08fc..30642e670dfc8804b8647ab2384d776e851e86f1 100644 (file)
 ;; Prevent AND from being made with sp.  This doesn't exist in the machine
 ;; and reload will cause inefficient code.  Since sp is a FIXED_REG, we
 ;; can't allocate pseudos into it.
-(define_insn "andsi3"
+
+(define_expand "andsi3"
   [(set (match_operand:SI 0 "not_sp_operand" "=m,d")
        (and:SI (match_operand:SI 1 "general_operand" "%0,0")
                (match_operand:SI 2 "general_operand" "dKs,dmMs")))]
   ""
+  "")
+
+(define_insn "andsi3_internal"
+  [(set (match_operand:SI 0 "not_sp_operand" "=m,d")
+       (and:SI (match_operand:SI 1 "general_operand" "%0,0")
+               (match_operand:SI 2 "general_operand" "dKs,dmMs")))]
+  "!TARGET_5200"
   "*
 {
   int logval;
   return \"and%.l %2,%0\";
 }")
 
+(define_insn "andsi3_5200"
+  [(set (match_operand:SI 0 "not_sp_operand" "=m,d")
+       (and:SI (match_operand:SI 1 "general_operand" "%0,0")
+               (match_operand:SI 2 "general_operand" "d,dmsK")))]
+  "TARGET_5200"
+  "and%.l %2,%0")
+
 (define_insn "andhi3"
   [(set (match_operand:HI 0 "general_operand" "=m,d")
        (and:HI (match_operand:HI 1 "general_operand" "%0,0")
 \f
 ;; inclusive-or instructions
 
-(define_insn "iorsi3"
+(define_expand "iorsi3"
+  [(set (match_operand:SI 0 "general_operand" "")
+       (ior:SI (match_operand:SI 1 "general_operand" "")
+               (match_operand:SI 2 "general_operand" "")))]
+  ""
+  "")
+
+(define_insn "iorsi3_internal"
   [(set (match_operand:SI 0 "general_operand" "=m,d")
        (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
                (match_operand:SI 2 "general_operand" "dKs,dmMs")))]
-  ""
+  "!TARGET_5200"
   "*
 {
   register int logval;
   return \"or%.l %2,%0\";
 }")
 
+(define_insn "iorsi3_5200"
+  [(set (match_operand:SI 0 "general_operand" "=m,d")
+       (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
+               (match_operand:SI 2 "general_operand" "d,dmsK")))]
+  "TARGET_5200"
+  "or%.l %2,%0")
+
 (define_insn "iorhi3"
   [(set (match_operand:HI 0 "general_operand" "=m,d")
        (ior:HI (match_operand:HI 1 "general_operand" "%0,0")
 \f
 ;; xor instructions
 
-(define_insn "xorsi3"
+(define_expand "xorsi3"
+  [(set (match_operand:SI 0 "general_operand" "")
+       (xor:SI (match_operand:SI 1 "general_operand" "")
+               (match_operand:SI 2 "general_operand" "")))]
+  ""
+  "")
+
+(define_insn "xorsi3_internal"
   [(set (match_operand:SI 0 "general_operand" "=do,m")
        (xor:SI (match_operand:SI 1 "general_operand" "%0,0")
                (match_operand:SI 2 "general_operand" "di,dKs")))]
-  ""
+  "!TARGET_5200"
   "*
 {
   if (GET_CODE (operands[2]) == CONST_INT
   return \"eor%.l %2,%0\";
 }")
 
+(define_insn "xorsi3_5200"
+  [(set (match_operand:SI 0 "general_operand" "=dm")
+       (xor:SI (match_operand:SI 1 "general_operand" "%0")
+               (match_operand:SI 2 "general_operand" "dn")))]
+  "TARGET_5200"
+  "eor%.l %2,%0")
+
 (define_insn "xorhi3"
   [(set (match_operand:HI 0 "general_operand" "=dm")
        (xor:HI (match_operand:HI 1 "general_operand" "%0")