RV32FDQ/RV64RDQ指令集(2)

下面咱們逐個看下每一個指令的細節:ide

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


示例:ip

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


示例:get

to doit


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


示例:class

to dosed


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等,下表是一些浮點轉化整數時候的一些特殊狀況。

image

示例:

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]中有且僅有一位被置上,見下表

image

示例:

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

相關文章
相關標籤/搜索