+2004-06-07 Richard Henderson <rth@redhat.com>
+
+ PR rtl-opt/15193
+ * expmed.c (extract_bit_field): Fix vector_extract return.
+
+ * config/i386/i386.md (negv4sf2): New pattern.
+
2004-06-07 Mark Mitchell <mark@codesourcery.com>
PR c++/15337
[(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")
|| ! (*insn_data[icode].operand[1].predicate) (src, mode1)
|| ! (*insn_data[icode].operand[2].predicate) (rtxpos, mode2))
abort ();
+
pat = GEN_FCN (icode) (dest, src, rtxpos);
seq = get_insns ();
end_sequence ();
{
emit_insn (seq);
emit_insn (pat);
- return extract_bit_field (dest, bitsize,
- bitnum - pos * GET_MODE_BITSIZE (innermode),
- unsignedp, target, mode, tmode, total_size);
+ return dest;
}
}