RISC-V技术论坛
直播中

挽你何用

10年用户 981经验值
擅长:电源/新能源 MEMS/传感技术
私信 关注
[经验]

浮点指令(二:双精度)


浮点指令以及简单解释

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指令,注意一下特殊情况:

  • 如果指令的两个操作数都是NaN,那么结果为Canonical-NaN。
  • 如果只有一个操作数位NaN,则结果为非NaN的另外一个操作数。
  • 如果任意一个操作数属于Signaling-NaN,则需要在fcsr寄存器中产生NV异常标志。
  • 由于浮点数可以表示两个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指令,注意一下特殊情况:

  • 如果指令的两个操作数都是NaN,那么结果为Canonical-NaN。
  • 如果只有一个操作数位NaN,则结果为非NaN的另外一个操作数。
  • 如果任意一个操作数属于Signaling-NaN,则需要在fcsr寄存器中产生NV异常标志。
  • 由于浮点数可以表示两个0值,分别是-0.0和+0.0,对于FMAX和FMIN指令而言,-0.0被认为比+0.0小。

更多回帖

发帖
×
20
完善资料,
赚取积分