When does rm matter for fcvt.s.d?
When the destination format cannot exactly represent the source value, rm or dynamic frm selects the rounding direction.
Convert double to single: f[rd] = (float)(double)f[rs1].
fcvt.s.d converts a double-precision source operand to a narrower single-precision result. If the destination format cannot represent the value exactly, the result is rounded according to rm.
fcvt.s.d converts a double-precision source operand to a narrower single-precision result. If the destination format cannot represent the value exactly, the result is rounded according to rm.
Understand this scenario with real code like «fcvt.s.d f0, f1, rne # f0 = (float)(double)f1».
When the destination format cannot exactly represent the source value, rm or dynamic frm selects the rounding direction.
It differs by source/destination format, integer signedness, RV64 restrictions, and whether rounding or invalid conversion can occur.