OSDN Git Service

(xtrct_left, xtrct_right): New patterns.
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 14 Apr 1997 21:57:14 +0000 (21:57 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 14 Apr 1997 21:57:14 +0000 (21:57 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@13904 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/config/sh/sh.md

index 342b3e4..e5ee868 100644 (file)
              (const_string "14")))
     (set_attr "type" "arith")])
 
+;; These patterns are found in expansions of DImode shifts by 16, and
+;; allow the xtrct instruction to be generated from C source.
+
+(define_insn "xtrct_left"
+  [(set (match_operand:SI 0 "arith_reg_operand" "=r")
+        (ior:SI (ashift:SI (match_operand:SI 1 "arith_reg_operand" "r")
+                          (const_int 16))
+               (lshiftrt:SI (match_operand:SI 2 "arith_reg_operand" "0")
+                            (const_int 16))))]
+  ""
+  "xtrct       %1,%0")
+
+(define_insn "xtrct_right"
+  [(set (match_operand:SI 0 "arith_reg_operand" "=r")
+        (ior:SI (lshiftrt:SI (match_operand:SI 1 "arith_reg_operand" "0")
+                            (const_int 16))
+               (ashift:SI (match_operand:SI 2 "arith_reg_operand" "r")
+                          (const_int 16))))]
+  ""
+  "xtrct       %2,%0")
 \f
 ;; -------------------------------------------------------------------------
 ;; Unary arithmetic