The interactions with SVP64
are explained in the [[int_fp_mv/appendix]]
-# Float load immediate <a name="fmvis"></a>
+# Float load immediate
-This is like a variant of `fmvfg`
+These arelike a variant of `fmvfg`. Power ISA currently requires a large
+number of instructions to get Floating Point constants into registers.
+FP16 and BF16 Formats both fit into 16-bit immediates.
+
+## Load BF16 Immediate <a name="fmvis"></a>
`fmvis FRT, FI`
to instead write `+0.0` if `RA` is register `0`, at least
allowing clearing FPRs.
-`fmvis` fits well with DX-Form:
+`fmvis` fits with DX-Form:
| 0-5 | 6-10 | 11-15 | 16-25 | 26-30 | 31 | Form |
|--------|------|-------|-------|-------|-----|-----|
| Major | FRT | d1 | d0 | XO | d2 | DX-Form |
+Pseudocode:
+
bf16 = d0 || d1 || d2
fp32 = bf16 || [0]*16
FRT = Single_to_Double(fp32)
+## Load FP16 Immediate <a name="fishmv"></a>
+
+`fishmv FRT, FI`
+
+Interprets `FI` as an IEEE754 16-bit float, which is then converted to a
+64-bit float and written to `FRT`. This is equivalent to interpreting
+`FI` as a `FP16` and converting to 64-bit float.
+
+There is no need for an Rc=1 variant because this is an immediate loading
+instruction. This frees up one extra bit in the DX-Form format for packing
+a full `FP16`.
+
+`fishmv` fits with DX-Form:
+
+| 0-5 | 6-10 | 11-15 | 16-25 | 26-30 | 31 | Form |
+|--------|------|-------|-------|-------|-----|-----|
+| Major | FRT | d1 | d0 | XO | d2 | DX-Form |
+
+Pseudocode:
+
+ fp16 = d0 || d1 || d2
+ FRT = Half_to_Double(fp16)
+
+# Moves
+
+These instructions perform a straight unaltered bit-level copy from one Register
+File to another.
+
# FPR to GPR moves
* `fmvtg RT, FRA`