首页/指令库/单精度浮点分类
FCLASS.S

RISC-V FCLASS.S 指令详解

指令手册OP-FP

检查单精度浮点值,把官方 10 类 one-hot 掩码写入整数寄存器 rd。

指令语法

fclass.s rd, rs1

语法 fclass.s rd, rs1;rd 是整数、rs1 是浮点寄存器;没有舍入操作数。

32 位 OP-FP:funct7=1110000、rs2=00000、funct3=001、opcode=1010011;rs2 是固定选择子,不是第二源操作数。

RV32/RV64 F 2.2;所需扩展与浮点状态须启用。10位 one-hot 掩码,其它位清零;含 sNaN 在内均不设置 fflags,不舍入。

FLEN>32 时源须正确 NaN-boxed,否则按 canonical NaN;rd=x0 丢弃结果且 fflags 不变。动画固定 FLEN=32,文本先量化为 S 源值;量化不是指令舍入。初始 fflags=0 仅为动画假设;指令不清除已有标志。

F浮点分类

指令行为说明

FCLASS.S 检查 f[rs1] 中的单精度浮点编码,并把 10 位 one-hot 分类掩码写入 x[rd]。位 0..9 依次表示负无穷、负正规、负非正规、负零、正零、正非正规、正正规、正无穷、signaling NaN、quiet NaN;其它 rd 位清零,且不设置浮点异常标志。rd=x0 时丢弃掩码。FLEN>32 时源须正确 NaN-boxed,否则按单精度 canonical NaN 分类为 bit9。

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

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

rd
rs1
fclass.s
,
执行环境
FLEN=32 / fmt=S (00)
funct3: 浮点分类
fflags: 初始 0
31..27
26..25
24..20
19..15
14..12
11..7
6..0
11100
FCLASS
00
fmt=S
00000
rs2
01011
rs1
001
funct3=001
01010
rd
1010011
OP-FP
执行数据路径
instruction
0xE0059553
opcode
1010011 -> OP-FP
funct5/fmt
11100 + S(00) -> FCLASS.S
funct3
001 -> 浮点分类
rd/rs
a0(x10) / fa1(f11) / rs2=00000
read
尚未读取源寄存器
FP op
等待 Execute 计算
write
尚未写回;初始 fflags=0
当前步骤

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

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

encoding: 0xE0059553
syntax : fclass.s a0(x10), fa1(f11)
result : 尚未写回;初始 fflags=0

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

单精度计算视图
rs1
fa1(f11) = -0.0
结果
等待 Execute 计算
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/qnan 对应 quiet NaN 的 bit 9,snan 对应 signaling NaN 的 bit 8。 有限十进制教学输入先量化为 S 格式,再按其 S 编码分类。

假定 F 与 FS 已启用,固定 FLEN=32、初始 fflags=0。FCLASS.S 不舍入、不改变 fflags;分类掩码写入整数 rd,rd=x0 时丢弃且 x0 保持零。步骤是教学视图。

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

快速理解与检索要点

FCLASS.S 用一个整数掩码描述浮点值类别,适合在软件中区分零、非正规数、无穷和 NaN。

OP-FP opcode=1010011;funct5=11100、fmt=S=00、rs2=00000、funct3=001 选择 FCLASS.S。
10 位分类掩码恰好一位为 1;其它 x[rd] 位清零。
FCLASS 不执行数值转换、不舍入,也不设置 fflags。

常见使用场景

分类掩码

fclass.s x10, f0 # F enabled; f0=-0.0 -> x10=0x008, fflags unchanged。启用本页扩展与浮点状态并预置注释中的源值;结果按本页分类或舍入规则推导。

NaN 分类

fclass.s x10, f0 # F enabled; f0=-0.0 -> x10=0x008, fflags unchanged。启用本页扩展与浮点状态并预置注释中的源值;结果按本页分类或舍入规则推导。

正负零分类

fclass.s x10, f0 # F enabled; f0=-0.0 -> x10=0x008, fflags unchanged。启用本页扩展与浮点状态并预置注释中的源值;结果按本页分类或舍入规则推导。

使用前检查清单

语法检查
  • 语法 fclass.s rd, rs1;rd 是整数、rs1 是浮点寄存器;没有舍入操作数。
  • 32 位 OP-FP:funct7=1110000、rs2=00000、funct3=001、opcode=1010011;rs2 是固定选择子,不是第二源操作数。
语义检查
  • RV32/RV64 F 2.2;所需扩展与浮点状态须启用。10位 one-hot 掩码,其它位清零;含 sNaN 在内均不设置 fflags,不舍入。
  • FLEN>32 时源须正确 NaN-boxed,否则按 canonical NaN;rd=x0 丢弃结果且 fflags 不变。动画固定 FLEN=32,文本先量化为 S 源值;量化不是指令舍入。初始 fflags=0 仅为动画假设;指令不清除已有标志。

容易混淆 / 常见误区

结果写入整数寄存器,不写浮点寄存器。
FCLASS 返回 one-hot 分类掩码,不是 0/1 比较结果。
FCLASS 不设置浮点异常标志,包括对 NaN 分类。

常见问题

FCLASS.S 会设置 NV 吗?

不会。官方 FCLASS 语义说明该指令不设置浮点异常标志。

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

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

FCLASS.S 的 rd 是浮点寄存器吗?

不是。rd 是整数寄存器,保存分类掩码。