commit 56296417b9f6795e541b1101dce6e6ac1789de9a Author: Alan Lawrence Date: Wed Oct 8 15:58:27 2014 +0100 IA64 (?!) diff --git a/gcc/config/ia64/vect.md b/gcc/config/ia64/vect.md index e3ce292..45f4156 100644 --- a/gcc/config/ia64/vect.md +++ b/gcc/config/ia64/vect.md @@ -1217,45 +1217,54 @@ "fpmin %0 = %1, %2" [(set_attr "itanium_class" "fmisc")]) -(define_expand "reduc_splus_v2sf" - [(match_operand:V2SF 0 "fr_register_operand" "") +(define_expand "reduc_plus_scal_v2sf" + [(match_operand:SF 0 "fr_register_operand" "") (match_operand:V2SF 1 "fr_register_operand" "")] "" { rtx tmp = gen_reg_rtx (V2SFmode); + rtx tmp2 = gen_reg_rtx (V2SFmode); + if (TARGET_BIG_ENDIAN) emit_insn (gen_fswap (tmp, CONST0_RTX (V2SFmode), operands[1])); else emit_insn (gen_fswap (tmp, operands[1], CONST0_RTX (V2SFmode))); - emit_insn (gen_addv2sf3 (operands[0], operands[1], tmp)); + emit_insn (gen_addv2sf3 (tmp2, operands[1], tmp)); + emit_insn (gen_vec_extractv2sf (operands[0], tmp2, GEN_INT (0))); DONE; }) -(define_expand "reduc_smax_v2sf" - [(match_operand:V2SF 0 "fr_register_operand" "") +(define_expand "reduc_smax_scal_v2sf" + [(match_operand:SF 0 "fr_register_operand" "") (match_operand:V2SF 1 "fr_register_operand" "")] "" { rtx tmp = gen_reg_rtx (V2SFmode); + rtx tmp2 = gen_reg_rtx (V2SFmode); + if (TARGET_BIG_ENDIAN) emit_insn (gen_fswap (tmp, CONST0_RTX (V2SFmode), operands[1])); else emit_insn (gen_fswap (tmp, operands[1], CONST0_RTX (V2SFmode))); - emit_insn (gen_smaxv2sf3 (operands[0], operands[1], tmp)); + emit_insn (gen_smaxv2sf3 (tmp2, operands[1], tmp)); + emit_insn (gen_vec_extractv2sf (operands[0], tmp2, GEN_INT (0))); DONE; }) -(define_expand "reduc_smin_v2sf" - [(match_operand:V2SF 0 "fr_register_operand" "") +(define_expand "reduc_smin_scal_v2sf" + [(match_operand:SF 0 "fr_register_operand" "") (match_operand:V2SF 1 "fr_register_operand" "")] "" { rtx tmp = gen_reg_rtx (V2SFmode); + rtx tmp2 = gen_reg_rtx (V2SFmode); + if (TARGET_BIG_ENDIAN) emit_insn (gen_fswap (tmp, CONST0_RTX (V2SFmode), operands[1])); else emit_insn (gen_fswap (tmp, operands[1], CONST0_RTX (V2SFmode))); - emit_insn (gen_sminv2sf3 (operands[0], operands[1], tmp)); + emit_insn (gen_sminv2sf3 (tmp2, operands[1], tmp)); + emit_insn (gen_vec_extractv2sf (operands[0], tmp2, GEN_INT (0))); DONE; })