ぼくのかんがえたさいきょうCPU ISA整理

 ぼくのかんがえたさいきょうCPU Rd指定はいらないのでは検討でしばらく考えた結果、うまく入りそうだったので整理した。

 すべての命令は直前の命令の実行結果%Pd、予備結果%Pe、フラグ%Pfとオペランドで指定したレジスタを入力とし、演算結果を%Rd、%Re、%Rfとして次の命令に渡す。汎用レジスタに保存するときは専用のWR命令を使う。

wr %Ra → %Pdの内容を汎用レジスタ%Raに書き込む。

 また、浮動小数点の丸めはwr命令で行い、通常命令で渡される浮動小数点は丸めをしていない内部表現。よってFMA(Fused Multiply add)はそのまま命令列によって表される。内部実装でFMA演算器を持っていれば命令列を解釈して適用してもよいし、持ってなくても演算結果は同じになる。

 ロード/ストア命令に関しては汎用レジスタとメモリ間でやりとりする都合上、命令フォーマットに汎用レジスタの指定を含めるフォーマットも用意した。


基本フォーマット:


命令列 Stream ::= { CO | CO OP }+

オペコード CO ::= { CO1 | CO2 }

1バイト命令 CO1 ::= { D1 | J1 | A1 | S1 | L1 | M1 | N1 | R1 }

D1 ::= 00_dddddd
J1 ::= 0100_cond
L1 ::= 0101_lgic
A1 ::= 0110_0alu
S1 ::= 0110_1sft
M1 ::= 01110_www
N1 ::= 01111_000
R1 ::= 01111_001

2バイト命令 CO2 ::= { M2 | S2 | B2 | V2 | R2 }

M2 ::= 01111_01S 1Awwwwww
S2 ::= 01111_100 1xxxxxxx
B2 ::= 01111_101 1xxxxxxx
V2 ::= 01111_110 1xxxxxxx
R2 ::= 01111_111 1xxxxxxx

オペランド OP ::= { C | [M] R [C] }
即値 C ::= { 11_cccccc }+
修飾子 M ::= { 11_cccccc }+
レジスタ R ::= { 10_rrrrrr }+


D1: wr命令 %Pdを指定した汎用レジスタに保存
N1: new命令 レジスタのサイズ/型/レーン数を指定
  zap命令 レジスタの属性を破棄



 現在、wikiを使って命令をこねくり回している最中です。年内にまとめて発表予定。



とぐろ へび 2
Posted with Amakuri at 2018.10.24
アイコ

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック