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

アクセスカウンタ

zoom RSS 条件判断の方法

<<   作成日時 : 2012/01/26 16:50   >>

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

 計算機では計算結果の妥当性や比較結果による処理の切り換えも重要。ほとんどのプロセッサはCCR(Condition Code Register)を使用する。

 ※扱う数値は2の補数が前提ですよ

 CCRには演算結果の状態が保存される。Z(ゼロ)、N(負)、V(オーバーフロー)、C(キャリー/ボロー)がほぼ共通する。2つのレジスタの値を比較するには減算命令を使用し、CCRで大小を比較する。CCRのみ反映し減算結果を捨てるCMP命令を持つものもある。RISC系では演算結果の保存先にゼロレジスタを指定して捨てる。CCRを見て条件を判断し分岐する命令が、条件ごとに複数必要になる。
 SPARCの場合はCCRに演算結果を反映する命令(ADDcc等)とそうでない命令を持ち、特に必要がない場合はCCRをいじらない。CCRを持つプロセッサでアウトオブオーダー実行する場合など、依存関係による待ち合わせ発生の解消にはリネーミングレジスタと同様の手法でCCRをリネーミングする。

 CCRを持たないプロセッサもある。MIPS、Alphaはある条件で比較した結果を0または1で汎用レジスタに保存する。比較命令は条件によって複数存在するが、分岐命令は1つで済む。汎用レジスタに比較結果を保存するため、CCRを中心とした依存関係を避けることができる。
 SHシリーズは比較結果を保存するTフラグというのを持つ。これにより汎用レジスタを使用することなく比較することができる。(SHの汎用レジスタは15本)

 値の比較には以下が使われる。算術比較については CMP Ra,Rbの場合とCMP Rb,Raのように入れ替えた場合を併記。
・符号なし:大なりまたは等しい(C==0)/not 小なり(C==1)
・符号なし:大なり(C==0 && Z==0)/not 小なりまたは等しい(C==1 || Z==1)
・符号付き:大なりまたは等しい(N==V)/not 小なり(N!=V)
・符号付き:大なり(Z==0 && N==V)/not 小なりまたは等しい(Z==1 || N!=V)
・等しい(Z==1)/異なる(Z==0)
・負(N==1)/非負(N==0)
・オーバーフロー発生(V==1)/オーバーフロー発生なし(V==0)

※これによると条件の種類は3bitで収まりますね。


 ARMはほとんどの命令が条件付きで実行できる。ただし命令フェッチ→デコード後に比較されるのでパイプラインは空いてしまう。
 SPARCは分岐命令の直後の命令を実行してから分岐するが、annul bitによる指定で分岐不成立の時にスキップできる。ただし条件なしの分岐命令ではannul=0で後続命令実行、annul=1で後続命令スキップと挙動が異なるので注意。MIPSも似た命令を持つ。

 なんてことを整理してたら、昔まとめてた。オウ……
各種プロセッサ 整数演算の条件付き分岐命令について

参考文献:
JPS1-R1.0.4-Common-pub.pdf

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(1件)

タイトル (本文) ブログ名/日時
ぼくのかんがえたさいきょうCPU BOOLEAN命令
 前回まとめた条件判断の方式で最強なのはIA-64のプレディケイトレジスタ。条件判断の結果を0/1で保存する。 ...続きを見る
竹下世界塔の計算機よもやま話
2012/01/28 23:58

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




条件判断の方法 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる