RISC-V MCU中文社区

【分享】 浮点指令(一:单精度)

发表于 全国大学生集成电路创新创业大赛 2023-05-16 08:31:51
0
741
0

团队介绍

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

浮点指令以及简单解释

fadd.s

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

fsub.s

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

fmul.s

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

fdiv.s

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

fsgnj.s

fsgnj.s rd, rs1, rs2 //f[rd] = {f[rs2][31], f[rs1][30:0]}
单精度浮点符号注入(Floating-point Sign Inject, Single-Precision). R-type, RV32F and RV64F.
用 f[rs1]指数和有效数以及 f[rs2]的符号作为符号位,来构造一个新的单精度浮点数,并将其写入 f[rd]。

fsgnjn.s

fsgnjn.s rd, rs1, rs2 //f[rd] = {~f[rs2][31], f[rs1][30:0]}
单精度浮点符号取反注入(Floating-point Sign Inject-Negate, Single-Precision). R-type, RV32F and RV64F.
用 f[rs1]指数和有效数以及 f[rs2]的符号作为符号位并取反,来构造一个新的单精度浮点数,并将其写入 f[rd]。

fsgnjx.s

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

fmin.s

fmin.s rd, rs1, rs2 //f[rd] = min(f[rs1], f[rs2])
单精度浮点最小值(Floating-point Minimum, Single-Precision). R-type, RV32F and RV64F.
把寄存器 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.s

fmax.s rd, rs1, rs2 //f[rd] = max(f[rs1], f[rs2])
单精度浮点最大值(Floating-point Maximum, Single-Precision). R-type, RV32F and RV64F.
把寄存器 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小。

fsqrt.s

fsqrt.s rd, rs1, rs2 //f[rd] =sqrt(f[rs1])
单精度浮点平方根(Floating-point Square Root, Single-Precision). R-type, RV32F and RV64F.
将 f[rs1]中的单精度浮点数的平方根舍入和写入 f[rd]。

喜欢0
用户评论
LiYH

LiYH 实名认证


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