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

RISC-V FCLASS.H 指令详解

指令手册R-type

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

指令语法

fclass.h rd, rs1
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数寄存器。
源寄存器 rs2:第二个操作数寄存器。
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。

半精度计算视图
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。

该动画只展示 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。
10 位分类掩码 bit 0..9 分别覆盖负无穷、负正规、负非正规、负零、正零、正非正规、正正规、正无穷、sNaN、qNaN。
FCLASS 不执行数值转换、不舍入、不设置 fflags;rd 是整数寄存器。

常见使用场景

信号处理与DSP

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

浮点基本运算

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

使用前检查清单

语法检查
  • 确认当前指令格式为 R-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

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

常见问题

FCLASS.H 会设置 NV 吗?

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

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

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

FCLASS.H 的 rs2 是什么?

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