Hi Juzhe, > +/* Return true if the operation is the floating-point operation need FRM. */ > +static bool > +need_frm_p (rtx_code code, machine_mode mode) > +{ > + if (!FLOAT_MODE_P (mode)) > + return false; > + return code != SMIN && code != SMAX; > +}
Return true if the operation requires a rounding mode operand. Maybe also call it needs_fp_rounding? > + if (need_frm_p (code, mode)) > + emit_nonvlmax_fp_tu_insn (icode, RVV_BINOP_MU, ops, len); > + else > + emit_nonvlmax_tu_insn (icode, RVV_BINOP_MU, ops, len); > + } This feels like we could decide it inside emit_nonvlmax_tu_insn. Same for without _tu. But let's keep it like this for now in order not to stall progress. > +/* Implement TARGET_PREFERRED_ELSE_VALUE. For binary operations, > + prefer to use the first arithmetic operand as the else value if > + the else value doesn't matter, since that exactly matches the SVE > + destructive merging form. For ternary operations we could either > + pick the first operand and use FMAD-like instructions or the last > + operand and use FMLA-like instructions; the latter seems more > + natural. */ What's FMLA? That's SVE I suppose and ours is fmacc? Apart from that fine from my side, thanks for supporting this. Regards Robin