首页/指令库/FCLASS-H
FCLASS.H

RISC-V FCLASS.H 指令详解

指令手册R-type

半精度浮点分类,把 10 位 one-hot 分类掩码写入整数 rd。

指令语法

fclass.h rd, rs1
操作数说明
rd:目标整数寄存器,接收 10 位 one-hot 分类掩码;写入 x0 时结果丢弃。
rs1:源半精度浮点寄存器;汇编语法没有第二个源浮点寄存器。
编码 rs2 固定为 00000,funct3 固定为 001;FCLASS 不使用 rm,也不设置 fflags。
Zfh浮点比较

指令行为说明

FCLASS.H 对 f[rs1] 中的半精度浮点值分类,并把 10 位 one-hot 掩码写入整数寄存器 rd。编码使用 OP-FP opcode、funct5=11100、fmt=H(10)、rs2=00000 和 funct3=001;该指令不舍入、不比较大小,也不设置 fflags。

FCLASS.H 指令解析与执行动画

展示 Zfh 扩展半精度 OP-FP 指令的 ISA 可见流程:解析编码字段,读取浮点寄存器,执行 FCLASS 语义并写回 rd。

rd
rs1
fclass.h
,
执行环境
FLEN=>=32 / fmt=H (10)
funct3: 浮点分类
fflags: 不会设置 fflags
31..27
26..25
24..20
19..15
14..12
11..7
6..0
11100
FCLASS
10
fmt=H
00000
rs2
01011
rs1
001
funct3=001
01010
rd
1010011
OP-FP
执行数据路径
instruction
0xE4059553
opcode
1010011 -> OP-FP
funct5/fmt
11100 + H(10) -> FCLASS.H
funct3
001 -> 浮点分类
rd/rs
a0(x10) / fa1(f11) / rs2=00000
read
-0.0
FP op
class(-0.0) = 0x008
write
a0(x10) = 0x008; 不会设置 fflags
当前步骤

Fetch:展示 32-bit OP-FP 编码

机器码按 R-type OP-FP 字段切分;半精度浮点 OP-FP 指令使用 opcode 1010011。

encoding: 0xE4059553
syntax : fclass.h a0(x10), fa1(f11)
result : a0(x10) = 0x008; 不会设置 fflags

FCLASS 写入 10 位 one-hot 分类掩码,除位 0..9 外其它 rd 位清零;分类 NaN 也不设置浮点异常标志。文本 NaN 示例按 quiet NaN 显示,signaling NaN 的官方位为 bit 8。 有限十进制教学输入先量化为 H 格式,再按其 H 编码分类。

半精度计算视图
rs1
fa1(f11) = -0.0
结果
class(-0.0) = 0x008
FCLASS 掩码位
bit 0
-inf
bit 1
负正规
bit 2
负非正规
bit 3
-0
bit 4
+0
bit 5
正非正规
bit 6
正正规
bit 7
+inf
bit 8
sNaN
bit 9
qNaN

FCLASS 写入 10 位 one-hot 分类掩码,除位 0..9 外其它 rd 位清零;分类 NaN 也不设置浮点异常标志。文本 NaN 示例按 quiet NaN 显示,signaling NaN 的官方位为 bit 8。 有限十进制教学输入先量化为 H 格式,再按其 H 编码分类。

该动画只展示 RISC-V Zfh 扩展的 ISA 可见 OP-FP 编码、示例数值结果和 fflags 关系;不模拟具体 FPU 流水线、延迟、完整 IEEE 754 边界组合或微架构实现。

快速理解与检索要点

FCLASS.H 不产生浮点结果;它读取一个半精度浮点源,按官方 10 类表把 one-hot 掩码写到整数 rd。

OP-FP opcode 为 1010011;funct5=11100、fmt=10、rs2=00000、funct3=001 选择 FCLASS.H。
Zfh 扩展依赖 F;FCLASS.H 属于 Zfh,不属于 Zfhmin。源 H 值在更宽 FLEN 中须正确 NaN-boxed,否则按规范 qNaN 分类(bit 9),仍不设置 fflags。
10 位分类掩码 bit 0..9 分别覆盖负无穷、负正规、负非正规、负零、正零、正非正规、正正规、正无穷、sNaN、qNaN。
FCLASS 不执行数值转换、不舍入、不设置 fflags;rd 是整数寄存器。

常见使用场景

浮点特殊值分类

结合 «fclass.h x10, f0 # x10 = class of f0» 等实际代码理解该场景。

区分正负零与 NaN 类别

结合 «fclass.h x10, f0 # x10 = class of f0» 等实际代码理解该场景。

使用前检查清单

语法检查
  • rd 选择 x0–x31,rs1 选择 f0–f31;rs2 固定为 00000,不是第二个源寄存器。
  • funct3=001 是分类选择字段,不是舍入模式。
语义检查
  • 确认所需扩展可用且浮点状态已启用;FS=Off 时访问浮点状态会引发非法指令异常。
  • FCLASS 不设置 fflags;x0 写回丢弃。H 源须正确 NaN-boxed,否则分类为规范 qNaN。

容易混淆 / 常见误区

结果写入整数寄存器,不写浮点寄存器。
FCLASS 返回 10 位 one-hot 分类掩码,不是 0/1 比较结果。 rd=x0 时计算结果被丢弃,x0 保持为零。
FCLASS 不设置浮点异常标志,包括对 qNaN 或 sNaN 分类。
rs2=00000 是固定编码字段,不是汇编语法中的第二个源操作数。

常见问题

FCLASS.H 会设置 NV 吗?

不会。官方 FCLASS 语义说明该指令不设置浮点异常标志,即使源值是 NaN。

FCLASS.H 的结果是布尔值吗?

不是。结果是 10 位 one-hot 分类掩码,用于表示具体浮点类别。

FCLASS.H 的 rs2 是什么?

汇编语法只有 rd 和 rs1;编码中的 rs2 字段固定为 00000。