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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU ステータスレジスタとロード・ストア命令

<<   作成日時 : 2009/09/04 17:23   >>

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

ステータス・レジスタ
 ステータスレジスタは64本まで定義できる。ビット幅は32ビット。汎用レジスタとの相互転送命令を用意しなければならない。
リードオンリー、特権モード時のみアクセス可などの制限がそれぞれあるので、具体的な番号の割り付けはデコードしやすいよう後で行う。
特権モードのみアクセス可のレジスタは、ビット幅は32ビット以上でも可。ユーザーモードではpswで指定された情報に従う。特権モードではプロセッサの実装によりどのビット幅でも実行可能だが、現実的には各ビット幅ごとの管理プログラムを作るのは大変。
コンテキスト切り換えで保存しなければならないレジスタもある。これもやりやすいよう後でまとめる。

・SR.cpuid 自CPU ID
[31:24] ボード番号 .. システム全体でのボードの番号。0〜
[23:16] チップ番号 .. ボード上に搭載されたチップの番号。0〜
[15:8] コア番号 .. チップ内のコアの番号。0〜
[7:0] スレッド番号 .. マルチスレッドサポート時のスレッド番号。0〜 マルチスレッドをサポートしない場合は0固定。
上記の境界は8ビットにしたが、CPUのバージョンによって変える事ができる。それぞれの論理CPUから見てユニークな番号になればよい。

・SR.psw
[1:0] 現在の汎用レジスタのビット幅 00..32bit 01..64bit 10..128bit 11..256bit
[3:2] 現在の汎用レジスタの本数 00..64本 01..128本 10..256本 11..512本
[5:4] 現在の浮動小数点レジスタのビット幅 00..32bit 01..64bit 10..128bit 11..256bit
[7:6] 現在の浮動小数点レジスタの本数 00..64本 01..128本 10..256本 11..512本
[9:8] 実装している汎用レジスタのビット幅 00..32bit 01..64bit 10..128bit 11..256bit
[11:10] 実装している汎用レジスタの本数 00..64本 01..128本 10..256本 11..512本
[13:12] 実装している浮動小数点レジスタのビット幅 00..32bit 01..64bit 10..128bit 11..256bit
[15:14] 実装している浮動小数点レジスタの本数 00..64本 01..128本 10..256本 11..512本
 その他、割り込みマスク、特権モード/ユーザモードの状態、割り込み代替レジスタの状態など。割り込み関係は別SRにしてもよい。

・SR.fpr 丸めモードなどの設定
 浮動小数点の実装 00..実装していない 01..単精度を実装している 10..倍精度、単精度を実装している (11..四倍精度)
 浮動小数点演算回路のバージョン(超越関数をサポートしている、等)

・SR.tick
[31:0] CPUのクロックに対応してインクリメントするレジスタ。ラップアラウンドする。

・SR.stick
[31:0] 外付けの32768Hzクロックに対応してインクリメントするレジスタ。ラップアラウンドする。ウォッチドッグタイマで使用。
 → SPARC64ではSTICKをシステムクロックを元に生成していたが、別の計算機でこのクロックが同一とは限らない。ウォッチドッグタイマ設定は時間で行うため、クロックを固定にした。

・SR.wdt ウォッチドッグタイマの設定。設定した値(桁数)をSR.stickの周期で減算し、ゼロになるとWDT例外発生。パイプライン等が動いていると初期設定値に戻る。

・SR.rand
[31:0] 乱数レジスタ リード/ライトで更新。ハードウェアで実装していない場合は未実装命令でトラップ、疑似乱数を生成して返す。疑似乱数の場合、ライト値がシード値になる。

ー以下は特権モードのみアクセス可ー
・SR.vba
[31:0] 割り込みベクタのポインタ このビット幅だと4GB以内になってしまうので拡張可能にしておくか。
・SR.pte
[31:0] ページテーブルのポインタ このビット幅だと4GB以内になってしまうので拡張可能にしておくか。
SR.asi
[31:0] ASI空間の指定 ASI空間はSPARC V9とは異なり特権モードのみのアクセスにする。診断アクセスが中心。

―――――――――――――――――――

ロード/ストア命令

・ロード命令で各レジスタに付いているコンディションコードは変化させるべきか?
 →汎用レジスタではN(負),Z(ゼロ)のみ変化。汎用レジスタにロード値を保存する時と同時にセットできる。
 →浮動小数点レジスタについては、演算するまではわからない。(わかるのはゼロくらいか?)Unknownにする。

0xxfslwwppLLLLRxxxxxRbbbbbRddddd

[31] ..0 プレフィックス命令でない
[30:29] xx .. 2ビット 演算/LDST/分岐/その他(まだ決めていない)
[28:26] fsl .. 浮動小数点(FLD/FST) / ロード/ストア / 汎用レジスタロードの符号拡張あり/なし / 特殊命令(セマフォ、LEA,サブルーチンコール)
浮動小数点ロード
浮動小数点ストア
// 汎用ロード符号拡張なし
汎用ロード符号拡張
汎用ストア
汎用ロードASI
汎用ストアASI - ASIはSRレジで指定できないか?

バイト入れ換え不要な命令は LLLL がデコードに使える
LEA
TAS ストアの仲間?
PREFETCH
BLR
BLRI 割り込みからの復帰

[25:24] ww .. ビット幅 00..S 01..D 10..Q 11..O
[23:22] pp .. 00..GRx指定 01..即値指定 10..ポストインクリメント 11..プリデクリメント
[21:18] LLLL .. バイト入れ換え/ASI番号レジスタ
[18:12] 符号付き即値7ビット "00" ゲタはかせ
[17:12] GRx インデックス
[11:6] GRb ベース
[5:0] Rd ロード/ストアするレジスタ

・ロード命令 符号拡張がある。コンディションコードは変化する。
LDS 4バイト(32ビット)ロード 符号拡張
LDD 8バイト(64ビット)ロード 符号拡張
LDQ 16バイト(128ビット)ロード 符号拡張
LDO 32バイト(256ビット)ロード 符号拡張
// LDSU 4バイト(32ビット)ロード 符号拡張なし
// LDDU 8バイト(64ビット)ロード 符号拡張なし
// LDQU 16バイト(128ビット)ロード 符号拡張なし
// (LDOU) - なし
FLDS 単精度(32ビット)ロード
FLDD 倍精度 or 単精度×2(64ビット)ロード
FLDQ 倍精度×2 or 単精度×4(128ビット)ロード
FLDO 倍精度×4 or 単精度×8(256ビット)ロード

・ストア命令 レジスタのビット数が多い場合はLSB側から数えたビット数の幅でストアする。
STS 4バイト(32ビット)ストア
STD 8バイト(64ビット)ストア
STQ 16バイト(128ビット)ストア
STO 32バイト(256ビット)ストア

FSTS 単精度(32ビット)ストア
FSTD 倍精度 or 単精度×2(64ビット)ストア
FSTQ 倍精度×2 or 単精度×4(128ビット)ストア
FSTO 倍精度×4 or 単精度×8(256ビット)ストア

→ロード・ストア命令はまだはっきりとは決まっていない。他の命令フォーマットもそうだけど、特に。命令を押し込める余裕があまりない。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(1件)

タイトル (本文) ブログ名/日時
ぼくのかんがえたさいきょうCPU ステータスレジスタ
 以前のエントリステータスレジスタとロード・ストア命令で少しだけ触れたが、ステータスレジスタについてもう少し詳細を検討する。 ...続きを見る
竹下世界塔の計算機よもやま話
2009/12/02 14:37

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
URL(任意)
本 文




ぼくのかんがえたさいきょうCPU ステータスレジスタとロード・ストア命令 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる