https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85048

--- Comment #8 from Hongtao.liu <crazylht at gmail dot com> ---
(In reply to Hongtao.liu from comment #7)
> Yes, Looks like the pattern name is misdefined.
> it shoud be fixuns_trunc, but we have ufix_trunc.

No, we have the right name but generate extra instructions for uns.

 8012(define_expand "fixuns_trunc<mode><sseintvecmodelower>2"
 8013  [(match_operand:<sseintvecmode> 0 "register_operand")
 8014   (match_operand:VF1 1 "register_operand")]
 8015  "TARGET_SSE2"
 8016{
 8017  if (<MODE>mode == V16SFmode)
 8018    emit_insn (gen_ufix_truncv16sfv16si2 (operands[0],
 8019                                          operands[1]));
 8020  else
 8021    {
 8022      rtx tmp[3];
 8023      tmp[0] = ix86_expand_adjust_ufix_to_sfix_si (operands[1], &tmp[2]);
 8024      tmp[1] = gen_reg_rtx (<sseintvecmode>mode);
 8025      emit_insn (gen_fix_trunc<mode><sseintvecmodelower>2 (tmp[1],
tmp[0]));
 8026      emit_insn (gen_xor<sseintvecmodelower>3 (operands[0], tmp[1],
tmp[2]));
 8027    }
 8028  DONE;

Reply via email to