aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2013-05-12 22:34:19 +0200
committerUros Bizjak <uros@gcc.gnu.org>2013-05-12 22:34:19 +0200
commit0f2c2331121cbb13426284112a9bddf18bde97ea (patch)
tree20c557f4a3e8577a02bf69fea01c5be2c11885d5 /gcc
parentda26909c046b25c1a632314b3333cbf1a57e7583 (diff)
downloadgcc-0f2c2331121cbb13426284112a9bddf18bde97ea.zip
gcc-0f2c2331121cbb13426284112a9bddf18bde97ea.tar.gz
gcc-0f2c2331121cbb13426284112a9bddf18bde97ea.tar.bz2
i386.md (*zero_extendsidi2): Add *x->?r alternative.
* config/i386/i386.md (*zero_extendsidi2): Add *x->?r alternative. From-SVN: r198806
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/i386/i386.md25
2 files changed, 24 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1b2fa2a..4f09e5b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index fb64d5e..fe86fb9 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -3092,10 +3092,10 @@
(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))
@@ -3112,6 +3112,9 @@
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}";
@@ -3127,7 +3130,9 @@
(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 "*")))
@@ -3136,12 +3141,22 @@
(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")