aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/i386/sse.md6
2 files changed, 10 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 673275a..068d150 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2012-06-25 Richard Henderson <rth@redhat.com>
+ * config/i386.sse.md (mul<VI4_AVX2>3): Use xop_pmacsdd.
+
+2012-06-25 Richard Henderson <rth@redhat.com>
+
* config/i386/i386.c (ix86_rtx_costs) [MULT]: Only apply XOP cost
to V16QImode.
(ix86_expand_vec_interleave): New.
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 4c12581..93cd9d7 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -5564,6 +5564,12 @@
operands[2] = force_const_mem (<MODE>mode, operands[2]);
ix86_fixup_binary_operands_no_copy (MULT, <MODE>mode, operands);
}
+ else if (TARGET_XOP)
+ {
+ rtx z = force_reg (<MODE>mode, CONST0_RTX (<MODE>mode));
+ emit_insn (gen_xop_pmacsdd (operands[0], operands[1], operands[2], z));
+ DONE;
+ }
else
{
ix86_expand_sse2_mulv4si3 (operands[0], operands[1], operands[2]);