自作CPUに実装予定の浮動小数点命令
#自作CPU #RISC-V
from マルチサイクル RISC-V CPU を作成したい
RISC-V へ移植した MinCaml が利用していた命令が以下の11命令。
これらを実装すればレイトレが動くはず。
flw
fsw
fadd.s
fsub.s
fmul.s
fdiv.s
feq.s
flt.s
fle.s
fcvt.s.w (float->int)
fcvt.w.s(int->float)
fsgnj.s (Floating-point Sign Inject, Single-Precision)
f[rd] = {f{rs2][31], f[rs1][30:0]}
fsgnjn.s (Floating-point Sign Inject-Negate, Single-Precision)
f[rd] = {~f[rs2][31], f[rs1][30:0]}
fmv.w.x (Floating-point move Word from Integer)
f[rd] = x[rs1]
fmv.x.w (Floating-point Move Word to Integer)
x[rd] = f[rs1]
命令表
https://gyazo.com/b37c4f124e6dacd8dea842924d1f535e
浮動小数点レジスタ
https://gyazo.com/3a3611cd2925f9986603e1b942253fbe
メモ
code:ruby
$ echo "0_01111111_00000000000000000000000" | ruby -e "puts ARGF.read.gsub('_','').pack('B*').unpack('g')"
1.0
$ echo "0_10000000_00000000000000000000000" | ruby -e "puts ARGF.read.gsub('_','').pack('B*').unpack('g')"
2.0
$ echo "0_10000001_00000000000000000000000" | ruby -e "puts ARGF.read.gsub('_','').pack('B*').unpack('g')"
4.0
$ echo "0_10000010_00000000000000000000000" | ruby -e "puts ARGF.read.gsub('_','').pack('B*').unpack('g')"
8.0