ぼくのかんがえたさいきょうCPU 即値設定命令

・即値設定命令
あるプロプライエタリな32bitRISC(過去の16bitCISC互換モードを持つ)は、1命令が4バイトの固定長だったが、
即値ロードのみ2命令分8バイトで、後半4バイト(32bit)の値をそのままレジスタに格納していた。ずるい。

SPARC V8(32bit)だとsethi命令+or即値命令の2命令で実現。
SPARC V9(64bit)だとワーク用のレジスタを使用して以下の6命令が必要だった。
・imm_hは64bit即値の上位32bit、imm_lは64bit即値の下位32bit

sethi %hi(imm_h),%l0
or %l0,%lo(imm_h),%l0
sllx %l0,32,%l0
sethi %hi(imm_l),%l1
or %l1,%lo(imm_l),%l1
or %l0,%l1,%l0

滅多に使わないとはいえこれは大変だ。

ではぼくのかんがえたさいきょうCPUではどうするか?
LEA命令を使えば、ロードストアユニットのアドレス計算用加算機を算術演算用のALUとは別に同時利用できる。(実装による)
lea [imm],GRd =即値ロードにそのまま使える
これをやるにはPOWERと同じようにアドレッシングモードのベースレジスタにGR0を指定した時ゼロとみなさなければならない。正確には
lea [GR0+imm],GRd
となる。プリフックス命令のロング即値と組み合わせれば32bitは一発で設定可能だ。そして即値設定の命令は特に用意しなくてもよくなる。
ぼくのかんがえたさいきょうCPU プリフィックス命令を考える

ということで、
・アドレッシングモードの [Base+indeX] のBaseレジスタがGR0の場合、Base=0とみなす
ことにする。

ブログ気持玉

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

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

→ログインへ

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

気持玉数 : 0

この記事へのコメント

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