下面我们逐个看下每个指令的细节:

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]。

示例:

to do

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]。

示例:

to do

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]中。

示例:

to do

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]。

示例:

to do

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]。

示例:

to do

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]。

示例:

to do

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]。

示例:

to do

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小。

示例:

to do

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小。

示例:

to do

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]。

示例:

to do

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]。

示例:

to do

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]。

示例:

to do

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]中。

示例:

to do

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]。

示例:

to do

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]。

示例:

to do

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]。

示例:

to do

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]。

示例:

to do

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小。

示例:

to do

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小。

示例:

to do

fcvt.s.d

fcvt.s.d rd, rs1, rs2    //f[rd] = f32f64(f[rs1])
双精度向单精度浮点转换(Floating-point Convert to Single from Double). R-type, RV32D and RV64D.
把寄存器 f[rs1]中的双精度浮点数转化为单精度浮点数,再写入 f[rd]中。

示例:

to do

fcvt.d.s

fcvt.d.s rd, rs1, rs2    //f[rd] = f64f32(f[rs1])
单精度向双精度浮点转换(Floating-point Convert to Double from Single). R-type, RV32D and RV64D.
把寄存器 f[rs1]中的单精度浮点数转化为双精度浮点数,再写入 f[rd]中。

示例:

to do

fsqrt.d

fsqrt.d rd, rs1, rs2   //f[rd] =sqrt(f[rs1])
双精度浮点平方根(Floating-point Square Root, Double-Precision). R-type, RV32D and RV64D.
将 f[rs1]中的双精度浮点数的平方根舍入和写入 f[rd]。

示例:

to do

fadd.q

示例:

to do

fsub.q

示例:

to do

fmul.q

示例:

to do

fdiv.q

示例:

to do

fsgnj.q

示例:

to do

fsgnjn.q

示例:

to do

fsgnjx.q

示例:

to do

fmin.q

示例:

to do

fmax.q

示例:

to do

fcvt.s.q

示例:

to do

fcvt.q.s

示例:

to do

fcvt.d.q

示例:

to do

fcvt.q.d

示例:

to do

fsqrt.q

示例:

to do

fle.s

fle.s rd, rs1, rs2    //x[rd] = f[rs1] ≤ f[rs2]
单精度浮点小于等于(Floating-point Less Than or Equal, Single-Precision). R-type, RV32F and RV64F.
若寄存器 f[rs1]中的单精度浮点数小于等于 f[rs2]中的单精度浮点数, 则在 x[rd]中写入 1,反之写 0。

  • 对于FLT,FLE和FEQ指令,如果任何一个操作数位NaN,则结果为0。
  • 对于FLT和FLE指令,如果任意一个操作数属于Nan,则需要在fscr寄存器中产生NV异常标志。
  • 对于FEQ指令,如果任意一个操作数属于Signaling-NaN,则需要在fcsr寄存器中产生NV异常标志。

示例:

to do

flt.s

flt.s rd, rs1, rs2    //x[rd] = f[rs1] < f[rs2]
单精度浮点小于 (Floating-point Less Than, Single-Precision). R-type, RV32F and RV64F.
若寄存器 f[rs1]中的单精度浮点数小于 f[rs2]中的单精度浮点数, 则在 x[rd]中写入 1,反之写0。

  • 对于FLT,FLE和FEQ指令,如果任何一个操作数位NaN,则结果为0。
  • 对于FLT和FLE指令,如果任意一个操作数属于Nan,则需要在fscr寄存器中产生NV异常标志。
  • 对于FEQ指令,如果任意一个操作数属于Signaling-NaN,则需要在fcsr寄存器中产生NV异常标志。

示例:

to do

fle.d

fle.d rd, rs1, rs2    //x[rd] = f[rs1] < f[rs2]
双精度浮点小于 (Floating-point Less Than, Double-Precision). R-type, RV32D and RV64D.
若寄存器 f[rs1]中的双精度浮点数小于 f[rs2]中的双精度浮点数, 则在 x[rd]中写入 1,反之写0。

  • 对于FLT,FLE和FEQ指令,如果任何一个操作数位NaN,则结果为0。
  • 对于FLT和FLE指令,如果任意一个操作数属于Nan,则需要在fscr寄存器中产生NV异常标志。
  • 对于FEQ指令,如果任意一个操作数属于Signaling-NaN,则需要在fcsr寄存器中产生NV异常标志。

示例:

to do

flt.d

fle.d rd, rs1, rs2    //x[rd] = f[rs1] < f[rs2]
双精度浮点小于 (Floating-point Less Than, Double-Precision). R-type, RV32D and RV64D.
若寄存器 f[rs1]中的双精度浮点数小于 f[rs2]中的双精度浮点数, 则在 x[rd]中写入 1,反之写0。

  • 对于FLT,FLE和FEQ指令,如果任何一个操作数位NaN,则结果为0。
  • 对于FLT和FLE指令,如果任意一个操作数属于Nan,则需要在fscr寄存器中产生NV异常标志。
  • 对于FEQ指令,如果任意一个操作数属于Signaling-NaN,则需要在fcsr寄存器中产生NV异常标志。

示例:

to do

fle.q

示例:

to do

flt.q

示例:

to do

feq.s

feq.s rd, rs1, rs2    //x[rd] = f[rs1] == f[rs2]
单精度浮点相等(Floating-point Equals, Single-Precision). R-type, RV32F and RV64F.
若寄存器 f[rs1]和 f[rs2]中的单精度浮点数相等, 则在 x[rd]中写入 1,反之写 0。

  • 对于FLT,FLE和FEQ指令,如果任何一个操作数位NaN,则结果为0。
  • 对于FLT和FLE指令,如果任意一个操作数属于Nan,则需要在fscr寄存器中产生NV异常标志。
  • 对于FEQ指令,如果任意一个操作数属于Signaling-NaN,则需要在fcsr寄存器中产生NV异常标志。

示例:

to do

feq.d

feq.d rd, rs1, rs2  //x[rd] = f[rs1] == f[rs2]
双精度浮点相等(Floating-point Equals, Double-Precision). R-type, RV32D and RV64D.
若寄存器 f[rs1]和 f[rs2]中的双精度浮点数相等, 则在 x[rd]中写入 1,反之写 0。

  • 对于FLT,FLE和FEQ指令,如果任何一个操作数位NaN,则结果为0。
  • 对于FLT和FLE指令,如果任意一个操作数属于Nan,则需要在fscr寄存器中产生NV异常标志。
  • 对于FEQ指令,如果任意一个操作数属于Signaling-NaN,则需要在fcsr寄存器中产生NV异常标志。

示例:

to do

feq.q

示例:

to do

fcvt.w.s

fcvt.w.s rd, rs1, rs2   //x[rd] = sext(s32f32(f[rs1]))
单精度浮点向字转换(Floating-point Convert to Word from Single). R-type, RV32F and RV64F.
把寄存器 f[rs1]中的单精度浮点数转化为 32 位二进制补码表示的整数,再写入 x[rd]中。

由于浮点数表示范围远远大于整数,且浮点数存在一些特殊表示,比如无穷大和NaN等,下表是一些浮点转化整数时候的一些特殊情况。

示例:

to do

fcvt.wu.s

fcvt.wu.s rd, rs1, rs2   //x[rd] = sext(u32f32(f[rs1]))
单精度浮点向无符号字转换(Floating-point Convert to Unsigned Word from Single). R-type,RV32F and RV64F.
把寄存器 f[rs1]中的单精度浮点数转化为 32 位无符号整数,再写入 x[rd]中。

示例:

to do

fcvt.l.s

fcvt.l.s rd, rs1, rs2   //x[rd] = s64f32(f[rs1])
单精度浮点向长整型转换(Floating-point Convert to Long from Single). R-type, RV64F.
把寄存器 f[rs1]中的单精度浮点数转化为 64 位二进制补码表示的整数,再写入 x[rd]中。

示例:

to do

fcvt.lu.s

fcvt.lu.s rd, rs1, rs2   //x[rd] = u64f32(f[rs1])
单精度浮点向无符号长整型转换(Floating-point Convert to Unsigned Long from Single). R-type,RV64F.
把寄存器 f[rs1]中的单精度浮点数转化为 64 位二进制补码表示的整数,再写入 x[rd]中。

示例:

to do

fmv.x.w

fmv.x.w rd, rs1, rs2    //x[rd] = sext(f[rs1][31:0])
单精度浮点移动(Floating-point Move Word to Integer). R-type, RV32F and RV64F.
把寄存器 f[rs1]中的低32位整数复制到 x[rd]中作为一个单精度浮点数表示。

示例:

to do

fclass.s

fclass.s rd, rs1, rs2    //x[rd] = classifys(f[rs1])
单精度浮点分类(Floating-point Classify, Single-Precision). R-type, RV32F and RV64F.
把一个表示寄存器 f[rs1]中单精度浮点数类别的掩码写入 x[rd]中。 x[rd]中有且仅有一位被置上,见下表

示例:

to do

fcvt.w.d

fcvt.w.d rd, rs1, rs2   //x[rd] = sext(s32f64(f[rs1]))
双精度浮点向字转换(Floating-point Convert to Word from Double). R-type, RV32D and RV64D
把寄存器 f[rs1]中的双精度浮点数转化为 32 位二进制补码表示的整数,再写入 x[rd]中。

示例:

to do

fcvt.wu.d

fcvt.wu.d rd, rs1, rs2    //x[rd] = sext(u32f64(f[rs1]))
双精度浮点向无符号字转换(Floating-point Convert to Unsigned Word from Double). R-type,RV32D and RV64D.
把寄存器 f[rs1]中的双精度浮点数转化为 32 位无符号整数,再写入 x[rd]中。

示例:

to do

fcvt.l.d

fcvt.l.d rd, rs1, rs2   //x[rd] = s64f64(f[rs1])
双精度浮点向长整型转换(Floating-point Convert to Long from Double). R-type, RV64D.
把寄存器 f[rs1]中的双精度浮点数转化为 64 位二进制补码表示的整数,再写入 x[rd]中。

示例:

to do

fcvt.lu.d

fcvt.lu.d rd, rs1, rs2   //x[rd] = u64f64(f[rs1])
双精度浮点向无符号长整型转换(Floating-point Convert to Unsigned Long from Double). Rtype, RV64D.
把寄存器 f[rs1]中的双精度浮点数转化为 64 位无符号整数,再写入 x[rd]中。

示例:

to do

fmv.x.d

fmv.x.d rd, rs1, rs2   //x[rd] = f[rs1][63:0]
双精度浮点移动(Floating-point Move Doubleword to Integer). R-type, RV64D.
把寄存器 f[rs1]中的双精度浮点数复制到 x[rd]中。

示例:

to do

fclass.d

fclass.d rd, rs1, rs2    //x[rd] = classifyd(f[rs1])
双精度浮点分类(Floating-point Classify, Double-Precision). R-type, RV32D and RV64D.
把一个表示寄存器 f[rs1]中双精度浮点数类别的掩码写入 x[rd]中。关于如何解释写入 x[rd]的值,请参阅指令 fclass.s 的介绍。

示例:

to do

fcvt.w.q

示例:

to do

fcvt.wu.q

示例:

to do

fcvt.l.q

示例:

to do

fcvt.lu.q

示例:

to do

fmv.x.q

示例:

to do

fclass.q

示例:

to do

fcvt.s.w

fcvt.s.w rd, rs1, rs2   //f[rd] = f32s32(x[rs1])
字向单精度浮点转换(Floating-point Convert to Single from Word). R-type, RV32F and RV64F.
把寄存器 x[rs1]中的 32 位二进制补码表示的整数转化为单精度浮点数,再写入 f[rd]中。

示例:

to do

fcvt.s.wu

fcvt.s.wu rd, rs1, rs2   //f[rd] = f32u32(x[rs1])
无符号字向单精度浮点转换(Floating-point Convert to Single from Unsigned Word). R-type,RV32F and RV64F.
把寄存器 x[rs1]中的 32 位无符号整数转化为单精度浮点数,再写入 f[rd]中。

示例:

to do

fcvt.s.l

fcvt.s.l rd, rs1, rs2  //f[rd] = f32s64(x[rs1])
长整型向单精度浮点转换(Floating-point Convert to Single from Long). R-type, RV64F.
把寄存器 x[rs1]中的 64 位二进制补码表示的整数转化为单精度浮点数,再写入 f[rd]中。

示例:

to do

fcvt.s.lu

fcvt.s.lu rd, rs1, rs2   //f[rd] = f32u64(x[rs1])
无符号长整型向单精度浮点转换(Floating-point Convert to Single from Unsigned Long). R-type,RV64F.
把寄存器 x[rs1]中的 64 位的无符号整数转化为单精度浮点数,再写入 f[rd]中。

示例:

to do

fmv.w.x

fmv.x.w rd, rs1, rs2    //x[rd] = sext(f[rs1][31:0])
单精度浮点移动(Floating-point Move Word to Integer). R-type, RV32F and RV64F.
把寄存器 f[rs1]中的补码表示的整数复制到 x[rd]中作为单精度浮点数,。

示例:

to do

fcvt.d.w

fcvt.d.w rd, rs1, rs2   //f[rd] = f64s32(x[rs1])
字向双精度浮点转换(Floating-point Convert to Double from Word). R-type, RV32D and RV64D.
把寄存器 x[rs1]中的 32 位二进制补码表示的整数转化为双精度浮点数,再写入 f[rd]中。

示例:

to do

fcvt.d.wu

fcvt.d.wu rd, rs1, rs2   //f[rd] = f64u32(x[rs1])
无符号字向双精度浮点转换(Floating-point Convert to Double from Unsigned Word). R-type,RV32D and RV64D.
把寄存器 x[rs1]中的 32 位无符号整数转化为双精度浮点数,再写入 f[rd]中。

示例:

to do

fcvt.d.l

fcvt.d.l rd, rs1, rs2   //f[rd] = f64s64(x[rs1])
长整型向双精度浮点转换(Floating-point Convert to Double from Long). R-type, RV64D.
把寄存器 x[rs1]中的 64 位二进制补码表示的整数转化为双精度浮点数,再写入 f[rd]中。

示例:

to do

fcvt.d.lu

fcvt.d.lu rd, rs1, rs2  //f[rd] = f64u64(x[rs1])
无符号长整型向双精度浮点转换(Floating-point Convert to Double from Unsigned Long). R-type, RV64D.
把寄存器 x[rs1]中的 64 位无符号整数转化为双精度浮点数,再写入 f[rd]中。

示例:

to do

fmv.d.x

fcvt.d.lu rd, rs1, rs2   //f[rd] = f64u64(x[rs1])
无符号长整型向双精度浮点转换(Floating-point Convert to Double from Unsigned Long). R-type, RV64D.
把寄存器 x[rs1]中的 64 位无符号整数转化为双精度浮点数,再写入 f[rd]中。

示例:

to do

fcvt.q.w

示例:

to do

fcvt.q.wu

示例:

to do

fcvt.q.l

示例:

to do

fcvt.q.lu

示例:

to do

fmv.q.x

示例:

to do

flw

flw rd, offset(rs1)    //f[rd] = M[x[rs1] + sext(offset)][31:0]
浮点加载字(Floating-point Load Word). I-type, RV32F and RV64F.
从内存地址 x[rs1] + sign-extend(offset)中取单精度浮点数,并写入 f[rd]。
压缩形式: c.flwsp rd, offset; c.flw rd, offset(rs1)

示例:

to do

fld

fld rd, offset(rs1)   //f[rd] = M[x[rs1] + sext(offset)][63:0]
浮点加载双字(Floating-point Load Doubleword). I-type, RV32D and RV64D.
从内存地址 x[rs1] + sign-extend(offset)中取双精度浮点数,并写入 f[rd]。
压缩形式: c.fldsp rd, offset; c.fld rd, offset(rs1)

示例:

to do

flq

示例:

to do

fsw

fsw rs2, offset(rs1)   //M[x[rs1] + sext(offset)] = f[rs2][31:0]
单精度浮点存储(Floating-point Store Word). S-type, RV32F and RV64F.
将寄存器 f[rs2]中的单精度浮点数存入内存地址 x[rs1] + sign-extend(offset)中。
压缩形式: c.fswsp rs2, offset; c.fsw rs2, offset(rs1)

示例:

to do

fsd

fsd rs2, offset(rs1)   //M[x[rs1] + sext(offset)] = f[rs2][63:0]
双精度浮点存储(Floating-point Store Doubleword). S-type, RV32D and RV64D.
将寄存器 f[rs2]中的双精度浮点数存入内存地址 x[rs1] + sign-extend(offset)中。
压缩形式: c.fsdsp rs2, offset; c.fsd rs2, offset(rs1)

示例:

to do

fsq

示例:

to do

fmadd.s

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

示例:

to do

fmsub.s

fmsub.s rd, rs1, rs2, rs3   //f[rd] = f[rs1]× f[rs2]-f[rs3]
单精度浮点乘减(Floating-point Fused Multiply-Subtarct, Single-Precision). R4-type, RV32F and RV64F.
把寄存器 f[rs1]和 f[rs2]中的单精度浮点数相乘,并将未舍入的积减去寄存器 f[rs3]中的单精
度浮点数,将舍入后的单精度浮点数写入 f[rd]。

示例:

to do

fnmsub.s

fnmsub.s rd, rs1, rs2, rs3   //f[rd] = -f[rs1]× f[rs2]+f[rs3]
单精度浮点乘取反减(Floating-point Fused Negative Multiply-Subtract, Single-Precision). R4-type, RV32F and RV64F.
把寄存器 f[rs1]和 f[rs2]中的单精度浮点数相乘,将结果取反,并将未舍入的积减去寄存器f[rs3]中的单精度浮点数,将舍入后的单精度浮点数写入 f[rd]。

示例:

to do

fnmadd.s

fnmadd.s rd, rs1, rs2, rs3   //f[rd] = -f[rs1]_f[rs2]-f[rs3]
单精度浮点乘取反加(Floating-point Fused Negative Multiply-Add, Single-Precision). R4-type,RV32F and RV64F.
把寄存器 f[rs1]和 f[rs2]中的单精度浮点数相乘,将结果取反,并将未舍入的积和寄存器 f[rs3]中的单精度浮点数相加,将舍入后的单精度浮点数写入 f[rd]。

示例:

to do

fmadd.d

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

示例:

to do

fmsub.d

fmsub.d rd, rs1, rs2, rs3   //f[rd] = f[rs1]× f[rs2]-f[rs3]
双精度浮点乘减(Floating-point Fused Multiply-Subtract, Double-Precision). R4-type, RV32D and RV64D.
把寄存器 f[rs1]和 f[rs2]中的双精度浮点数相乘,并将未舍入的积减去寄存器 f[rs3]中的双精度浮点数,将舍入后的双精度浮点数写入 f[rd]。

示例:

to do

fnmsub.d

fnmsub.d rd, rs1, rs2, rs3   //f[rd] = -f[rs1]_f[rs2]+f[rs3]
双精度浮点乘取反减(Floating-point Fused Negative Multiply-Subtract, Double-Precision). R4-type, RV32D and RV64D.
把寄存器 f[rs1]和 f[rs2]中的双精度浮点数相乘,将结果取反,并将未舍入的积减去寄存器f[rs3]中的双精度浮点数,将舍入后的双精度浮点数写入 f[rd]。

示例:

to do

fnmadd.d

fnmadd.d rd, rs1, rs2, rs3   //f[rd] = f[rs1]× f[rs2]+f[rs3]
双精度浮点乘取反加(Floating-point Fused Negative Multiply-Add, Double-Precision). R4-type,RV32D and RV64D.
把寄存器 f[rs1]和 f[rs2]中的双精度浮点数相乘,将结果取反,并将未舍入的积和寄存器 f[rs3]中的双精度浮点数相加,将舍入后的双精度浮点数写入 f[rd]。

示例:

to do

fmadd.q

示例:

to do

fmsub.q

示例:

to do

fnmsub.q

示例:

to do

fnmadd.q

示例:

to do

RV32FDQ/RV64RDQ指令集(2)的更多相关文章

  1. RV32FDQ/RV64RDQ指令集(1)

    Risc-V架构定义了可选的单精度浮点指令(F扩展指令集)和双精度浮点指令(D扩展指令集),以及四精度浮点指令集(Q扩展指令集).Risc-V架构规定:处理器可以选择只实现F扩展指令子集而不支持D扩展 ...

  2. SSE指令集学习:Compiler Intrinsic

    大多数的函数是在库中,Intrinsic Function却内嵌在编译器中(built in to the compiler). 1. Intrinsic Function Intrinsic Fun ...

  3. ARM-汇编指令集(总结)

    ARM汇编指令集 指令.伪指令 (汇编)指令:   是机器码的助记符,经过汇编器编译后,由CPU执行. (汇编)伪指令:用来指导指令执行,是汇编器的产物,最终不会生成机器码. 有两种不同风格的ARM指 ...

  4. iOS------苹果设备处理器指令集(iPhone初代到iPhone5s)

    (via 雅香小筑) Arm处理器,因为其低功耗和小尺寸而闻名,几乎所有的手机处理器都基于arm,其在嵌入式系统中的应用非常广泛,它的性能在同等功耗产品中也很出色. Armv6.armv7.armv7 ...

  5. SSE指令集优化学习:双线性插值

    对SSE的学习总算迈出了第一步,用2天时间对双线性插值的代码进行了优化,现将实现的过程梳理以下,算是对这段学习的一个总结. 1. 什么是SSE 说到SSE,首先要弄清楚的一个概念是SIMD(单指令多数 ...

  6. RISC指令集的五个周期

    RISC指令集的五个周期 RISC(reduced instruction set computer,精简指令集计算机)简称为精简指令集.RISC把执行指令的精力主要放在了经常使用的指令上面.本文主要 ...

  7. x86指令集同频性能提升

    x86近5000条指令,迄今为止最复杂的指令集.这里不研究CISC & RISC,也不考虑process制程变化,主要是看最近几代IA架构对于同频率下性能的提升. x86指令集nasm文档 h ...

  8. CPU指令集

    cpu作为一台电脑中的核心,它的作用是无法替代的.而cpu本身只是在块硅晶片上所集成的超大规模的集成电路,集成的晶体管数量可达到上亿个,是由非常先进复杂的制造工艺制造出来的,拥有相当高的科技含量. C ...

  9. 在UWP应用中加入Cortana语音指令集

    本文介绍小娜语音指令集的使用场景,如何将UWP应用接入小娜的语音指令集,使用户直接通过小娜启动应用并使用应用中 一些轻量级的功能.文中以必应词典作为实例讲解必应词典UWP版本是如何接入小娜语音功能的. ...

随机推荐

  1. java 与 iOS 平台概念比较

    java oc/swift jvm iphone jre runtime? jdk ios SDK spring xcode 生成的应用模版 服务器(tomcat) 系统的事件调度派发部分 class ...

  2. Web前端基础(16):jQuery基础(三)

    1. jQuery动画效果 jQuery提供的一组网页中常见的动画效果,这些动画是标准的.有规律的效果:同时还提供给我们了自定义动画的功能. 1.1 显示动画 方式一: $("div&quo ...

  3. 关于mybtis 使用过程中发生There is no getter for property named 'id' in class 'java.lang.String' 错误

    今天在修改一个关于mybtis语句时,偶然发现的一个错误  There is no getter for property named 'id' in class 'java.lang.String' ...

  4. 在vue组件中设置定时器和清除定时器

    由于项目中难免会碰到需要实时刷新,无论是获取短信码,还是在支付完成后轮询获取当前最新支付状态,这时就需要用到定时器.但是,定时器如果不及时合理地清除,会造成业务逻辑混乱甚至应用卡死的情况,这个时就需要 ...

  5. 微信小程序——表单验证插件WxValidate的二次封装(二)

    在上一篇博客<微信小程序——仿jqueryValidate表单验证插件WxValidate的二次封装>中,我将WxValidate做了再次封装,简化了初始规则数据的构造,但是当有错误时页面 ...

  6. Hadoop、storm和Spark Streaming简单介绍(非原创)

    文章大纲 一.Hadoop是什么二.storm是什么三.Spark Streaming是什么四.Spark与storm比较五.参考文章   一.Hadoop是什么 1. 简介 Hadoop是一个由Ap ...

  7. hexdump 工具使用 和 .txt 文件的二进制查看

    最近使用txt文件进行数据处理的时候,突然发现txt文件是怎样编码数据的了,它是以二进制来进行存储的吗?为了知道这个情况,我使用hexdump工具进行查看txt文件的二进制形式,并顺道进行学习了hex ...

  8. Linux—vi/vim命令详解

    如何在 vi 里搜索关键字 在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 "/" 然后输入你要查找的关键字敲回车就行了. 如果你要继续查找此关键字,敲字符 ...

  9. Sphinx 2.0.8 发布,全文搜索引擎 Installing Sphinx on Windows

    参考资料地址信息 http://sphinxsearch.com/docs/latest/installing-windows.html http://my.oschina.net/melonol/b ...

  10. WPF 后台获得 数据模板里的内容控件(DataTemplate)

    原文:WPF 后台获得 数据模板里的内容控件(DataTemplate) 假如      <Window.Resources> 里 有一个 Datatemplate 我想获得TextBlo ...