16.02.2013 Aufrufe

24531904_j

24531904_j

24531904_j

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

表 3-1. 擬似コード関数 ( 続き )<br />

rse_preserve_frame<br />

(preserved_frame_size)<br />

rse_restore_frame(preserved_sol,<br />

growth, current_frame_size)<br />

preserved_frame_size で指定される数のレジスタが、RSE によって予約される<br />

ようにマークされる。レジスタ・リネームにより、GR[32] 以降の<br />

preserved_frame_size 個のレジスタが GR[32] にリネームされる。AR[BSP]<br />

が、新しい GR[32] が格納されるバッキング・ストア・アドレスを含むように更新<br />

される。<br />

最初の 2 つのパラメータは、分岐リターンまたは rfi により、現在のフレームが<br />

どのように更新されるかを定義する。preserved_sol は、RSE.BOF の下に復元<br />

される必要があるレジスタの数を定義する。growth は、現在のフレームのトップ<br />

で成長するレジスタの数を定義する ( 成長は通常は負の方向になる )。<br />

preserved_sol で指定された数のレジスタが、復元されるようにマークされる。<br />

レジスタ・リネーミングにより、GR[32] より前の preserved_sol 個のレジスタ<br />

が、GR[32] にリネームされる。AR[BSP] が更新され、新しい GR[32] がストア<br />

されるバッキング・ストア・アドレスを示す。ダーティ・レジスタとクリーン・レ<br />

ジスタの数が preserved_sol より小さい場合は、RSE による強制ロードが発行<br />

されるまで、新しい現在のフレームは有効であると見なされない。この関数は、<br />

RSE による強制ロードを実行しない。維持されるフレームが無効なエリアおよび<br />

クリーンなエリアを超えてダーティなエリア内に成長する場合は、この関数は<br />

TRUE を返す。この場合は、3 番目の引数 current_frame_size を使用して、戻<br />

り先のフレームを強制的にゼロにする ( 第 2 巻、第 1 部の 6.5.5 項「分岐リターン<br />

によって使用される不正な PFS」を参照 )。<br />

rse_store(type) レジスタまたは NaT コレクションをバッキング・ストアに保存する<br />

(store_address = AR[BSPSTORE])。store_address{8:3} が 0x3f に等しい場合には、<br />

NaT コレクション AR[RNAT] がストアされる。store_address{8:3} が 0x3f に等し<br />

くない場合は、レジスタ RSE.StoreReg がストアされ、そのレジスタの NaT ビッ<br />

トが AR[RNAT]{store_address{8:3}} に格納される。ストアが成功すると、<br />

AR[BSPSTORE] が 8 だけインクリメントされる。ストアが成功し、レジスタがス<br />

トアされた場合、RSE.StoreReg が 1 だけインクリメントされる ( スタックされた<br />

レジスタでのラッピングが行われることがある )。このストアによって、ダー<br />

ティー・パーティションからクリーン・パーティションにレジスタを移動する。<br />

RSE による強制ストアでは、タイプは MANDATORY である。RSE による強制ス<br />

トアによって、割り込みが発生するときがある。第 2 巻、第 1 部の表 6-6 を参照の<br />

こと。<br />

rse_update_internal_stack_pointers<br />

(new_store_pointer)<br />

この関数は、AR[BSPSTORE] に新しい値 (new_store_pointer) が与えられたと<br />

きに、AR[BSP] の新しい値を計算する。この値は、new_store_pointer に、<br />

ダーティー・レジスタの数と、その間にある NaT コレクションの数を加えたもの<br />

に等しい。つまり、ダーティー・パーティションのサイズは、AR[BSPSTORE] の<br />

書き込みの前後で同じである。すべてのクリーン・レジスタは無効なパーティショ<br />

ンに移動される。<br />

sign_ext(value, pos) ビット pos-1 から 0 までが value で埋められ、ビット位置 pos から 63 までが<br />

value のビットpos-1 で埋められている64 ビットの数値を返す。pos が 64 以上であ<br />

る場合には、value が返される。<br />

spontaneous_deferral(paddr, size,<br />

border, mattr, otype, hint, *defer)<br />

関数 操作<br />

次の 3 つの条件がすべて該当した場合に、必要に応じて *defer を強制的に TRUE<br />

にする、プロセッサに依存するルーチン。(1) 自然発生デファーがイネーブル、(2)<br />

自然発生デファーがプログラミング・モデルによって許可されている、(3) スペ<br />

キュレーティブ・ロードをデファーするのが有利であるとプロセッサが判断した場<br />

合 ( 特定のレベルのキャッシュ内のミスに基づく )。<br />

spontaneous_deferral_enabled() プロセッサに依存するルーチン。スペキュレーティブ・ロードの自然発生デファー<br />

がプロセッサ内でイネーブルまたはディスエーブルのどちらであるのか応じて、<br />

TRUE または FALSE を返す、<br />

tlb_access_key(vaddr) この関数は、vaddr に対応するエントリのアクセス・キーを TLB から返す。<br />

第 3 巻 : 擬似コード関数 3:257

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!