Which register classes do rd and rs1 use in fcvt.wu.d?
This is a floating-point-to-integer conversion: rs1 is a floating-point register and rd is an integer register.
Convert double to unsigned int32: rd = (uint32_t)f[rs1].
fcvt.wu.d converts a double-precision source operand to an unsigned 32-bit integer result. Floating-point-to-integer conversion rounds according to rm and writes integer register rd.
Shows the D-extension FCVT flow: decode OP-FP fields, fmt/rs2 conversion selection, rm rounding, read the floating-point source, then write the integer destination.
The word is split as an R-type OP-FP instruction; FCVT conversion instructions use opcode 1010011.
The current example rounds to a 32-bit integer according to rm and shows NX because the source has a fractional part.
The current example rounds to a 32-bit integer according to rm and shows NX because the source has a fractional part.
This animation shows only D-extension FCVT ISA-visible encoding, source/destination register direction, rounding field, and example fflags; it does not model FPU pipelines, exception handling, NaN payloads, or microarchitecture.
fcvt.wu.d reads a double-precision FP source in rs1, rounds it according to rm to an unsigned 32-bit integer, and writes x[rd]; negative, NaN, or out-of-range uint32 inputs take the official invalid-conversion path.
Understand this scenario with real code like «fcvt.wu.d x10, f0, rtz # x10 = (unsigned)f0».
This is a floating-point-to-integer conversion: rs1 is a floating-point register and rd is an integer register.
When the FP source is not integral and must be rounded to an integer, rm affects the 32-bit integer written to rd; inexact conversion sets NX. NaN or out-of-range inputs follow the official invalid-conversion rule and set NV.
rs2 is not an ordinary source register; in the FCVT encoding it selects the WU unsigned 32-bit integer format.