24531904_j
24531904_j 24531904_j
表 3-1. 擬似コード関数 ( 続き ) partially_implemented_ip() プロセッサに依存するルーチンで、TRUE を返す場合と FALSE を返す場合がある。 IP の次の値であったはずのアドレスに対して符号拡張された仮想アドレスまたはゼ ロ拡張された物理アドレスが、実装されていない命令アドレス・トラップの発生時 にプロセッサによって IIP に書き込まれる場合は、TRUE を返す。IP の次の値で あったはずのフルアドレスが、このトラップが発生したプロセッサによって IIP に 書き込まれる場合は、FALSE を返す。 pr_phys_to_virt(phys_id) プレディケートの物理レジスタ ID、phys_id から、プレディケートの仮想レジス タ ID を返す rotate_regs() レジスタ・リネーム・ベース・レジスタをデクリメントし、結果としてレジスタ・ ファイルのローテートを行う。CFM.rrb.gr は CFM.sor がゼロでない場合にのみデ クリメントされる。 rse_enable_current_frame_load() RSE ロード・ポインタ (RSE.BSPLoad) が AR[BSP] よりも大きい場合、RSE によ る強制ロードによってカレント・フレームのレジスタを復元できることを示す RSE.CFLE ビットが設定される ( 他のケースでは、RSE はカレント・フレームのレジ スタのスピルまたはフィルを行わない )。この関数は必須の RSE によるロードを実 行しない。この手順で割り込みは発生しない。 rse_ensure_regs_loaded (number_of_bytes) 関数 操作 AR[BSP]と(AR[BSP] - number_of_bytes)の間のレジスタおよびNaTコレクショ ンのうち、スタックされたレジスタにまだ入っていないものがすべて、RSE によ る強制ロードによってレジスタ・スタックにロードされる。ロードされるレジスタ の数が RSE.N_STACK_PHYS より大きい場合は、無効操作フォルトが発生する。 バッキング・ストア・アドレス (AR[BSP] - 8) を始点として、バッキング・ストア・ アドレス (AR[BSP] - number_of_bytes) ( このアドレスを含む ) までデクリメントし ていくすべてのレジスタは、ダーティ・パーティションの一部になる。現在のフ レームを除く、その他のすべてのスタックされたレジスタは、無効パーティション の一部になる。number_of_bytes に 0 も指定できる。この関数で発生する RSE ロードのシーケンスは、割り込みをかけられるときがある。RSE による強制ロー ドによって、割り込みが発生するときがある。第 2 巻、第 1 部の表 6-6 を参照のこ と。 rse_invalidate_non_current_regs() カレント・フレームの外のすべてのレジスタが無効にされる。 rse_load(type) レジスタまたは NaT コレクションをバッキング・ストアから復元する (load_address = RSE.BspLoad - 8)。load_address{8:3} が 0x3f に等しい 場合は、NaT コレクションが NaT 分散レジスタにロードされる ( 分散レ ジ ス タは、 AR[RNAT] と同じでなくてもかまわない )。load_address{8:3} が 0x3f と等しくな い場合は、レジスタ RSE.LoadReg - 1 がロードされ、そのレジスタの NaT ビッ トが dispersal_register{load_address{8:3}} にセットされる。ロードが成 功した場合は、RSE.BspLoad が 8 だけデクリメントされる。ロードが成功し、レ ジスタがロードされた場合は、RSE.LoadReg が 1 だけデクリメントされる ( ス タックされたレジスタでのラッピングが行われることがある )。このロードは、 RSE.CFLE が 1 の場合は、無効なパーティションから現在のフレームにレジスタを 移動し、RSE.CFLE が 0 の場合は、クリーンなパーティションにレジスタを移動す る。RSE による強制ロードでは、type は MANDATORY になる。RSE による強制 ロードによって、割り込みが発生するときがある。第 2 巻、第 1 部の表 6-6 を参照 のこと。 rse_new_frame(current_frame_size, new_frame_size) レジスタ・リネームをまったく変更せずに、新しいフレームが定義される。新しい フレーム・サイズは new_frame_size パラメータによって完全に定義される ( 連 続したコールは累積しない )。new_frame_size が current_frame_size より も大きく、無効でクリーンなパーティション内のレジスタの数がフレームの増加し たサイズよりも小さい場合には、十分な数のレジスタが使用可能になるまで RSE による強制ストアが発行される。結果として生じる RSE ストアのシーケンスは割 り込まれるときがある。RSE による強制ストアによって割り込みが発生するとき がある。第 2 巻、第 1 部の表 6-6 を参照のこと。 3:256 第 3 巻 : 擬似コード関数
表 3-1. 擬似コード関数 ( 続き ) rse_preserve_frame (preserved_frame_size) rse_restore_frame(preserved_sol, growth, current_frame_size) preserved_frame_size で指定される数のレジスタが、RSE によって予約される ようにマークされる。レジスタ・リネームにより、GR[32] 以降の preserved_frame_size 個のレジスタが GR[32] にリネームされる。AR[BSP] が、新しい GR[32] が格納されるバッキング・ストア・アドレスを含むように更新 される。 最初の 2 つのパラメータは、分岐リターンまたは rfi により、現在のフレームが どのように更新されるかを定義する。preserved_sol は、RSE.BOF の下に復元 される必要があるレジスタの数を定義する。growth は、現在のフレームのトップ で成長するレジスタの数を定義する ( 成長は通常は負の方向になる )。 preserved_sol で指定された数のレジスタが、復元されるようにマークされる。 レジスタ・リネーミングにより、GR[32] より前の preserved_sol 個のレジスタ が、GR[32] にリネームされる。AR[BSP] が更新され、新しい GR[32] がストア されるバッキング・ストア・アドレスを示す。ダーティ・レジスタとクリーン・レ ジスタの数が preserved_sol より小さい場合は、RSE による強制ロードが発行 されるまで、新しい現在のフレームは有効であると見なされない。この関数は、 RSE による強制ロードを実行しない。維持されるフレームが無効なエリアおよび クリーンなエリアを超えてダーティなエリア内に成長する場合は、この関数は TRUE を返す。この場合は、3 番目の引数 current_frame_size を使用して、戻 り先のフレームを強制的にゼロにする ( 第 2 巻、第 1 部の 6.5.5 項「分岐リターン によって使用される不正な PFS」を参照 )。 rse_store(type) レジスタまたは NaT コレクションをバッキング・ストアに保存する (store_address = AR[BSPSTORE])。store_address{8:3} が 0x3f に等しい場合には、 NaT コレクション AR[RNAT] がストアされる。store_address{8:3} が 0x3f に等し くない場合は、レジスタ RSE.StoreReg がストアされ、そのレジスタの NaT ビッ トが AR[RNAT]{store_address{8:3}} に格納される。ストアが成功すると、 AR[BSPSTORE] が 8 だけインクリメントされる。ストアが成功し、レジスタがス トアされた場合、RSE.StoreReg が 1 だけインクリメントされる ( スタックされた レジスタでのラッピングが行われることがある )。このストアによって、ダー ティー・パーティションからクリーン・パーティションにレジスタを移動する。 RSE による強制ストアでは、タイプは MANDATORY である。RSE による強制ス トアによって、割り込みが発生するときがある。第 2 巻、第 1 部の表 6-6 を参照の こと。 rse_update_internal_stack_pointers (new_store_pointer) この関数は、AR[BSPSTORE] に新しい値 (new_store_pointer) が与えられたと きに、AR[BSP] の新しい値を計算する。この値は、new_store_pointer に、 ダーティー・レジスタの数と、その間にある NaT コレクションの数を加えたもの に等しい。つまり、ダーティー・パーティションのサイズは、AR[BSPSTORE] の 書き込みの前後で同じである。すべてのクリーン・レジスタは無効なパーティショ ンに移動される。 sign_ext(value, pos) ビット pos-1 から 0 までが value で埋められ、ビット位置 pos から 63 までが value のビットpos-1 で埋められている64 ビットの数値を返す。pos が 64 以上であ る場合には、value が返される。 spontaneous_deferral(paddr, size, border, mattr, otype, hint, *defer) 関数 操作 次の 3 つの条件がすべて該当した場合に、必要に応じて *defer を強制的に TRUE にする、プロセッサに依存するルーチン。(1) 自然発生デファーがイネーブル、(2) 自然発生デファーがプログラミング・モデルによって許可されている、(3) スペ キュレーティブ・ロードをデファーするのが有利であるとプロセッサが判断した場 合 ( 特定のレベルのキャッシュ内のミスに基づく )。 spontaneous_deferral_enabled() プロセッサに依存するルーチン。スペキュレーティブ・ロードの自然発生デファー がプロセッサ内でイネーブルまたはディスエーブルのどちらであるのか応じて、 TRUE または FALSE を返す、 tlb_access_key(vaddr) この関数は、vaddr に対応するエントリのアクセス・キーを TLB から返す。 第 3 巻 : 擬似コード関数 3:257
- Seite 217 und 218: ptc.g, ptc.ga ptc.g, ptc.ga ─ グ
- Seite 219 und 220: ptc.l ptc.l ─ ローカル・ト
- Seite 221 und 222: ptr 割り込み : 特権操作フ
- Seite 223 und 224: fi この命令を発行する前
- 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: 表 3-1. 擬似コード関数 (
- Seite 271 und 272: 表 3-1. 擬似コード関数 (
- Seite 273 und 274: 表 3-1. 擬似コード関数 (
- Seite 275 und 276: 命令形式 4 個々の Itanium ®
- Seite 277 und 278: 使用 さ れていないメ ジ
- Seite 279 und 280: 表 4-4. 命令形式の要約 (
- Seite 281 und 282: 表 4-6. 命令フィールド名 (
- Seite 283 und 284: 4.2 A ユニット命令エンコ
- Seite 285 und 286: 4.2.1.4 Add Immediate 14 A4 4.2.1.5
- Seite 287 und 288: 4.2.2.2 Integer Compare to Zero ─
- Seite 289 und 290: 表 4-13. マルチメディア ALU
- Seite 291 und 292: 4.2.3.1 Multimedia ALU A9 4.2.3.2 M
- Seite 293 und 294: 表 4-18. マルチメディア・
- Seite 295 und 296: 4.3.1.2 Multimedia Multiply/Mix/Pac
- Seite 297 und 298: 4.3.1.8 Multimedia Shift Left ─ F
- Seite 299 und 300: 4.3.2.6 Deposit I15 4.3.3 ビット
- Seite 301 und 302: 表 4-25. その他の I ユニッ
- Seite 303 und 304: 4.3.5.2 Move from BR I22 4.3.6 GR/
- Seite 305 und 306: 4.4 M ユニット命令エンコ
- Seite 307 und 308: 表 4-32. 整数ロード / スト
- Seite 309 und 310: 表 4-34. 浮動小数点ロード
- Seite 311 und 312: 表 4-38. 浮動小数点ペア・
- Seite 313 und 314: 4.4.1.2 Integer Load ─ Increment
- Seite 315 und 316: 4.4.1.4 Integer Store M4 4.4.1.5 In
- Seite 317 und 318: 4.4.1.7 Floating-point Load ─ Inc
表 3-1. 擬似コード関数 ( 続き )<br />
partially_implemented_ip() プロセッサに依存するルーチンで、TRUE を返す場合と FALSE を返す場合がある。<br />
IP の次の値であったはずのアドレスに対して符号拡張された仮想アドレスまたはゼ<br />
ロ拡張された物理アドレスが、実装されていない命令アドレス・トラップの発生時<br />
にプロセッサによって IIP に書き込まれる場合は、TRUE を返す。IP の次の値で<br />
あったはずのフルアドレスが、このトラップが発生したプロセッサによって IIP に<br />
書き込まれる場合は、FALSE を返す。<br />
pr_phys_to_virt(phys_id) プレディケートの物理レジスタ ID、phys_id から、プレディケートの仮想レジス<br />
タ ID を返す<br />
rotate_regs() レジスタ・リネーム・ベース・レジスタをデクリメントし、結果としてレジスタ・<br />
ファイルのローテートを行う。CFM.rrb.gr は CFM.sor がゼロでない場合にのみデ<br />
クリメントされる。<br />
rse_enable_current_frame_load() RSE ロード・ポインタ (RSE.BSPLoad) が AR[BSP] よりも大きい場合、RSE によ<br />
る強制ロードによってカレント・フレームのレジスタを復元できることを示す<br />
RSE.CFLE ビットが設定される ( 他のケースでは、RSE はカレント・フレームのレジ<br />
スタのスピルまたはフィルを行わない )。この関数は必須の RSE によるロードを実<br />
行しない。この手順で割り込みは発生しない。<br />
rse_ensure_regs_loaded<br />
(number_of_bytes)<br />
関数 操作<br />
AR[BSP]と(AR[BSP] - number_of_bytes)の間のレジスタおよびNaTコレクショ<br />
ンのうち、スタックされたレジスタにまだ入っていないものがすべて、RSE によ<br />
る強制ロードによってレジスタ・スタックにロードされる。ロードされるレジスタ<br />
の数が RSE.N_STACK_PHYS より大きい場合は、無効操作フォルトが発生する。<br />
バッキング・ストア・アドレス (AR[BSP] - 8) を始点として、バッキング・ストア・<br />
アドレス (AR[BSP] - number_of_bytes) ( このアドレスを含む ) までデクリメントし<br />
ていくすべてのレジスタは、ダーティ・パーティションの一部になる。現在のフ<br />
レームを除く、その他のすべてのスタックされたレジスタは、無効パーティション<br />
の一部になる。number_of_bytes に 0 も指定できる。この関数で発生する RSE<br />
ロードのシーケンスは、割り込みをかけられるときがある。RSE による強制ロー<br />
ドによって、割り込みが発生するときがある。第 2 巻、第 1 部の表 6-6 を参照のこ<br />
と。<br />
rse_invalidate_non_current_regs() カレント・フレームの外のすべてのレジスタが無効にされる。<br />
rse_load(type) レジスタまたは NaT コレクションをバッキング・ストアから復元する<br />
(load_address = RSE.BspLoad - 8)。load_address{8:3} が 0x3f に等しい<br />
場合は、NaT コレクションが NaT 分散レジスタにロードされる ( 分散レ ジ ス タは、<br />
AR[RNAT] と同じでなくてもかまわない )。load_address{8:3} が 0x3f と等しくな<br />
い場合は、レジスタ RSE.LoadReg - 1 がロードされ、そのレジスタの NaT ビッ<br />
トが dispersal_register{load_address{8:3}} にセットされる。ロードが成<br />
功した場合は、RSE.BspLoad が 8 だけデクリメントされる。ロードが成功し、レ<br />
ジスタがロードされた場合は、RSE.LoadReg が 1 だけデクリメントされる ( ス<br />
タックされたレジスタでのラッピングが行われることがある )。このロードは、<br />
RSE.CFLE が 1 の場合は、無効なパーティションから現在のフレームにレジスタを<br />
移動し、RSE.CFLE が 0 の場合は、クリーンなパーティションにレジスタを移動す<br />
る。RSE による強制ロードでは、type は MANDATORY になる。RSE による強制<br />
ロードによって、割り込みが発生するときがある。第 2 巻、第 1 部の表 6-6 を参照<br />
のこと。<br />
rse_new_frame(current_frame_size,<br />
new_frame_size)<br />
レジスタ・リネームをまったく変更せずに、新しいフレームが定義される。新しい<br />
フレーム・サイズは new_frame_size パラメータによって完全に定義される ( 連<br />
続したコールは累積しない )。new_frame_size が current_frame_size より<br />
も大きく、無効でクリーンなパーティション内のレジスタの数がフレームの増加し<br />
たサイズよりも小さい場合には、十分な数のレジスタが使用可能になるまで RSE<br />
による強制ストアが発行される。結果として生じる RSE ストアのシーケンスは割<br />
り込まれるときがある。RSE による強制ストアによって割り込みが発生するとき<br />
がある。第 2 巻、第 1 部の表 6-6 を参照のこと。<br />
3:256 第 3 巻 : 擬似コード関数