24531904_j

24531904_j 24531904_j

16.02.2013 Aufrufe

• CFM 内のローテーション用のリネーム・ベース・レジスタが0 にリセットされ る。 • RB b1 にリターン・ リンク値が格納される。 • return: 修飾プ レデ ィ ケ ー ト が 1 の場合に分岐が発生し、 さ ら に以下の処置がなされ る。 • CFM、 EC、 現在の特権レベルがPFS から復元される。 ( 特権レベルは、 復元し て特権レベルが大き く な ら ない場合に限 り 復元される。 ) • 呼び出し元のスタ ッ ク ・ フ レ ー ムが復元される。 • リターンによって特権レベルが下がり、 かつPSR.lp が 1 の場合は、 Lower-previlege Transfer ( 下位特権遷移 ) トラップが発生する。 • ia: OS に よ っ てイ ン タ ー セプ ト さ れな く て も 、 無条件に分岐が発生す る。 こ の分岐 によって、 (PSR.is を 1 にセッ ト する こ とによ り ) IA-32 命令セ ッ ト を呼び出して、 BR b2{31:0} 内の仮想 リ ニア分岐先ア ド レ スか ら IA-32 命令の処理を開始す る。 修飾 プレディケー トが PR 0 でない場合は、 無効操作フ ォ ル ト が発生す る。 命令セ ッ ト の 移行がデ ィ スエ ー ブルに さ れてい る場合は (PSR.di が 1)、 命令セ ッ ト 移行無効フ ォ ル トが発生する。 IA-32 におけ る分岐先の実効ア ド レ ス は、 現在の コ ー ド ・ セグ メ ン ト と 相対的に、 つ まり、 EIP{31:0}= BR b2 {31:0}- CSD.base として計算される。 PSR.di が 0 の場合は、 任意の特権レ ベルで IA-32 命令セ ッ ト に移行で き る。 PSR.dfh が 1 の場合は、 分岐先 の IA-32 命令で浮動小数点レ ジ ス タ無効フ ォ ル ト が発生す る。 命令セ ッ ト の移行中 には、 レジスタ ・ バンクの切り換えも特権レベルの変更も生じない。 ソ フ ト ウ ェ ア上では、 分岐を発行する前に、 必ず コ ー ド ・ セグ メ ン ト ・ デ ィ ス ク リ プタ (CSD) およびコード ・セグメント ・セレクタ (CS) がロー ド されるよ うにしなけ ればならない。 分岐先の EIP 値がコ ー ド ・ セグメン ト 制限を超えた り、 その値に コード ・セグメント特権違反があった場合は、 分岐先のIA-32 命令で IA-32_Exception (GPFault) が発生する。 16 ビッ トのIA-32 コードに移行する場合は、 BR b2 が CSD.base の 64K バイ ト 以内でなければ、 分岐先命令で GPFault が発生する。 EFLAG.rf は、 最初の IA-32 命令が正常に終了す る ま では変更 さ れない。 br.ia の実 行が完了してか ら、 最初の IA-32 命令の実行が開始される ま での間に、 PSR.da、 PSR.id、 PSR.dd、 PSR.ed は 0 にク リアされる。 EFLAG.rf は、 分岐先の IA-32 命令が 正常に終了する ま では ク リ ア されない。 IA-32 でのプロセッサによ る整合性のあるメモ リ参照と Itanium アーキテクチャでの 順序付け られていない メ モ リ 参照 と の間で メ モ リ の順序付けが必要な場合は、 ソ フ トウェアによって分岐の前にmf 命令を発行しなければな ら ない。 プ ロ セ ッ サは、 Itanium 命令セ ッ ト で生じ る命令ス ト リ ー ムへの書き込みが、 後続の IA-32 命令 フェッチから検出できるかどうかは保証していない。 br.ia 命令では、 命令のシ リ アル化操作は行わない。 プロセッサは、 ( 同一命令グルー プ内で も ) 前に行われた GR や FR への書き込みが最初の IA-32 命令か ら検出で き る か ど う かは保証していな い。 br.ia 命令ではすべての AR を暗黙的に読み込む場合があ る ので、 br.ia 命令 と同じ命令グループ内での AR への書き込みは許可されない。 AR への書き込みと br.ia 命令 と の間に無効な RAW の依存関係が存在する場合は、 最初の IA-32 命令の フ ェ ッ チ と 実行の段階では、 更新後の AR 値がわかる こ と もわからないこ と もある。 IA-32 命令セ ッ ト を実行す る と 、 ALAT の内容は未定義の ま ま である。 ソ フ ト ウ ェ ア 上では、 命令セッ ト の移行があった場合は、 ALAT の値が保持される も の と みなし てはならない。 現在のレジスタ ・ スタック ・ フレーム内に残されたすべてのレジス タ の状態は、 命令セ ッ ト の移行の前後では未定義であ る。 IA-32 コードに移行する と、 ALAT 内の既存エン ト リ は無視される。 レ ジス タ ・ ス タ ッ ク内にダー テ ィ なレ ジスタが存在する場合は、 br.ia 命令で無効操作フ ォ ル ト が発生す る。 現在の レ ジ スタ ・ スタック ・ フレームはゼロ ・ ク リアされる。 ダーティなレジスタのレジスタ ・ 3:18 第 3 巻 : 命令リファレンス br

ファイルをフラッシュするには、 命令グループ内でbr.ia 命令 よ り 前に flushrs 命令を発行しなければな ら ない。 命令セ ッ ト の移行のパ フ ォ ー マン ス を改善す る に は、 ソ フ ト ウ ェア上では、 1) flushrs 命令を必ず br.ia 命令の前の 1 つだけの命 令グル ー プに入れ、 2) br.ia 命令を必ず最初の B スロッ トに入れて、 IA-32 命令 セ ッ ト を起動す る の と 並行してレ ジ ス タ ・ ス タ ッ ク の フ ラ ッ シ ュ を起動す る と よ い。 br.ia 命令は、 常に、 " 静的に処理す る " ( デフォルト ) のヒントを付けて最初のB ス ロッ トで実行するようにする。 そうしないと、 プロセッサのパフォーマンスが低下 する。 br.ia によってItanium アーキテクチャ ・ ト ラップ ( 例えば、 シングル・ステップ・ ト ラ ッ プ、 分岐発生 ト ラ ッ プ、 ま たは実装されていない命令ア ド レ ス ・ ト ラ ッ プ ) が 発生した場合、 IIP には元の 64 ビッ トの分岐先IP が格納される ( この値は 32 ビッ ト からゼロ拡張されない )。 もう1 つの分岐タイプが、 単純なカウン ト 指定ループ向けに用意されている。 この 分岐タ イ プでは、 ル ー プ ・ カ ウ ン ト (LC) アプ リ ケーシ ョ ン ・ レジスタを使用して分 岐条件を判定し、 修飾プレデ ィ ケー ト は使用しない。 • cloop: LC レ ジス タがゼロでない場合は、 こ の値がデ ク リ メ ン ト され、 分岐が発生す る。 こ れ ら の単純な分岐タ イ プの他に、 モジ ュ ロ ・ ス ケ ジ ュ ー ル型ルー プを高速に処理 するための 4 つのタイプがある ( 第 1 巻、 第 1 部の 4.5.1 項 「モジュロ ・スケジュー ル型ループのサポ ー ト 」 を参照 )。 LC レ ジス タ を使用する カ ウ ン ト 指定ループ用が 2 つ と 、 修飾プ レ デ ィ ケ ー ト を使用する while ループ用が 2 つである。 これらのルー プ ・ タイプでは、 レジスタのローテーションを使用してレジスタのリネー ミングを 実現し、 プ レ デ ィ ケ ー シ ョ ン を使用して空のパ イ プ ラ イ ン ・ ス テ ー ジ に対応す る命 令をオフにする。 エピローグ ・ カウン ト (EC) アプ リ ケーシ ョ ン ・ レジスタを使用してエピローグ ・ ス テージがカウント される。 あるいは一部の while ループについては、 プロローグ ・ ス テ ー ジの一部が カ ウ ン ト さ れる。 エ ピ ロ ー グ ・ フ ェ ー ズでは、 ルー プが一巡す る た びに EC がデク リ メン ト され、 大部分のループでは、 EC が 1 になる と、 パイプライ ンが空になってループが終了する。 特定タイプの、 ソフ ト ウェアによ ってパイプラ イ ン化 さ れたアン ロ ー ル型の最適化ルー プについては、 br.cexit または br.wext の分岐先が次の順序のバン ド ルに設定される。 こ の場合は、 EC が 1 になっても、 パ イプラインは完全には空になっていないこ とがあり、 EC がゼロであって も引き続き パイプラインから命令が排出される。 これらのモジュロ・スケジュール型ループについては、 分岐が発生するかどうかの 演算は、 カ ー ネル分岐条件 ( カウント指定ループに対しては LC、 while ループに対 しては修飾プレディ ケー ト ) およびエピローグ条件 (EC が 1 より大きいか、 大きく ないか ) によって決まる。 こ れ ら の分岐に は、 "top" と "exit" の 2 つのカテゴ リ がある。 "top" タイプ (ctop と wtop) は、 ル ー プの判定がルー プ本体の一番下にあ る と き に使用 さ れ、 したが っ て、 分岐が発生す る と ル ー プを続行す る のに対し、 フ ォ ー ル ・ スルー分岐ではルー プを 終了す る。 "exit" タイプ (cexit と wexit) は、 ルー プの判定がル ー プの一番下以外の ど こかにあるときに使用され、 したがって、 フォール・ スルー分岐ではループを続行 するのに対して、 分岐が発生する とループを終了する。 "exit" タイプは、 アンロール 型のパイプラ イン化されたループ内の中間点に も使用される。 ( 詳細は第 1 巻、 第 1 部の 4.5.1 項 「モジュロ ・スケジュール型ループのサポート」 を参照。 ) モジュロ・スケジュール型ループのタイプを以下に示す。 • ctop と cexit: こ れ ら の分岐タ イ プの動作は、 分岐す る か ど う かの判定以外は同じ で ある。 br.ctop は、 LC がゼロでないか、 EC が 1 より大きい場合に分岐が発生す 第 3 巻 : 命令リファレンス 3:19

ファイルをフラッシュするには、 命令グループ内でbr.ia 命令 よ り 前に flushrs<br />

命令を発行しなければな ら ない。 命令セ ッ ト の移行のパ フ ォ ー マン ス を改善す る に<br />

は、 ソ フ ト ウ ェア上では、 1) flushrs 命令を必ず br.ia 命令の前の 1 つだけの命<br />

令グル ー プに入れ、 2) br.ia 命令を必ず最初の B スロッ トに入れて、 IA-32 命令<br />

セ ッ ト を起動す る の と 並行してレ ジ ス タ ・ ス タ ッ ク の フ ラ ッ シ ュ を起動す る と よ い。<br />

br.ia 命令は、 常に、 " 静的に処理す る " ( デフォルト ) のヒントを付けて最初のB ス<br />

ロッ トで実行するようにする。 そうしないと、 プロセッサのパフォーマンスが低下<br />

する。<br />

br.ia によってItanium アーキテクチャ ・ ト ラップ ( 例えば、 シングル・ステップ・ ト<br />

ラ ッ プ、 分岐発生 ト ラ ッ プ、 ま たは実装されていない命令ア ド レ ス ・ ト ラ ッ プ ) が<br />

発生した場合、 IIP には元の 64 ビッ トの分岐先IP が格納される ( この値は 32 ビッ ト<br />

からゼロ拡張されない )。<br />

もう1 つの分岐タイプが、 単純なカウン ト 指定ループ向けに用意されている。 この<br />

分岐タ イ プでは、 ル ー プ ・ カ ウ ン ト (LC) アプ リ ケーシ ョ ン ・ レジスタを使用して分<br />

岐条件を判定し、 修飾プレデ ィ ケー ト は使用しない。<br />

• cloop: LC レ ジス タがゼロでない場合は、 こ の値がデ ク リ メ ン ト され、 分岐が発生す<br />

る。<br />

こ れ ら の単純な分岐タ イ プの他に、 モジ ュ ロ ・ ス ケ ジ ュ ー ル型ルー プを高速に処理<br />

するための 4 つのタイプがある ( 第 1 巻、 第 1 部の 4.5.1 項 「モジュロ ・スケジュー<br />

ル型ループのサポ ー ト 」 を参照 )。 LC レ ジス タ を使用する カ ウ ン ト 指定ループ用が<br />

2 つ と 、 修飾プ レ デ ィ ケ ー ト を使用する while ループ用が 2 つである。 これらのルー<br />

プ ・ タイプでは、 レジスタのローテーションを使用してレジスタのリネー ミングを<br />

実現し、 プ レ デ ィ ケ ー シ ョ ン を使用して空のパ イ プ ラ イ ン ・ ス テ ー ジ に対応す る命<br />

令をオフにする。<br />

エピローグ ・ カウン ト (EC) アプ リ ケーシ ョ ン ・ レジスタを使用してエピローグ ・ ス<br />

テージがカウント される。 あるいは一部の while ループについては、 プロローグ ・ ス<br />

テ ー ジの一部が カ ウ ン ト さ れる。 エ ピ ロ ー グ ・ フ ェ ー ズでは、 ルー プが一巡す る た<br />

びに EC がデク リ メン ト され、 大部分のループでは、 EC が 1 になる と、 パイプライ<br />

ンが空になってループが終了する。 特定タイプの、 ソフ ト ウェアによ ってパイプラ<br />

イ ン化 さ れたアン ロ ー ル型の最適化ルー プについては、 br.cexit または br.wext<br />

の分岐先が次の順序のバン ド ルに設定される。 こ の場合は、 EC が 1 になっても、 パ<br />

イプラインは完全には空になっていないこ とがあり、 EC がゼロであって も引き続き<br />

パイプラインから命令が排出される。<br />

これらのモジュロ・スケジュール型ループについては、 分岐が発生するかどうかの<br />

演算は、 カ ー ネル分岐条件 ( カウント指定ループに対しては LC、 while ループに対<br />

しては修飾プレディ ケー ト ) およびエピローグ条件 (EC が 1 より大きいか、 大きく<br />

ないか ) によって決まる。<br />

こ れ ら の分岐に は、 "top" と "exit" の 2 つのカテゴ リ がある。 "top" タイプ (ctop と<br />

wtop) は、 ル ー プの判定がルー プ本体の一番下にあ る と き に使用 さ れ、 したが っ て、<br />

分岐が発生す る と ル ー プを続行す る のに対し、 フ ォ ー ル ・ スルー分岐ではルー プを<br />

終了す る。 "exit" タイプ (cexit と wexit) は、 ルー プの判定がル ー プの一番下以外の ど<br />

こかにあるときに使用され、 したがって、 フォール・ スルー分岐ではループを続行<br />

するのに対して、 分岐が発生する とループを終了する。 "exit" タイプは、 アンロール<br />

型のパイプラ イン化されたループ内の中間点に も使用される。 ( 詳細は第 1 巻、 第 1<br />

部の 4.5.1 項 「モジュロ ・スケジュール型ループのサポート」 を参照。 )<br />

モジュロ・スケジュール型ループのタイプを以下に示す。<br />

• ctop と cexit: こ れ ら の分岐タ イ プの動作は、 分岐す る か ど う かの判定以外は同じ で<br />

ある。 br.ctop は、 LC がゼロでないか、 EC が 1 より大きい場合に分岐が発生す<br />

第 3 巻 : 命令リファレンス 3:19

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!