diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2013-05-12 22:34:19 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2013-05-12 22:34:19 +0200 |
commit | 0f2c2331121cbb13426284112a9bddf18bde97ea (patch) | |
tree | 20c557f4a3e8577a02bf69fea01c5be2c11885d5 | |
parent | da26909c046b25c1a632314b3333cbf1a57e7583 (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 25 |
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") |