diff options
author | Uros Bizjak <uros@gcc.gnu.org> | 2011-03-18 21:54:25 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2011-03-18 21:54:25 +0100 |
commit | 16cc44407fe40e3411e206eeec60a14d20769ade (patch) | |
tree | fb631932e8019654ce883f5f06071216d35dc929 /gcc | |
parent | f2c779bb053da67c12af0c91371ce13b5cdf8a7a (diff) | |
download | gcc-16cc44407fe40e3411e206eeec60a14d20769ade.zip gcc-16cc44407fe40e3411e206eeec60a14d20769ade.tar.gz gcc-16cc44407fe40e3411e206eeec60a14d20769ade.tar.bz2 |
i386.md (float<SSEMODEI24:mode><X87MODEF:mode>2): Rewrite using indirect functions.
* config/i386/i386.md (float<SSEMODEI24:mode><X87MODEF:mode>2):
Rewrite using indirect functions.
(lwp_slwpcb): Ditto.
* config/i386/sse.md (avx_vextractf128<mode>): Ditto.
(avx_vinsertf128<mode>): Ditto.
From-SVN: r171169
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 17 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 19 | ||||
-rw-r--r-- | gcc/config/i386/sse.md | 18 |
3 files changed, 34 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4dda33c..762dbb4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2011-03-18 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/i386.md (float<SSEMODEI24:mode><X87MODEF:mode>2): + Rewrite using indirect functions. + (lwp_slwpcb): Ditto. + * config/i386/sse.md (avx_vextractf128<mode>): Ditto. + (avx_vinsertf128<mode>): Ditto. + 2011-03-18 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * config/s390/s390.c (s390_delegitimize_address): Handle GOTOFF @@ -214,8 +222,7 @@ 2011-03-16 Jeff Law <law@redhat.com> * tree-vrp.c (identify_jump_threads): Slightly simplify type - check for operands of conditional. Allow type to be a - pointer. + check for operands of conditional. Allow type to be a pointer. 2011-03-16 Richard Guenther <rguenther@suse.de> @@ -470,8 +477,7 @@ 2011-03-15 Richard Guenther <rguenther@suse.de> - * config/i386/i386.c (ix86_emit_swdivsf): Implement more - efficiently. + * config/i386/i386.c (ix86_emit_swdivsf): Implement more efficiently. 2011-03-15 Alan Modra <amodra@gmail.com> @@ -499,8 +505,7 @@ 2011-03-14 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> - * config/sol2.c (solaris_assemble_visibility): Remove obsolete - URLs. + * config/sol2.c (solaris_assemble_visibility): Remove obsolete URLs. 2011-03-14 Jakub Jelinek <jakub@redhat.com> diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 12470ea..c9761a4 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -4959,18 +4959,18 @@ && !X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, <SSEMODEI24:MODE>mode)) { rtx reg = gen_reg_rtx (XFmode); - rtx insn; + rtx (*insn)(rtx, rtx); emit_insn (gen_float<SSEMODEI24:mode>xf2 (reg, operands[1])); if (<X87MODEF:MODE>mode == SFmode) - insn = gen_truncxfsf2 (operands[0], reg); + insn = gen_truncxfsf2; else if (<X87MODEF:MODE>mode == DFmode) - insn = gen_truncxfdf2 (operands[0], reg); + insn = gen_truncxfdf2; else gcc_unreachable (); - emit_insn (insn); + emit_insn (insn (operands[0], reg)); DONE; } }) @@ -18216,10 +18216,13 @@ (unspec_volatile [(const_int 0)] UNSPECV_SLWP_INTRINSIC))] "TARGET_LWP" { - if (TARGET_64BIT) - emit_insn (gen_lwp_slwpcbdi (operands[0])); - else - emit_insn (gen_lwp_slwpcbsi (operands[0])); + rtx (*insn)(rtx); + + insn = (TARGET_64BIT + ? gen_lwp_slwpcbdi + : gen_lwp_slwpcbsi); + + emit_insn (insn (operands[0])); DONE; }) diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index ba2bf24..6200419 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -4122,17 +4122,21 @@ (match_operand:SI 2 "const_0_to_1_operand" "")] "TARGET_AVX" { + rtx (*insn)(rtx, rtx); + switch (INTVAL (operands[2])) { case 0: - emit_insn (gen_vec_extract_lo_<mode> (operands[0], operands[1])); + insn = gen_vec_extract_lo_<mode>; break; case 1: - emit_insn (gen_vec_extract_hi_<mode> (operands[0], operands[1])); + insn = gen_vec_extract_hi_<mode>; break; default: gcc_unreachable (); } + + emit_insn (insn (operands[0], operands[1])); DONE; }) @@ -11776,19 +11780,21 @@ (match_operand:SI 3 "const_0_to_1_operand" "")] "TARGET_AVX" { + rtx (*insn)(rtx, rtx, rtx); + switch (INTVAL (operands[3])) { case 0: - emit_insn (gen_vec_set_lo_<mode> (operands[0], operands[1], - operands[2])); + insn = gen_vec_set_lo_<mode>; break; case 1: - emit_insn (gen_vec_set_hi_<mode> (operands[0], operands[1], - operands[2])); + insn = gen_vec_set_hi_<mode>; break; default: gcc_unreachable (); } + + emit_insn (insn (operands[0], operands[1], operands[2])); DONE; }) |