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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU コンディションコードとライフフラグの統合

<<   作成日時 : 2011/01/20 22:32   >>

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

「ぼくのかんがえたさいきょうCPU」は各レジスタごとにコンディションコードフラグと、そのレジスタの値が有効かどうかを示すライフフラグを持つ。ライフフラグは当初単独で用意しようと思っていたが、従来の状態フラグに統合できそうなこと、飽和演算の結果も表したいのでまとめてみた。

・コンディションコードフラグ
Z,N,V,C - 4ビット

Z .. ゼロフラグ
N .. 負数
V .. オーバーフローまたは飽和
C .. キャリーまたはボロー
2の補数の場合、-0という状態はないのでZ=1,N=1というのはありえない。そこでZ,N,V,C="1111"という状態をライフなしとみなす。

通常の演算の結果
 符号付きの表現の範囲を越えた場合 V=1
 符合なし加算で桁あふれ(キャリー)が起きた場合 C=1
 符合なし減算で桁借り(ボロー)が起きた場合 C=1

符号なし飽和演算の結果 飽和演算なので 必ずC=0とする(貸し借りなし)
 符合なし0方向飽和 V=1,Z=1,N=0,C=0
 符合なし飽和 V=1,N=1,Z=0,C=0
符号付き飽和演算の結果
 符号付きマイナス方向飽和 V=1,N=1,Z=0,C=0
 符号付きプラス方向飽和 V=1,N=0,Z=0,C=0

その他 シフト命令など
 Z,N,V,C= "1111"にならないよう配慮して定義する。基本、Z,Nは値によって一意に決まる。(ゼロか最上位ビットが反映される)

ライフフラグが立っていない状態 Z,N,V,C="1111" →このレジスタの値は無効 ソースレジスタとして使用するとトラップ発生
その代わりにロード命令でも何でもレジスタに値を書きこむ命令はコンディションコードに結果を反映させ、ライフを与えなければならない。例えばロード命令ならZ,Nは値により設定、C=0,V=0といった具合に。
これで状態フラグを4ビットに抑えることができて都合が良い。SIMD演算の場合、各演算単位に状態フラグを持つかどうかは検討中だが、4ビット単位ならば256bit長レジスタで1バイト単位のSIMD演算をしたとして32×4=128ビットあればいい。レジスタ関連のリソースは1.5倍になる。
以上は汎用レジスタの話であり、浮動小数点レジスタについては別途検討する。(NaNみたいな状態もあるし)

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




ぼくのかんがえたさいきょうCPU コンディションコードとライフフラグの統合 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる