首页/指令库/双精度分类
FCLASS.D

RISC-V FCLASS.D 指令详解

指令手册R-type

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

指令语法

fclass.d rd, rs1

语法 fclass.d rd, rs1;rd 为整数 x0–x31,rs1 为浮点 f0–f31;没有 rs2 或舍入操作数。D 2.2 依赖 F,适用 RV32/RV64。

32 位 OP-FP:funct7=1110001(funct5=11100、fmt=01),rs2=00000、funct3=001、opcode=1010011。

双精度分类结果为10位 one-hot 掩码,其他位清零;rd=x0 丢弃结果。包括 sNaN 在内均不设置 fflags,不舍入。

FLEN>64 时要求正确 NaN-boxing,否则按双精度 canonical NaN 分类为 bit9。动画固定 FLEN=64、初始 fflags=0;文本转 binary64 不是指令的舍入操作。

D浮点分类

指令行为说明

FCLASS.D 检查 f[rs1] 中的双精度浮点编码,并把 10 位 one-hot 分类掩码写入 x[rd]。位 0..9 依次表示负无穷、负正规、负非正规、负零、正零、正非正规、正正规、正无穷、signaling NaN、quiet NaN;其它 rd 位清零,且不设置浮点异常标志。

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

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

rd
rs1
fclass.d
,
执行环境
FLEN=64 / fmt=D (01)
funct3: 浮点分类
fflags: 初始 0
31..27
26..25
24..20
19..15
14..12
11..7
6..0
11100
FCLASS
01
fmt=D
00000
rs2
01011
rs1
001
funct3=001
01010
rd
1010011
OP-FP
执行数据路径
instruction
0xE2059553
opcode
1010011 -> OP-FP
funct5/fmt
11100 + D(01) -> FCLASS.D
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: 0xE2059553
syntax : fclass.d a0(x10), fa1(f11)
result : 尚未写回;初始 fflags=0

FCLASS 写入 10 位 one-hot 分类掩码,除位 0..9 外其它 rd 位清零;分类 NaN 也不设置浮点异常标志。文本 NaN 示例按 quiet NaN 显示,signaling NaN 的官方位为 bit 8。

双精度计算视图
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 示例按 quiet NaN 显示,signaling NaN 的官方位为 bit 8。

假定 D 与 FS 已启用,固定 FLEN=64、初始 fflags=0。十进制文本先表示为 binary64 源值;支持有限值、正负零、无穷、qNaN 和 sNaN。FCLASS.D 不舍入、不改变 fflags;结果写入整数 rd,rd=x0 时丢弃掩码且 x0 保持为零。步骤是教学视图。

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

快速理解与检索要点

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

D 2.2 依赖 F;FCLASS.D 适用于 RV32/RV64,要求 FS 已启用;rd 选择整数 x0–x31,rs1 选择浮点 f0–f31。
32 位 OP-FP:funct7=1110001(funct5=11100、fmt=01),rs2=00000、funct3=001、opcode=1010011;没有舍入操作数。
10 位分类掩码恰好一位为 1,其它整数结果位清零;rd=x0 时结果被丢弃,x0 仍为0。
FCLASS.D 不转换数值、不舍入、不改变 fflags,包括 sNaN;FLEN>64 时先检查源 NaN-boxing,无效 box 按双精度 canonical NaN 分类(bit9)。动画固定 FLEN=64。

常见使用场景

双精度类别识别

fclass.d x10, f0 # f0 = -0.0 => x10 = 0x008; fflags unchanged。预置示例所述源值,并启用本页扩展与相关状态;示例注释给出按本页规则推导的结果。

NaN 分类

fclass.d x10, f0 # f0 = -0.0 => x10 = 0x008; fflags unchanged。预置示例所述源值,并启用本页扩展与相关状态;示例注释给出按本页规则推导的结果。

使用前检查清单

语法检查
  • 语法 fclass.d rd, rs1;rd 为整数 x0–x31,rs1 为浮点 f0–f31;没有 rs2 或舍入操作数。D 2.2 依赖 F,适用 RV32/RV64。
  • 32 位 OP-FP:funct7=1110001(funct5=11100、fmt=01),rs2=00000、funct3=001、opcode=1010011。
语义检查
  • 双精度分类结果为10位 one-hot 掩码,其他位清零;rd=x0 丢弃结果。包括 sNaN 在内均不设置 fflags,不舍入。
  • FLEN>64 时要求正确 NaN-boxing,否则按双精度 canonical NaN 分类为 bit9。动画固定 FLEN=64、初始 fflags=0;文本转 binary64 不是指令的舍入操作。

容易混淆 / 常见误区

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

常见问题

FCLASS.D 会设置 NV 吗?

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

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

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

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

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