FMVH.X.D

RISC-V FMVH.X.D Instruction Details

Instruction ManualR-type

On RV32, copy the high 32 bits of a double floating-point register to an integer register.

Instruction Syntax

fmvh.x.d rd, rs1
Operand Breakdown
rd/rs fields denote integer or floating-point registers depending on the direction of this instruction.
FMV forms copy bit patterns; they are not FCVT numeric conversions and do not use rm.
ZfaDData Movement

Instruction Behavior

FMVH.X.D is a Zfa bit-move instruction for RV32+D that copies bits 63:32 of f[rs1] into x[rd]. Together with FMV.X.W it can split a double-precision encoding into two integer registers; this is a bit copy, not a numeric conversion.

Quick Understanding & Search Notes

FMVH.X.D fills the RV32 path for moving a 64-bit double encoding through 32-bit integer registers. The key points are bit order and that it is not numeric conversion.

FMVH.X.D takes the high 32 bits; FMVP.D.X uses rs1 for the low 32 bits and rs2 for the high 32 bits.
These instructions do not use rm and do not alter NaN payloads.

Common Usage Scenarios

Floating-Point Bit Move

Understand this scenario with real code like «fmvh.x.d x10, f11 ; x10 = f11[63:32] (RV32 only)».

RV32 Double Data Movement

Understand this scenario with real code like «fmvh.x.d x10, f11 ; x10 = f11[63:32] (RV32 only)».

Pre-Use Checklist

Syntax Check
  • Confirm the current instruction format is R-type.
  • Confirm the operand order matches the example.
Semantic Check
  • Ensure the destination register usage is compatible with the calling convention.
  • Confirm this is not the lower-level form of a pseudo-instruction expansion.

Pitfalls / Common Confusions

Used for RV32+D double-precision bit movement; RV64 normally uses FMV.X.D/FMV.D.X.
This is a bit copy, not an FCVT numeric conversion.
It sets no floating-point exception flags.

FAQ

Is FMVH.X.D an FCVT conversion?

No. It only copies the bit pattern and does not interpret and convert the numeric value.

Why does FMVH.X.D emphasize RV32?

Because RV32 integer registers are only 32 bits wide, so a 64-bit double encoding must be moved in a pair.