24531904_j
24531904_j 24531904_j
fi ─ 割り込みからのリターン (Return From Interruption) 書式 : rfi B8 説明 : 割り込み以前のマシン ・ コンテキス ト が復元される。 PSR は IPSR から復元され、 IPSR は変更されず、 IP は IIP から復元される。 IP にロード されるバンドル ・アド レス、 PSR.ri にロー ド される命令スロッ ト から、 実行が再開される。 こ の命令は、 直後にス ト ッ プが必要であ る。 直後に ス ト ッ プがない場合は、 無効操作 フォルトが発生する。 この命令は、 IPSR.bn によって指定されるレジスタ ・バンクに切 り替える。 GR 16 ~ GR 31 にア ク セスする、 同じ命令グルー プ内の命令は、 以前のレ ジ スタ ・バンクを参照する。 後続の命令グループは、 新しいレジスタ ・バンクを参照する。 こ の命令は、 命令のシ リ アル化を実行する。 これに よ って、 以下が保証される。 • 後続の命令グループのフ ェ ッチに影響を与えるプロセッサ ・ レジスタ ・ リ ソースに 対する、 先行す る変更が検出 さ れる。 • 後続のプ ロ グ ラ ム実行 ま たはデー タ ・ メ モ リ ・ ア ク セス に影響を与え る プ ロ セ ッ サ ・ レ ジ ス タ ・ リ ソ ー ス に対す る、 先行する変更が検出 さ れる。 • 先行す る メ モ リ 同期 (sync.i) 操作は、 ロ ー カ ル ・ プ ロ セ ッ サの命令キ ャ ッ シ ュ に影 響を与える。 • 後続の命令グル ー プの フ ェ ッ チ ( 戻り先の命令グループを含む ) は、 rfi の完了後に 再び開始される。 rfi 命令は、 シ リ アル化 さ れる操作を含む命令グルー プ よ り 後の命令グル ー プに含 ま れ ていなければならない。 こ の命令は、 最高の特権レ ベル以外では実行で き ない。 こ の命令にはプ レ デ ィ ケ ー ト を 使用で き ない。 PSR.ic または PSR.i が 1 の場合は、 この命令の実行は不定になる。 ソ フ ト ウ ェアは、 IIP、 IPSR、 IFS が書き込まれてから次の rfi が実行される ま での間に、 IIP、 IPSR、 または IFS を変更する割り込みが発生しないよ う に保証しなければならない。 こ の命令は、 下位特権遷移 ト ラ ッ プ、 分岐発生 ト ラ ッ プ、 シ ン グル ・ ス テ ッ プ ・ ト ラ ッ プを発生しない。 この命令がPSR.ri を 2 に設定し、 戻り先が MIX バン ド ルの場合は、 戻り先のバン ド ル上 で無効操作フ ォ ル ト が発生す る。 IPSR.is が 1 の場合、 コ ン ト ロ ールは、 IA-32 命令セ ッ ト 内で、 IIP{31:0} に よ っ て指定 さ れる仮想リニア ・ ア ド レスから再開される。 PSR.di は、 こ の命令での命令セ ッ ト の移行 を禁止しない。 rfi の実行が完了した後に PSR.dfh が 1 になる場合は、 戻り先の IA-32 命令で、 浮動小数点レ ジ ス タ無効フ ォ ル ト が発生する。 IPSR.is が 1 であ り 、 実装 さ れていない命令ア ド レ ス ・ ト ラ ッ プが発生した場合、 IIP に は、 元の 64 ビッ トの戻り先IP が格納される。 こ の値は、 32 ビットからゼロ拡張されな い。 IA-32 命令セ ッ ト に移行する場合、 現行のス タ ッ ク ・ フ レ ー ムのサイ ズは 0 に設定され る。 また、 スタ ッ ク された汎用レ ジスタ は、 すべて不定の状態のま ま になる。 ソ フ ト ウ ェアは、 命令セ ッ ト の移行の前後で、 これら のレ ジス タの値に依存してはな ら ない。 IA-32 命令セ ッ ト への移行時に、 ソ フ ト ウ ェ アは、 BSPSTORE==BSP を保証しなければ な ら ない。 こ の条件を満た さ ない場合の動作は不定である。 IA-32 プロセッサとの整合性のあるメモリ参照と Itanium アーキテクチャの順序付けなし のメモ リ 参照の間に、 メモ リ ・ ア ク セスの順序が必要である場合は、 ソ フ ト ウ ェ アは、 3:210 第 3 巻 : 命令リファレンス rfi
fi この命令を発行する前に、 mf 命令を発行しなければな ら ない。 プ ロ セ ッ サは、 命令ス ト リーム内で、 Itanium 命令セ ッ ト に よ っ て生成 さ れた書き込みが、 後続の IA-32 命令か ら 検出で き る こ と を保証していない。 ソフ ト ウェアは、 この命令を発行する前に、 コード ・セグメント ・ディスク リプタおよ びセレ ク タがロー ド される よ う にしなければならない。 戻り先の EIP 値がコ ー ド ・ セグ メ ン ト 制限を超え る場合や、 その値に コ ー ド ・ セグ メ ン ト 特権違反があ る場合は、 戻 り 先の IA-32 命令で、 IA-32_Exception(GPFault) 例外が発生す る。 16 ビットのIA-32 コード への移行では、 IIP が CSD.base の 64K バイ ト の範囲か ら 外れる場合、 戻 り 先の命令で GPFault が発生する。 戻り先の IA-32 命令が正常に終了す る ま で、 EFLAG.rf と PSR.id は変更されない。 戻り先 の IA-32 命令の実行が開始 さ れる前に、 PSR.da、 PSR.dd、 PSR.ia、 および PSR.ed は 0 に クリアされる。 IA-32 命令セ ッ ト が実行 さ れた場合、 ALAT の内容は不定になる。 ソフトウェアは、 命令 セ ッ ト の移行の前後で、 ALAT の状態に依存してはな ら ない。 IA-32 コードへの移行の際 は、 ALAT 内の既存のエン ト リ は無視される。 操作 : if (!followed_by_stop()) illegal_operation_fault(); unimplemented_address = 0; if (PSR.cpl != 0) privileged_operation_fault(0); taken_rfi = 1; PSR = CR[IPSR]; if (CR[IPSR].is == 1) { //resume IA-32 instruction set tmp_IP = CR[IIP]; if ((CR[IPSR].it && unimplemented_virtual_address(tmp_IP)) || (!CR[IPSR].it && unimplemented_physical_address(tmp_IP))) unimplemented_address = 1; //compute effective instruction pointer EIP{31:0} = CR[IIP]{31:0} - AR[CSD].Base; //force zero-sized restored frame rse_restore_frame(0, 0, CFM.sof); CFM.sof = 0; CFM.sol = 0; CFM.sor = 0; CFM.rrb.gr = 0; CFM.rrb.fr = 0; CFM.rrb.pr = 0; rse_invalidate_non_current_regs(); //The register stack engine is disabled during IA-32 //instruction set execution. } else { //return to Itanium instruction set tmp_IP = CR[IIP] & ~0xf; slot = CR[IPSR].ri; if ((CR[IPSR].it && unimplemented_virtual_address(tmp_IP)) || (!CR[IPSR].it && unimplemented_physical_address(tmp_IP))) unimplemented_address = 1; if (CR[IFS].v) { tmp_growth = -CFM.sof; alat_frame_update(-CR[IFS].ifm.sof, 0); rse_restore_frame(CR[IFS].ifm.sof, tmp_growth, CFM.sof); CFM = CR[IFS].ifm; } rse_enable_current_frame_load(); 第 3 巻 : 命令リファレンス 3:211
- Seite 171 und 172: mov fr mov ─ 浮動小数点レ
- Seite 173 und 174: mov imm mov ─ 即値の移動 (Mo
- Seite 175 und 176: mov indirect 操作 : if (PR[qp]) {
- Seite 177 und 178: mov ip mov ─ 命令ポインタ
- Seite 179 und 180: mov psr mov ─ プロセッサ・
- Seite 181 und 182: movl movl ─ ロング型即値の
- Seite 183 und 184: mux 図 2-27. Mux2 の例 (16 ビ
- Seite 185 und 186: nop nop ─ ノー・オペレー
- Seite 187 und 188: pack pack ─ パック (Pack) 書
- Seite 189 und 190: padd padd ─ 並列加算 (Paralle
- Seite 191 und 192: padd } 割り込み : 無効操作
- Seite 193 und 194: pavg 図 2-31. 並列平均での
- Seite 195 und 196: pavgsub pavgsub ─ 並列平均減
- Seite 197 und 198: pcmp pcmp ─ 並列比較 (Paralle
- Seite 199 und 200: pmax pmax ─ 並列最大値 (Para
- Seite 201 und 202: pmpy pmpy ─ 並列乗算 (Paralle
- Seite 203 und 204: pmpyshr 操作 : if (PR[qp]) { chec
- Seite 205 und 206: probe probe ─ アクセスのプ
- Seite 207 und 208: psad psad ─ 並列絶対差累計
- Seite 209 und 210: pshladd pshladd ─ 並列左シフ
- Seite 211 und 212: pshr } 割り込み : 無効操作
- Seite 213 und 214: psub psub ─ 並列減算 (Paralle
- Seite 215 und 216: psub } 割り込み : 無効操作
- Seite 217 und 218: ptc.g, ptc.ga ptc.g, ptc.ga ─ グ
- Seite 219 und 220: ptc.l ptc.l ─ ローカル・ト
- Seite 221: ptr 割り込み : 特権操作フ
- Seite 225 und 226: sm rsm ─ システム・マスク
- Seite 227 und 228: um rum ─ ユーザ・マスクの
- Seite 229 und 230: setf 操作 : if (PR[qp]) { fp_chec
- Seite 231 und 232: shladd shladd ─ 左シフトお
- Seite 233 und 234: shr shr ─ 右シフト (Shift Rig
- Seite 235 und 236: srlz srlz ─ シリアル化 (Seri
- Seite 237 und 238: st st ─ ストア (Store) 書式
- Seite 239 und 240: stf stf ─ 浮動小数点スト
- Seite 241 und 242: sub sub ─ 減算 (Subtract) 書
- Seite 243 und 244: sxt sxt ─ 符号拡張 (Sign Exte
- Seite 245 und 246: tak tak ─ トランスレーシ
- Seite 247 und 248: tbit PR[p2 ] = 0; } break; case ‘
- Seite 249 und 250: tnat tnat ─ Test Nat テスト (T
- Seite 251 und 252: tpa tpa ─ 物理アドレスへ
- Seite 253 und 254: unpack unpack ─ アンパック (
- Seite 255 und 256: xchg xchg ─ 交換 (Exchange) 書
- Seite 257 und 258: xma xma ─ 固定小数点積和 (
- Seite 259 und 260: xmpy xmpy ─ 固定小数点乗算
- Seite 261 und 262: zxt zxt ─ ゼロ拡張 (Zero Exte
- Seite 263 und 264: 擬似コード関数 3 この章
- Seite 265 und 266: 表 3-1. 擬似コード関数 (
- Seite 267 und 268: 表 3-1. 擬似コード関数 (
- Seite 269 und 270: 表 3-1. 擬似コード関数 (
- Seite 271 und 272: 表 3-1. 擬似コード関数 (
fi ─ 割り込みからのリターン (Return From Interruption)<br />
書式 : rfi B8<br />
説明 : 割り込み以前のマシン ・ コンテキス ト が復元される。 PSR は IPSR から復元され、 IPSR<br />
は変更されず、 IP は IIP から復元される。 IP にロード されるバンドル ・アド レス、<br />
PSR.ri にロー ド される命令スロッ ト から、 実行が再開される。<br />
こ の命令は、 直後にス ト ッ プが必要であ る。 直後に ス ト ッ プがない場合は、 無効操作<br />
フォルトが発生する。 この命令は、 IPSR.bn によって指定されるレジスタ ・バンクに切<br />
り替える。 GR 16 ~ GR 31 にア ク セスする、 同じ命令グルー プ内の命令は、 以前のレ ジ<br />
スタ ・バンクを参照する。 後続の命令グループは、 新しいレジスタ ・バンクを参照する。<br />
こ の命令は、 命令のシ リ アル化を実行する。 これに よ って、 以下が保証される。<br />
• 後続の命令グループのフ ェ ッチに影響を与えるプロセッサ ・ レジスタ ・ リ ソースに<br />
対する、 先行す る変更が検出 さ れる。<br />
• 後続のプ ロ グ ラ ム実行 ま たはデー タ ・ メ モ リ ・ ア ク セス に影響を与え る プ ロ セ ッ サ ・<br />
レ ジ ス タ ・ リ ソ ー ス に対す る、 先行する変更が検出 さ れる。<br />
• 先行す る メ モ リ 同期 (sync.i) 操作は、 ロ ー カ ル ・ プ ロ セ ッ サの命令キ ャ ッ シ ュ に影<br />
響を与える。<br />
• 後続の命令グル ー プの フ ェ ッ チ ( 戻り先の命令グループを含む ) は、 rfi の完了後に<br />
再び開始される。<br />
rfi 命令は、 シ リ アル化 さ れる操作を含む命令グルー プ よ り 後の命令グル ー プに含 ま れ<br />
ていなければならない。<br />
こ の命令は、 最高の特権レ ベル以外では実行で き ない。 こ の命令にはプ レ デ ィ ケ ー ト を<br />
使用で き ない。<br />
PSR.ic または PSR.i が 1 の場合は、 この命令の実行は不定になる。 ソ フ ト ウ ェアは、 IIP、<br />
IPSR、 IFS が書き込まれてから次の rfi が実行される ま での間に、 IIP、 IPSR、 または<br />
IFS を変更する割り込みが発生しないよ う に保証しなければならない。<br />
こ の命令は、 下位特権遷移 ト ラ ッ プ、 分岐発生 ト ラ ッ プ、 シ ン グル ・ ス テ ッ プ ・ ト ラ ッ<br />
プを発生しない。<br />
この命令がPSR.ri を 2 に設定し、 戻り先が MIX バン ド ルの場合は、 戻り先のバン ド ル上<br />
で無効操作フ ォ ル ト が発生す る。<br />
IPSR.is が 1 の場合、 コ ン ト ロ ールは、 IA-32 命令セ ッ ト 内で、 IIP{31:0} に よ っ て指定 さ<br />
れる仮想リニア ・ ア ド レスから再開される。 PSR.di は、 こ の命令での命令セ ッ ト の移行<br />
を禁止しない。 rfi の実行が完了した後に PSR.dfh が 1 になる場合は、 戻り先の IA-32<br />
命令で、 浮動小数点レ ジ ス タ無効フ ォ ル ト が発生する。<br />
IPSR.is が 1 であ り 、 実装 さ れていない命令ア ド レ ス ・ ト ラ ッ プが発生した場合、 IIP に<br />
は、 元の 64 ビッ トの戻り先IP が格納される。 こ の値は、 32 ビットからゼロ拡張されな<br />
い。<br />
IA-32 命令セ ッ ト に移行する場合、 現行のス タ ッ ク ・ フ レ ー ムのサイ ズは 0 に設定され<br />
る。 また、 スタ ッ ク された汎用レ ジスタ は、 すべて不定の状態のま ま になる。 ソ フ ト<br />
ウ ェアは、 命令セ ッ ト の移行の前後で、 これら のレ ジス タの値に依存してはな ら ない。<br />
IA-32 命令セ ッ ト への移行時に、 ソ フ ト ウ ェ アは、 BSPSTORE==BSP を保証しなければ<br />
な ら ない。 こ の条件を満た さ ない場合の動作は不定である。<br />
IA-32 プロセッサとの整合性のあるメモリ参照と Itanium アーキテクチャの順序付けなし<br />
のメモ リ 参照の間に、 メモ リ ・ ア ク セスの順序が必要である場合は、 ソ フ ト ウ ェ アは、<br />
3:210 第 3 巻 : 命令リファレンス<br />
rfi