RISC-V MCU中文社区

【分享】 浮点指令(二:双精度)

发表于 全国大学生集成电路创新创业大赛 2023-05-17 08:23:30
0
1373
0

团队介绍

报名编号:CICC3940
团队名称:树上鸟儿成双队

浮点指令以及简单解释

fadd.d

fadd.d rd, rs1, rs2 //f [rd] = f [rs1] + f [rs2]
双精度浮点加(Floating-point Add, Double-Precision). R-type, RV32D and RV64D.
把寄存器 f[rs1]和 f[rs2]中的双精度浮点数相加,并将舍入后的和写入 f[rd]。

fsub.d

fsub.d rd, rs1, rs2 //f[rd] = f[rs1] - f[rs2]
双精度浮点减(Floating-point Subtract, Double-Precision). R-type, RV32D and RV64D.
把寄存器 f[rs1]和 f[rs2]中的双精度浮点数相减,并将舍入后的差写入 f[rd]。

fmul.d

fmul.d rd, rs1, rs2 //f[rd] = f[rs1] × f[rs2]
双精度浮点乘(Floating-point Multiply, Double-Precision). R-type, RV32D and RV64D.
把寄存器 f[rs1]和 f[rs2]中的双精度浮点数相乘,将舍入后的双精度结果写入 f[rd]中。

fdiv.d

fdiv.d rd, rs1, rs2 //f[rd] = f[rs1] ÷ f[rs2]
双精度浮点除法(Floating-point Divide, Double-Precision). R-type, RV32D and RV64D.
把寄存器 f[rs1]和 f[rs2]中的双精度浮点数相除,并将舍入后的商写入 f[rd]。

fsgnj.d

fsgnj.d rd, rs1, rs2 //f[rd] = {f[rs2][63], f[rs1][62:0]}
双精度浮点符号注入(Floating-point Sign Inject, Double-Precision). R-type, RV32D and RV64D.
用 f[rs1]指数和有效数以及 f[rs2]的符号的符号位,来构造一个新的双精度浮点数,并将其写入 f[rd]。

fsgnjn.d

fsgnjn.d rd, rs1, rs2 //f[rd] = {~f[rs2][63], f[rs1][62:0]}
双精度浮点符号取反注入(Floating-point Sign Inject-Negate, Double-Precision). R-type, RV32D and RV64D.
用 f[rs1]指数和有效数以及 f[rs2]的符号的符号位取反,来构造一个新的双精度浮点数,并将其写入 f[rd]。

fsgnjx.d

fsgnjx.d rd, rs1, rs2 //f[rd] = {f[rs1][63] ^ f[rs2][63], f[rs1][62:0]}
双精度浮点符号异或注入(Floating-point Sign Inject-XOR, Double-Precision). R-type, RV32D and RV64D.
用 f[rs1]指数和有效数以及 f[rs1]和 f[rs2]的符号的符号位异或,来构造一个新的双精度浮点数,并将其写入 f[rd]。

fmin.d

fmin.d rd, rs1, rs2 //f[rd] = min(f[rs1], f[rs2])
双精度浮点最小值(Floating-point Minimum, Double-Precision). R-type, RV32D and RV64D.
把寄存器 f[rs1]和 f[rs2]中的双精度浮点数中的较小值写入 f[rd]中。

对于FMAX和FMIN指令,注意一下特殊情况:

  1. 如果指令的两个操作数都是NaN,那么结果为Canonical-NaN。

  2. 如果只有一个操作数位NaN,则结果为非NaN的另外一个操作数。

  3. 如果任意一个操作数属于Signaling-NaN,则需要在fcsr寄存器中产生NV异常标志。

  4. 由于浮点数可以表示两个0值,分别是-0.0和+0.0,对于FMAX和FMIN指令而言,-0.0被认为比+0.0小。

fmax.d

fmax.d rd, rs1, rs2 //f[rd] = max(f[rs1], f[rs2])
双精度浮点最大值(Floating-point Maximum, Double-Precision). R-type, RV32D and RV64D.
把寄存器 f[rs1]和 f[rs2]中的双精度浮点数中的较大值写入 f[rd]中。

对于FMAX和FMIN指令,注意一下特殊情况:

  1. 如果指令的两个操作数都是NaN,那么结果为Canonical-NaN。

  2. 如果只有一个操作数位NaN,则结果为非NaN的另外一个操作数。

  3. 如果任意一个操作数属于Signaling-NaN,则需要在fcsr寄存器中产生NV异常标志。

  4. 由于浮点数可以表示两个0值,分别是-0.0和+0.0,对于FMAX和FMIN指令而言,-0.0被认为比+0.0小。

喜欢0
用户评论
LiYH

LiYH 实名认证


积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板