竹下世界塔の計算機よもやま話

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU アドレッシングモード

<<   作成日時 : 2012/01/02 19:19   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

 これまで考えていたもやもやを整理してみた。

前回:
ぼくのかんがえたさいきょうCPU ロードストア専用レジスタの検討
ぼくのかんがえたさいきょうCPU ロード/ストア命令再考

・演算ユニットとロードストアユニットは独立して動作することを想定している。
・メモリ参照に使うアドレスレジスタ(AR)とデータ加工を行うデータレジスタ(DR)を使用する。
・間接アドレッシングは採用しない。
・PC相対、即値、スタック実現のためのインクリメント/デクリメントを入れたい。
・なるべく対称的な構造にしたい。単機能の命令を追加せず、アドレッシングモードで解決できるものはそうしたい。


3オペランド形式で以下のフォーマットを基本とする。

LD [Rs1+Rs2],Rd Rs1+Rs2で示される番地の内容をRdにロード
ST [Rs1+Rs2],Rs Rs1+Rs2で示される番地にRsの内容をストア

Rs1とRs2は符号付き加算。即値指定の時は即値フィールドの最上位ビットを符号ビットとみなす。

(1)第一オペランドはAR/DR/PC/0、第二オペランドはAR。(2bit)
(2)第二オペランドにはARの他に即値、AR++,--ARが指定できる。(2bit)
(3)第三オペランドにはAR/DRが指定できる。(1bit)

 LEA命令はLoad Effective Addressのことで、アドレス計算した番地そのものをレジスタに設定する。これによりロードストアユニットを演算器のようにも扱える。
 アドレッシングモードにDRは使えるが、論理演算ユニット内に存在するレジスタなのでペナルティが発生することを意識しておく。ただしOoOなら隠蔽されるだろう。
 即値はデータ幅に関連して左シフトした値になる。つまり、アライメントをまたぐ指定はできない。1バイト=×1、2バイト=×2、4バイト=×4、8バイト=×8、16バイト=×16、32バイト=×32。PC相対+immの場合は命令長が4バイトなので8バイト以上でアライメントエラーが発生する可能性がある。4バイトより上はアライメントエラーなしにするか?


(1)を実装すれば以下が実現できる。
・アドレスレジスタからデータレジスタへの転送
 LEA [DR0+ARs2],DRd
・データレジスタからアドレスレジスタへの転送
 LEA [DRs1+AR0],ARd

(1),(3)を実装すれば以下が実現できる。
・AR,DRへの即値の設定
 LEA [0+imm],ARd
 LEA [0+imm],DRd

ソフトウェアによるプリフェッチも可能
 LD [TargetAddress],AR0

以下、命令のバリエーション:

LD [DRn+ARm],DRn 普通のロード(DR+AR)
LD [DRn+imm],DRn 即値による指定(DR+imm)
LD [ARn+imm],DRn 即値による指定(AR+imm)
ST [AR1+AR2]++,DRn スタックにプッシュ
LD --[AR1+AR2],DRn スタックからポップ
LD [PC+ARn],DRn PC相対

 (1)〜(3)を命令フォーマットに押し込めるためには5bit必要だが、(1) AR/DR/PC/0を DR/PC または AR/DRにすれば1bitにできる。前者はPC相対を残す場合。後者はAR/DRを選択可能にする場合。AR0=ゼロレジスタ、AR1=PCといったアサインも可能だが保留。また、(2)でAR++/--ARを除けば1bitにできる。
 ポストインクリメント/プリデクリメントはスタックの実装に便利。また、ロードストアユニット内で完結するので実装も容易。増分はデータ幅のバイト数と同じ。
 ARの本数を制限すれば、第二オペランドの一部を(1)〜(3)の指定に流用できる。第一、第三オペランドはDRを指定する場合があるので流用はできない。

 副次的だが整数レジスタ→浮動小数点レジスタへの転送が可能。
LEA [DRn+imm0],FRn

□ASIレジスタ指定 2bii
 ASI空間はSPARCアーキに存在するものだが、ロードストア関連の命令で診断アクセスなどに使える便利な指定方法。

□ロードストアサイズは1バイト〜32バイトを指定する。(3bit)
"000" I .. 4バイト from I$(ロード命令のみ可)
"001" 未定義
"010" B .. 1バイト(8bit)
"011" W .. 2バイト(16bit)
"100" S .. 4バイト(32bit)
"101" D .. 8バイト(64bit)
"110" Q .. 16バイト(128bit)
"111" O .. 32バイト(256bit)

□ロードストア命令は以下のとおり。(3bit)
"000" LD ロード
"001" ST ストア
"010" LL Load Linked
"011" SC Store Conditional
"100" LEA Load Effective Address
"101" --- (ST系未定義)
"110" LDC キャッシュバイパスロード
"111" STC キャッシュバイパスストア

 キャッシュバイパスアクセスは、大量の浮動小数点演算などオンキャッシュになるとかえって性能を落とすことになるデータ転送について使用する。なおメモリコンシステンシとは関係ない。(キャッシュをバイパスするからといってStrong Orderingということではない)

□その他 floatingレジスタ指示 1bit


これらをまとめると

フォーマット:
01 f s www nnn aa pp Rxxxxx Rbbbbb Rddddd

[31:30] = "01" ロード/ストア命令
[29] f .. 浮動小数点ロード/ストア
[28] s .. 第三オペランド 0=AR,1=DR
[27:25] www .. ロード/ストアサイズ
[24:22] nnn .. 命令
[21:20] aa .. ASIレジスタ#0〜#3
[19:18] pp .. アドレッシングモード AR/即値/AR++/--AR
[17:12] Rx .. 上位2bit=0/PC/AR/DR 下位4bit インデックスレジスタまたは4bitの符号付き即値
[11:6] Rb .. ベースレジスタ
[5:0] Rd .. ロード系命令の時はソースレジスタ、ストア系命令の時はデスティネーションレジスタ。

これでいちおうDRやARでゼロレジスタを用意しなくても収めることはできたが、はみ出したら導入する。
即値がたった4bitしか指定できない(-8〜+7)が、プレフィックス命令で拡張できる。ちょっときついか?
また、ARはAR0〜AR15となる。これでも充分とは思えるが、プレフィックスで指定を拡張することも可能。

とりあえずここまでにしておこう。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




ぼくのかんがえたさいきょうCPU アドレッシングモード 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる