aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/i386/i386.md
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/i386/i386.md')
-rw-r--r--gcc/config/i386/i386.md12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 770a7af..ed2c579 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -20404,6 +20404,18 @@
[(set_attr "type" "sseadd")
(set_attr "mode" "SF")])
+;; ??? Should probably be done by generic code instead.
+(define_expand "negv4sf2"
+ [(set (match_operand:V4SF 0 "register_operand" "")
+ (xor:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "")
+ (match_dup 2)))]
+ "TARGET_SSE"
+{
+ rtx m0 = gen_lowpart (SFmode, gen_int_mode (0x80000000, SImode));
+ rtx vm0 = gen_rtx_CONST_VECTOR (V4SFmode, gen_rtvec (4, m0, m0, m0, m0));
+ operands[2] = force_reg (V4SFmode, vm0);
+})
+
(define_insn "mulv4sf3"
[(set (match_operand:V4SF 0 "register_operand" "=x")
(mult:V4SF (match_operand:V4SF 1 "register_operand" "0")