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

RISC-V FCLASS.D 指令详解

指令手册R-type

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

指令语法

fclass.d rd, rs1
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数寄存器。
源寄存器 rs2:第二个操作数寄存器。
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: 不会设置 fflags
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
-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: 0xE2059553
syntax : fclass.d 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 D 扩展的 ISA 可见 OP-FP 编码、示例数值结果和 fflags 关系;不模拟具体 FPU 流水线、延迟、完整 IEEE 754 边界组合或微架构实现。

快速理解与检索要点

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

funct5=11100、rs2=00000、funct3=001 选择 FCLASS,fmt 字段选择 S/D 格式。
10 位分类掩码恰好一位为 1;其它 x[rd] 位清零。
FCLASS 不执行数值转换、不舍入,也不设置 fflags。

常见使用场景

数值计算

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

浮点转换与比较

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

使用前检查清单

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

容易混淆 / 常见误区

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

常见问题

FCLASS.D 会设置 NV 吗?

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

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

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

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

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