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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU コンディションコード

<<   作成日時 : 2009/07/09 06:27   >>

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

 ALUによる演算結果をどう判断するか。SPARCはCCR(コンディションコードレジスタ)を持ち、コンディションコードを格納する命令としない命令を持っている(例:ADDccとADD)。MIPSは2つのレジスタを比較した結果をレジスタに格納し、そのレジスタの値で判断する。
SPARCV9では浮動小数点のコンディションコードレジスタを4本持っている。浮動小数点演算のレイテンシは長いので、競合しないよう複数用意したと思われる。

 ここでは各レジスタごとにコンディションコードのフラグを持たせることにする。128ビット長もあるレジスタなら、実装するときに保護用のパリティビットなども付加するだろう。それを考えれば数ビット程度の増加は問題ない。
例:
 SUB Rs1,Rs2,R0 (R0に対応するコンディションコードのフラグも変化、ゼロレジスタなので演算結果は破棄される)
 BRZ addr (Rs1=Rs2なら分岐)

コンディションコードを見て分岐する分岐命令の一覧。これらのニーモニックはSPARCに倣った。
・BRZ Rc,addr (Rcのコンディションコードを見て0だったらaddrに分岐。PC相対)
・BNZ Rc,addr (〃 0以外の場合分岐)
・BLZ (0より小さければ分岐)
・BLEZ (0より小さいか、0なら分岐)
・BGZ (0より大きければ分岐)
・BGEZ (0より大きいか、0なら分岐)
・BN (常に非分岐)
・BA (常に分岐)

 ビットフィールド指定をした場合のコンディションコードはどう判断するか。演算結果はRdに格納するが、Rd[bh:bl]で範囲を指定した場合はその範囲内での条件とする。
例:
 ADD Rs1,Rs2,Rd[31:24] (8ビットの加算の結果からコンディションコードを設定する)

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(2件)

内 容 ニックネーム/日時
コンテキストスイッチなどの用事で、コンディションコードを込みでレジスタの値を保存したい場合、レジスタ1本あたり 130〜132bit (8byte+α) ストア (復帰の場合はロード)しないといけないのですよね。
m.ukai
2009/07/09 20:06
コメントありがとうございます。
その通りです。ただし高速に退避させるため、実装依存でローカルアクセスのみの内蔵メモリに退避させるという方法も考えています。
または浮動小数点の保存で例があるように、レジスタのグループごとにアクセスがあったかどうかを示すフラグにより保存の対象を決めることもできます。
コンディションコード群は1つか2つのレジスタでひとまとめにしてアクセス可能にしなければいけませんね。
いずれにせよ退避/復帰の速度が重要であり、メモリサイズは充分にあるということで考えています。
houmei
2009/07/10 00:12

コメントする help

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




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