From 2bd4bfee7e16cf608ae6e16c669e265bce635d48 Mon Sep 17 00:00:00 2001 From: Ganesh Gopalasubramanian Date: Mon, 16 Jun 2014 11:02:31 +0000 Subject: [PATCH] Remove vpmacsdql instruction from multiplication From-SVN: r211702 --- gcc/ChangeLog | 6 ++++++ gcc/config/i386/i386.c | 9 +++++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/i386/xop-imul64-vector.c | 1 - 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 802f3d93c28..7f242f2f0af 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-06-16 Ganesh Gopalasubramanian + + * config/i386/i386.c (ix86_expand_sse2_mulvxdi3): Issue + instructions "vpmuludq" and "vpaddq" instead of "vpmacsdql" for + handling 32-bit multiplication. + 2014-06-16 Chung-Lin Tang PR middle-end/61430 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index d46f5832eca..33226a9f935 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -45279,8 +45279,13 @@ ix86_expand_sse2_mulvxdi3 (rtx op0, rtx op1, rtx op2) /* t4: ((B*E)+(A*F))<<32, ((D*G)+(C*H))<<32 */ emit_insn (gen_ashlv2di3 (t4, t3, GEN_INT (32))); - /* op0: (((B*E)+(A*F))<<32)+(B*F), (((D*G)+(C*H))<<32)+(D*H) */ - emit_insn (gen_xop_pmacsdql (op0, op1, op2, t4)); + /* Multiply lower parts and add all */ + t5 = gen_reg_rtx (V2DImode); + emit_insn (gen_vec_widen_umult_even_v4si (t5, + gen_lowpart (V4SImode, op1), + gen_lowpart (V4SImode, op2))); + op0 = expand_binop (mode, add_optab, t5, t4, op0, 1, OPTAB_DIRECT); + } else { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 684eb7b669d..b417245646a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-06-16 Ganesh Gopalasubramanian + + * gcc.target/i386/xop-imul64-vector.c: Remove the check for + vpmacsdql instruction. + 2014-06-16 Yury Gribov * c-c++-common/asan/instrument-with-calls-1.c: New test. diff --git a/gcc/testsuite/gcc.target/i386/xop-imul64-vector.c b/gcc/testsuite/gcc.target/i386/xop-imul64-vector.c index fbf605f31ec..fc8c8806f78 100644 --- a/gcc/testsuite/gcc.target/i386/xop-imul64-vector.c +++ b/gcc/testsuite/gcc.target/i386/xop-imul64-vector.c @@ -33,4 +33,3 @@ int main () /* { dg-final { scan-assembler "vpmulld" } } */ /* { dg-final { scan-assembler "vphadddq" } } */ -/* { dg-final { scan-assembler "vpmacsdql" } } */ -- 2.30.2