* config/i386/i386.md (*zero_extendsidi2): Add *x->?r alternative.
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 12 May 2013 20:34:19 +0000 (20:34 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 12 May 2013 20:34:19 +0000 (20:34 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@198806 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 1b2fa2a..4f09e5b 100644 (file)
@@ -1,3 +1,7 @@
+2013-05-12  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.md (*zero_extendsidi2): Add *x->?r alternative.
+
 2013-05-10  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.md (memory): Handle sseishft1.
index fb64d5e..fe86fb9 100644 (file)
 
 (define_insn "*zero_extendsidi2"
   [(set (match_operand:DI 0 "nonimmediate_operand"
-                       "=r,?r,?o,r   ,o,?*Ym,?!*y,?r ,?*Yi,?*x")
+                       "=r,?r,?o,r   ,o,?*Ym,?!*y,?r ,?r,?*Yi,?*x")
        (zero_extend:DI
         (match_operand:SI 1 "x86_64_zext_operand"
-                       "0 ,rm,r ,rmWz,0,r   ,m   ,*Yj,r   ,m")))]
+                       "0 ,rm,r ,rmWz,0,r   ,m   ,*Yj,*x,r   ,m")))]
   ""
 {
   switch (get_attr_type (insn))
     case TYPE_MMXMOV:
       return "movd\t{%1, %0|%0, %1}";
 
+    case TYPE_SSELOG1:
+      return "%vpextrd\t{$0, %1, %k0|%k0, %1, 0}";
+
     case TYPE_SSEMOV:
       if (GENERAL_REG_P (operands[0]))
        return "%vmovd\t{%1, %k0|%k0, %1}";
              (const_string "nox64")
            (eq_attr "alternative" "3,7")
              (const_string "x64")
-           (eq_attr "alternative" "9")
+           (eq_attr "alternative" "8")
+             (const_string "x64_sse4")
+           (eq_attr "alternative" "10")
              (const_string "sse2")
           ]
           (const_string "*")))
              (const_string "multi")
            (eq_attr "alternative" "5,6")
              (const_string "mmxmov")
-           (eq_attr "alternative" "7,8,9")
+           (eq_attr "alternative" "7,9,10")
              (const_string "ssemov")
+           (eq_attr "alternative" "8")
+             (const_string "sselog1")
           ]
           (const_string "imovx")))
+   (set (attr "prefix_extra")
+     (if_then_else (eq_attr "alternative" "8")
+       (const_string "1")
+       (const_string "*")))
+   (set (attr "length_immediate")
+     (if_then_else (eq_attr "alternative" "8")
+       (const_string "1")
+       (const_string "*")))
    (set (attr "prefix")
-     (if_then_else (eq_attr "type" "ssemov")
+     (if_then_else (eq_attr "type" "ssemov,sselog1")
        (const_string "maybe_vex")
        (const_string "orig")))
    (set (attr "prefix_0f")