2021:BKSC オペランド、その他の命令

 オペランドはオペコードに続くレジスタ番号や即値を指定するフィールドで、1バイト単位、MSBは1で始まる。

1_1_xxxxxx レジスタ指定など このバイト単独
1_0_xxxxxx 即値指定 これは連続することで長い即値を表現する。表現したい即値のLSB側から5bitづつ詰めていく。2の補数表現。
基本、レジスタ指定などは複数並べても個別の設定項目で、即値指定はオペランドの最後になる。

レジスタ指定から汎用レジスタの本数は64本。

分岐命令のオペランドは以下のとおり。
(なし) 次命令スキップ
[1_0_xxxxx]+ 相対分岐 即値を2の補数として扱い現PCからの相対アドレスを示す
1_1_xxxxxx レジスタ値分岐 レジスタ値はスカラーで、アドレスとして解釈される。
1_1_00000 [1_0_xxxxx]+ 絶対番地分岐
1_1_00000 1_1_xxxxxx トラップ トラップ番号は0~63
※絶対番地分岐とトラップの指定のため、汎用レジスタ0はレジスタ値分岐としては使えない。

論理演算命令、算術演算命令、ビット演算命令のオペランドは以下のとおり。
(なし) 直前の値%Pを使う単項演算命令
[1_0_xxxxx]+ %Pと即値の二項演算
1_1_xxxxxx %Pと%Rbの二項演算
1_1_xxxxxx 1_1_xxxxxx %Raと%Rbの二項演算
1_1_xxxxxx [1_0_xxxxx]+ %Raと即値の二項演算
算術演算命令とビット演算命令は3入力の演算が可能。汎用レジスタ0は%Raとしては使えない。
1_1_xxxxxx 1_1_xxxxxx 1_1_xxxxxx %Ra,%Rb,%Rc
1_1_000000 1_1_xxxxxx 1_1_xxxxxx %P,%Rb,%Rc
1_1_xxxxxx 1_1_xxxxxx [1_0_xxxxx]+ %Ra,%Rb,即値
1_1_000000 1_1_xxxxxx [1_0_xxxxx]+ %P,%Rb,即値

ロードストア命令のアドレッシングモード指定は以下のとおり。別空間の指示6bitあり。
1_1_xxxxxx [%Ra]
[1_0_xxxxx]+ [imm]
1_1_xxxxxx 1_1_xxxxxx [%Ra+%Rb]
1_1_xxxxxx [1_0_xxxxx]+ [%Ra+imm]
1_1_xxxxxx 1_1_xxxxxx 1_1_xxxxxx [%Ra+%Rb],#a
1_1_xxxxxx 1_1_xxxxxx [1_0_xxxxx]+ [%Ra+imm],#a

その他の命令のオペランドは個別に指定。

 その他、とは言ってもレジスタ宣言など重要な命令。ここから以降は種類別にまとめるのは難しく、それぞれの命令が独自の機能を持つ。
汎用レジスタは使用前にサイズとSIMD演算のための区切りの指定を行う。数値の型は扱わない。算術演算命令で指定する。汎用レジスタの使用後は無効にして開放する。

0_101_0000
AUX AUX出力の取り出し(剰余など)
WR %Rn 指定した汎用レジスタに書き込む
NEW %Rn,# 汎用レジスタの使用宣言 サイズ、レーン指定、入力値の設定の有無など

0_101_0001
JOIN AUX出力との連結(使うのは整数乗算のみなので不要?)
ZAP %Rn 指定した汎用レジスタを無効にする

汎用レジスタのサイズを変化させるリサイズもあったほうがいい。


ブログ気持玉

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

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

→ログインへ

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

気持玉数 : 0

この記事へのコメント