Home/Instructions/Float Half to Single
FCVT.S.H

RISC-V FCVT.S.H Instruction Details

Instruction ManualOP-FP

Half to Single FP; finite widening is exact, with legal rm still required.

Instruction Syntax

fcvt.s.h rd, rs1, rm

rd is FP f0–f31 (f0 is writable); rs1 is FP f0–f31; source/destination may overlap. rs2 selects the source type; no immediate.

32-bit OP-FP: funct5=01000, fmt=00 (destination S), rs2=00010, opcode=1010011.

RV32/RV64; requires Zfhmin (also included in Zfh), depending on F. Enable required extensions and FP state.

Optional rm defaults to dyn using frm; static 101/110 and dynamic frm=101–111 have reserved behavior. Finite widening is exact; software should select rne, and legal rm leaves the value unchanged.

A source narrower than FLEN requires NaN-boxing; an invalid box becomes canonical NaN. S results set all upper bits to ones when FLEN>32. Exceptions accrue in fflags; flag setting alone causes no FP exception trap. Finite animation examples assume initial fflags=0.

ZfhZfhminFloating-Point Convert

Instruction Behavior

fcvt.s.h converts a half-precision value in FP rs1 to single precision in FP rd. Finite widening is exact; rm and reserved encoding rules still apply.

FCVT.S.H Decode And Execute Animation

Shows the Zfhmin-extension FCVT flow: decode OP-FP fields, fmt/rs2 conversion selection, the rm rounding field, read the floating-point source, then write the floating-point destination.

rd
rs1
rm
fcvt.s.h
,
,

Leave rm empty for the assembly default dyn (111); this DYN example fixes frm=RNE. Use lowercase rne/rtz/rdn/rup/rmm/dyn only.

Execution Context
fmt=S (00)
rs2=H
rounding: RNE nearest-even
fflags: 0

Assume required extensions and FP state are enabled, applicable source NaN-boxing is valid, and initial fflags=0. Results preview the current input; Writeback represents commit.

31..27
26..25
24..20
19..15
14..12
11..7
6..0
01000
FCVT.S
00
fmt=S
00010
rs2=H
01011
rs1
000
rm
01010
rd
1010011
OP-FP
Execution Data Path
instruction
0x40258553
opcode
1010011 -> OP-FP
funct5/fmt
01000 + 00 -> FCVT.S.H
rs2
00010 -> H source
rm
000 -> RNE nearest-even
rd/rs1
fa0(f10) / fa1(f11)
read
fa1(f11) = H 1.25 (0x3D00)
convert
H 1.25 -> S 1.25
write
fa0(f10) = S 1.25 (0x3FA00000); 0
Current Step

Fetch: show the 32-bit OP-FP encoding

The word is split as an R-type OP-FP instruction; FCVT uses opcode 1010011.

encoding: 0x40258553
syntax : fcvt.s.h fa0(f10), fa1(f11), rne
result : fa0(f10) = S 1.25 (0x3FA00000); 0

H-to-S is a floating-point widening conversion; the current finite example is exact, does not need rm rounding, and leaves example fflags at 0.

FCVT Conversion View
H FP source
H 1.25 (0x3D00)
conversion
H 1.25 -> S 1.25
writeback
fa0(f10) = S 1.25 (0x3FA00000)

H-to-S is a floating-point widening conversion; the current finite example is exact, does not need rm rounding, and leaves example fflags at 0.

This animation shows only Zfhmin-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.

Quick Understanding & Search Notes

Half to Single FP; finite widening is exact, with legal rm still required.

32-bit OP-FP: funct5=01000, fmt=00 (S), rs2=00010, opcode=1010011.
rd and rs1 are f0–f31; f0 is writable and source/destination may overlap.
An H source narrower than FLEN requires NaN-boxing; an invalid box becomes canonical NaN.
RV32/RV64; requires Zfhmin (also included in Zfh) and F. Enable required extensions and FP state.

Common Usage Scenarios

FP format conversion

Understand this scenario with real code like «# f1 = 1.25; rm=rne; initial fflags=0 fcvt.s.h f0, f1, rne # f0 = 1.25; fflags=0».

Pre-Use Checklist

Syntax Check
  • rd is FP f0–f31 (f0 is writable); rs1 is FP f0–f31; source/destination may overlap. rs2 selects the source type; no immediate.
  • 32-bit OP-FP: funct5=01000, fmt=00 (destination S), rs2=00010, opcode=1010011.
Semantic Check
  • RV32/RV64; requires Zfhmin (also included in Zfh), depending on F. Enable required extensions and FP state.
  • Optional rm defaults to dyn using frm; static 101/110 and dynamic frm=101–111 have reserved behavior. Finite widening is exact; software should select rne, and legal rm leaves the value unchanged.
  • A source narrower than FLEN requires NaN-boxing; an invalid box becomes canonical NaN. S results set all upper bits to ones when FLEN>32. Exceptions accrue in fflags; flag setting alone causes no FP exception trap. Finite animation examples assume initial fflags=0.

Pitfalls / Common Confusions

rs2 selects the source type, not a second register operand.
Optional rm defaults to dyn using frm; static 101/110 and dynamic frm=101–111 have reserved behavior.
Finite H-to-S widening is exact; software should select rne.
S results set upper bits to ones when FLEN>32; the animation models only its listed finite sources.

FAQ

Which registers does fcvt.s.h use?

rd and rs1 are FP; rs2 encodes the source format.

How does fcvt.s.h use rm?

Finite widening is exact; legal rm leaves the value unchanged, but rm remains encoded and software should select rne. Omitted rm defaults to dyn using frm; reserved encoding rules still apply.