http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46153
Uros Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED AssignedTo|unassigned at gcc dot |ubizjak at gmail dot com |gnu.org | --- Comment #2 from Uros Bizjak <ubizjak at gmail dot com> 2010-10-28 09:07:34 UTC --- Somebody didn't read the comment for ix86_fixup_binary_operands to the very end: /* Fix up OPERANDS to satisfy ix86_binary_operator_ok. Return the destination to use for the operation. If different from the true destination in operands[0], a copy operation will be required. */ rtx ix86_fixup_binary_operands (enum rtx_code code, enum machine_mode mode, rtx operands[]) ... So we have to change - "ix86_fixup_binary_operands (UNKNOWN, V2DFmode, operands);") +{ + rtx dst = ix86_fixup_binary_operands (UNKNOWN, V2DFmode, operands); + + emit_insn (gen_sse2_loadlpd (dst, operands[1], operands[2])); + + /* Fix up the destination if needed. */ + if (dst != operands[0]) + emit_move_insn (operands[0], dst); + + DONE; +}) in a few places. I have a patch in testing.