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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU 分岐エントリポイントの指定

<<   作成日時 : 2012/01/05 05:34   >>

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

 なぜプロセッサの分岐命令はどこにでも飛んでいけるのか。

 マイクロプロセッサの命令セットアーキテクチャで飛び先を制限しているものはない。保護されたページの領域内かどうかをトラップで監視している程度。このあたりは高級言語とセマンティックギャップが開きすぎてないだろうか。

 というわけで決められた場所にしか飛べないエントリポイントというのを考えてみる。エントリポイントに1命令を割り当てるのはもったいないので、エントリビットというのを用意する。このビットが立っている命令にしか分岐命令は飛ぶことができない。もし分岐先にエントリビットが立っていないとトラップが発生する。

 ALU命令内の1bitとプリフィックス命令内の1bitをエントリビットと定義する。単独の分岐命令とLDST命令には用意しない。これは分岐してさらに分岐する命令は基本的に無駄なこと、LDST命令は命令デコードが苦しいこと、必要ならプリフィックス命令と組み合わせればいいだろうという考え。ALU命令は例えばループの先頭になることが多いので単独でも設定できるようにと考えた。
 プリフィックス命令に続くALU命令は、ALU命令のエントリbitを落としておく。こうすればプリフィックスをスキップして途中のALU命令に飛び込むことはできない。

 さて、どのような効果が期待できるだろうか。
従来のプロセッサと比較して命令実行がより安全になる。完全ではないが、悪意のある書き換えには強くなるだろう。

 と考えてみたが、せいぜいBASIC言語における GOTO 行番号 を GOTO ラベル にできた程度か。しかし命令フォーマットに1bit追加するだけの簡単な方法なので実装コストは低い。トリッキーなコードは書けなくなるだろうが、もはやそんなことをしなくても性能は出るし(むしろ低下する要因)、いやならトラップを抑止するだけなので特に問題はない。その他の利点はそのうち思いつくだろう。


追記:思いついた。分岐予測の分岐先を取得するのに都合がいい。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(3件)

タイトル (本文) ブログ名/日時
プログラムカウンタはなくせるか?
 条件コードレジスタ(CCR)は重要だがMIPS/Alphaでは汎用レジスタで、スタックポインタも汎用レジスタで扱うことができる。では命令の実行位置を示すプログラムカウンタ(PC)はどうか? ...続きを見る
竹下世界塔の計算機よもやま話
2012/06/20 06:11
ポストフィックス命令
 既存の命令を拡張するのにプリフィックス命令を考えたが、後ろにくっつけるポストフィックス命令を検討してみた。 ...続きを見る
竹下世界塔の計算機よもやま話
2012/08/22 01:05
エントリポイントを考慮した命令フォーマット、プリフィックス廃止
 命令長は16bit単位の可変長で、分岐命令から参照されることを明示するエントリポイントを追加するにはどうしたらよいか。プリフィックスによる修飾だと定数のbit幅などが減り、プリフィックスなしの命令にもエントリポイントの1bitが必要となり効率が悪い。そこで本命令+ポストフィックス命令の形式に変更し、本命令のみエントリポイントを示すビットを追加することにした。  変わってくるのは命令の後ろに修飾が付くので次の命令がデコードされるまで前命令が発行できないということ。だがパイプライン実行前提... ...続きを見る
竹下世界塔の計算機よもやま話
2013/12/31 06:27

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




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