24531904_j
24531904_j 24531904_j
• 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
- Seite 1 und 2: インテル ® Itanium ® アー
- Seite 3 und 4: 目次 第 I 部 : インテル ®
- Seite 5: 図 3.2 インテル ® アーキ
- Seite 8 und 9: 2-37 lftype のニーモニック
- Seite 10 und 11: 第 II 部 : IA-32 命令セット
- Seite 13 und 14: 本書について 1 インテル
- Seite 15 und 16: 第 9 章「IA-32 割 り 込みベ
- Seite 17 und 18: 1.4 用語の定義 以下の定義
- Seite 19 und 20: 改訂日付 改訂番号 内容 20
- Seite 21 und 22: 命令リファレンス 2 本章
- Seite 23 und 24: add add ─ 加算 (Add) 書式 : (
- Seite 25 und 26: alloc alloc ─ スタック・フ
- Seite 27 und 28: and and ─ 論理積 (Logical And)
- Seite 29: br ─ 分岐 (Branch) 書式 : (qp
- Seite 33 und 34: 図 2-4. br.wtop および br.wexit
- Seite 35 und 36: CFM.sor = 0; CFM.rrb.gr = 0; CFM.rr
- Seite 37 und 38: eak break ─ ブレーク (Break)
- Seite 39 und 40: l 関係な く 、 無効操作フ
- Seite 41 und 42: p 操作 : tmp_tag = IP + sign_ext(
- Seite 43 und 44: chk chk ─ スペキュレーシ
- Seite 45 und 46: clrrrb clrrrb ─ RRB のクリア
- Seite 47 und 48: cmp る関係を利用する。 一
- Seite 49 und 50: cmp4 cmp4 ─ 4 バイト比較 (Co
- Seite 51 und 52: cmp4 PR[p1 ] = 0; PR[p2] = 0; } els
- Seite 53 und 54: cmpxchg ldhint コ ンプ リ ー
- Seite 55 und 56: czx czx ─ ゼロ・インデッ
- Seite 57 und 58: dep dep ─ デポジット (Deposi
- Seite 59 und 60: epc epc ─ 特権コードへの
- Seite 61 und 62: fabs fabs ─ 浮動小数点絶対
- Seite 63 und 64: famax famax ─ 浮動小数点絶
- Seite 65 und 66: fand fand ─ 浮動小数点論理
- Seite 67 und 68: fc fc ─ キャッシュのフラ
- Seite 69 und 70: fclass fclass ─ 浮動小数点
- Seite 71 und 72: fclrf fclrf ─ 浮動小数点フ
- Seite 73 und 74: fcmp 操作 : if (PR[qp]) { if (p 1
- Seite 75 und 76: fcvt.fx fcvt.fx ─ 浮動小数点
- Seite 77 und 78: fcvt.xf fcvt.xf ─ 符号付き整
- Seite 79 und 80: fetchadd fetchadd ─ 即値のフ
ファイルをフラッシュするには、 命令グループ内で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