OSDN Git Service

2004-05-17 H.J. Lu <hongjiu.lu@intel.com>
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 17 May 2004 14:30:18 +0000 (14:30 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 17 May 2004 14:30:18 +0000 (14:30 +0000)
PR target/15084
* config/i386/i386.md (*movsi_insv_1_rex64): Changed to DImode
and renamed to movdi_insv_1_rex64.
(insv): Support SImode for 32bit and DImode for 64bit.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@81936 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.md

index 61bca60..694bb5c 100644 (file)
@@ -1,3 +1,10 @@
+2004-05-17  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/15084
+       * config/i386/i386.md (*movsi_insv_1_rex64): Changed to DImode
+       and renamed to movdi_insv_1_rex64.
+       (insv): Support SImode for 32bit and DImode for 64bit.
+
 2004-05-17  Richard Sandiford  <rsandifo@redhat.com>
 
        * config/mips/mips.h (MASK_DEBUG_G, TARGET_DEBUG_G_MODE): Delete.
index b136679..270168f 100644 (file)
   [(set_attr "type" "imov")
    (set_attr "mode" "QI")])
 
-(define_insn "*movsi_insv_1_rex64"
-  [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "+Q")
+(define_insn "movdi_insv_1_rex64"
+  [(set (zero_extract:DI (match_operand 0 "ext_register_operand" "+Q")
                         (const_int 8)
                         (const_int 8))
-       (match_operand:SI 1 "nonmemory_operand" "Qn"))]
+       (match_operand:DI 1 "nonmemory_operand" "Qn"))]
   "TARGET_64BIT"
   "mov{b}\t{%b1, %h0|%h0, %b1}"
   [(set_attr "type" "imov")
 })
 
 (define_expand "insv"
-  [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "")
-                        (match_operand:SI 1 "immediate_operand" "")
-                        (match_operand:SI 2 "immediate_operand" ""))
-        (match_operand:SI 3 "register_operand" ""))]
+  [(set (zero_extract (match_operand 0 "ext_register_operand" "")
+                     (match_operand 1 "immediate_operand" "")
+                     (match_operand 2 "immediate_operand" ""))
+        (match_operand 3 "register_operand" ""))]
   ""
 {
   /* Handle extractions from %ah et al.  */
      matches the predicate, so check it again here.  */
   if (! register_operand (operands[0], VOIDmode))
     FAIL;
+
+  if (TARGET_64BIT)
+    emit_insn (gen_movdi_insv_1_rex64 (operands[0], operands[3]));
+  else
+    emit_insn (gen_movsi_insv_1 (operands[0], operands[3]));
+
+  DONE;
 })
 
 ;; %%% bts, btr, btc, bt.