自作CPUにベクトル実行エンジンを追加する試行をしている。
とりあえず一番簡単なベクトル命令としてvmv.v.x
で、汎用レジスタからデータを読み取ってベクトルレジスタに書き込む命令を動かすようにしてみる。
main: li a5,0 li a1,100 li a2,99 .L2: subw a4,a1,a5 vsetvli a4,a4,e64,m1,ta,mu vmv.v.x v24,a5 addw a5,a4,a5 ble a5,a2,.L2
とりあえずデータパスはおいておいて、ベクトル演算のユニットで命令が動作するように持って行った。 一応検証パタンでは、ログとしてうまく動いているように見える。 あとは、データパスをうまく作りこんでいこう。
4668 : 232 : PC=[000000008000200e] (M,21,01) 05877757 vsetvli a4, a4, e64, m1, ta, mu GPR[14](130) <= 0000000000000002 4674 : 233 : PC=[0000000080002012] (M,22,01) 5e07cc57 vmv.v.x v24, a5 4674 : 234 : PC=[0000000080002016] (M,22,02) 00009fb9 c.addw a5, a4 GPR[15](14) <= 0000000000000002 4674 : 235 : PC=[0000000080002018] (M,22,04) fef659e3 bge a2, a5, pc - 14 4684 : 236 : PC=[000000008000200a] (M,32,01) 40f5873b subw a4, a1, a5 GPR[14](131) <= 0000000000000062 4687 : 237 : PC=[000000008000200e] (M,33,01) 05877757 vsetvli a4, a4, e64, m1, ta, mu GPR[14](17) <= 0000000000000002 4691 : 238 : PC=[0000000080002012] (M,34,01) 5e07cc57 vmv.v.x v24, a5 4691 : 239 : PC=[0000000080002016] (M,34,02) 00009fb9 c.addw a5, a4 GPR[15](46) <= 0000000000000004 4691 : 240 : PC=[0000000080002018] (M,34,04) fef659e3 bge a2, a5, pc - 14 4697 : 241 : PC=[000000008000200a] (M,35,01) 40f5873b subw a4, a1, a5 GPR[14](21) <= 0000000000000060 4701 : 242 : PC=[000000008000200e] (M,36,01) 05877757 vsetvli a4, a4, e64, m1, ta, mu GPR[14](25) <= 0000000000000002