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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU: 2017.05 分岐条件

<<   作成日時 : 2017/05/30 20:35   >>

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

 ほとんどのプロセッサは4bitの16パターンで分岐の条件を決めている。2の補数を用いた符号ありの整数演算と符号なしの整数演算の条件は以下のフラグを使う。

Z ... 演算結果がゼロ
N ... 演算結果がマイナス (最上位ビットが1)
V ... 演算結果が2の補数の範囲外 オーバーフロー
C ... 演算結果が符号なしの加算でキャリー発生/符号なし減算の場合はボロー発生

Z,Nは演算後のビット列を見るだけで求めることができる。これらを使用するとRa-Rbを実行した後のフラグから大小関係を判定することができる。

・一致/不一致(符号付き、符号なし共通)
 Z Equal (Ra==Rb)
 !Z Not Equal (Ra!=Rb)
・大小(符号付き)
 N xor V Less than (Ra<Rb)
 !(N xor V) Greater or Equal (Ra>=Rb)
 Z|(N xor V) Less or Equal (Ra<=Rb)
 !(Z|(N xor V)) Greater than (Ra>Rb)
・大小(符号なし)
 C|Z Less or Equal Unsigned
 !(C|Z) Greater Unsigned
 C Less than Unsigned
 !C Greater or Equal Unsigned
・符号/オーバーフロー(その他フラグ単体の診断)
N Negative
!N Positive
V Overflow
!V Not Overflow

以上で14パターン。残り2パターンは最下位ビットを判断し奇数/偶数を判断できるように拡張したものや、常に真/常に偽とするものがある。後者を採用する。

 V,Cは加減算以外の時には別の意味を割り当てることがある。

浮動小数点比較の場合
演算結果の符号ビットと残りのビットが非0かどうかで判断する。片方がNaNなど比較不能な場合はUnorederedとなる。内部で使うフラグは以下の通り。
L Less
G Greater
E Equal
U Unordered
SPARCではUnorederdを含めた大小関係14パターンで条件を判断する。AlphaはUnorderedを無視する。

E Floating Equal
L|G Floating Not Equal
E|G Floating Greater or Equal
G Floating Greater than
E|L Floating Less or Equal
L Floating Less than
U Floating Unordered

算術演算時にエラーが発生したら、その種類をFCR(Floating Control Register)に保存し、エラーフラグを立てることで検出できるようにする。算術演算では浮動小数点形式を整数に、またはその逆も同時に行うことがあるので、変換時に発生したオーバーフローもエラーとして検出する。

 以上で使ったフラグZ,N,V,C,E,L,G,Uは直接参照することはできない。これら以外のフラグを後続の命令に渡して条件分岐命令に判断させても問題ない。つまり、後続の条件分岐命令に対してこれらのフラグは整数演算のもの、または浮動小数点演算のものと指示するフラグを追加すれば条件分岐命令はその条件判断のセットを切り替えることができる。


これらを整理すると条件は以下のとおり。

整数演算
0000 BN Branch Never
0001 BA Branch Always
0010 BE Branch Equal
0011 BNE Branch Not Equal
0100 BNEG Branch Negative
0101 BPOS Branch Positive
0110 BVS Branch if Overflow Set
0111 BVC Branch if Overflow Clear
1000 BCS Branch if Carry Set / BLU Less than Unsigned
1001 BCC Branch if Carry Clear / BGEU Greater or Equal Unsigned
1010 BLEU Branch Less or Equal Unsigned
1011 BGU Branch Greater than Unsigned
1100 BL Branch Less than
1101 BGE Branch Greater or Equal
1110 BLE Branch Less or Equal
1111 BG Branch Greater than

論理演算
0000 BN Branch Never
0001 BA Branch Always
0010 BZS Branch All 0
0011 BZC Branch Not All 0
0100 BNS Branch Negative (MSB=1)
0101 BNC Branch Positive (MSB=0)
0110 BVS Branch Odd (LSB=1)
0111 BVC Branch Even (LSB=0)
1000 BCS Branch if Carry Set (All 1)
1001 BCC Branch if Carry Clear (Not ALl 1)
1010 無保証
1011 無保証
1100 無保証
1101 無保証
1110 無保証
1111 無保証

浮動小数点演算
0000 BN Branch Never
0001 BA Branch Always
0010 FBEQ Floating Branch Equal
0011 FBNE Floating Branch Not Equal
0100 FNEG Floating Branch Negative
0101 FPOS Floating Branch Positive
0110 FBU Floating Branch Unoredered
0111 FBO Floating Branch Ordered
1000 FBERR Floating Branch if Error Occured
1001 無保証
1010 無保証
1011 無保証
1100 FBL Floating Branch Less than
1101 FBGE Floating Branch Greater or Equal
1110 FBLE Floating Branch Less or Equal
1111 FBG Floating Branch Greater than

上記の表で無保証としたものは判定後の動作について保証しない。


ゴールデン☆ベストゴールデン☆ベスト
萩原健一

徳間ジャパンコミュニケーションズ 2004-12-21
売り上げランキング : 3091

Amazonで詳しく見る
by G-Tools

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(1件)

タイトル (本文) ブログ名/日時
ぼくのかんがえたさいきょうCPU: 2017.05 概要と基本フォーマット
 ぼくのかんがえたさいきょうCPUも考え続けていつのまにか十年くらい経ってしまった。いろいろな命令セットアーキテクチャを調べるほどにいじくりまわしたくなるのだが、そろそろまとめてみようかとおもう。 ...続きを見る
竹下世界塔の計算機よもやま話
2017/05/31 20:11

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




ぼくのかんがえたさいきょうCPU: 2017.05 分岐条件 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる