16.02.2013 Aufrufe

24531904_j

24531904_j

24531904_j

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

lfetch<br />

表 2-38. lfhint のニーモニック値<br />

lfhint ニーモニック 意味<br />

none 時間的局所性、レベル 1<br />

nt1 時間的局所性なし、レベル 1<br />

nt2 時間的局所性なし、レベル 2<br />

nta 時間的局所性なし、全レベル<br />

実装 さ れていないア ド レ ス に対して、 フ ォ ル ト を発生す る lfetch を発行する と、 実装<br />

されていないデータ ・ ア ド レス ・ フ ォル ト が発生する。 実装されていないア ド レスに対<br />

して、 フ ォル ト を発生しない lfetch を発行する と 、 実装されていないデー タ ・ ア ド レ<br />

ス ・ フ ォ ル ト は発生せず、 プ リ フ ェ ッ チ要求 も 発行 さ れない。 ただし、 指定した場合は、<br />

レジスタのポスト ・インクリメントが行われる。<br />

フォルトを発生しない形式のlfetch と フ ォ ル ト を発生す る形式の lfetch はいずれも<br />

スペキ ュ レ ー テ ィ ブに使用でき る。 フ ォ ル ト を発生する形式の lfetch でフォルト を発<br />

生 さ せ る目的は、 ア ド レ ス に関す る問題を オペレ ー テ ィ ン グ ・ シ ス テ ムが迅速に解決で<br />

き る よ う にす る ためである。 ア ド レ ス に関する問題を迅速に解決で き ない と 、 OS はその<br />

ま まプログラムに戻り、 データ ・ プリ フェ ッチを強制的にスキップする。<br />

特に、 フ ォル ト を発生する lfetch が、 リ ス ト に示すフ ォ ル ト ( 無効操作フ ォ ル ト 以外 )<br />

を発生させた場合、 オペレーティング ・ システムは、 迅速に、 かつ割り込まれたプログ<br />

ラ ム に対して透過的に こ の フ ォ ル ト を処理する必要がある。 フ ォ ル ト を迅速かつ透過的<br />

に処理できない場合 ( フ ォ ル ト を処理す る と プ ロ グ ラ ムが終了す る場合な ど )、 OS は割<br />

り込まれたプログラムに戻り、 データ ・ プリ フェ ッチをスキップする必要がある。 これ<br />

を行うのは簡単で、 IPSR.ed ビッ トに1 をセッ ト してから rfi を実行し、 プロセスに戻<br />

れば よい。 これに よ り lfetch.fault は、 ベース ・ レジスタのポス ト ・ イン ク リ メン<br />

ト 処理を実行す る が ( 指定された場合 )、 プリ フェ ッチ要求はどれも抑止されるため、 プ<br />

リフェッチ関連のフォルトも抑止される。 OS は、 フ ォル ト を発生する lfetch がフォ<br />

ルトの原因であったかどうかを容易に識別できる。 その方法としては、 ISR.na が 1 であ<br />

り ISR.code{3:0} が 4 である こ と を観察すれば よ い。 ただし、 無効操作フ ォ ル ト は例外で<br />

ある。 このフォルト は、 ベース ・ レジスタのポス ト ・ インク リ メン ト処理が指定されて<br />

おり、 ベース ・ レジスタが現在のスタック ・ フレームの外部にある、 または GR0 である<br />

場合に、 lfetch.fault によって発生する場合がある。 この1 つのフ ォル ト は、<br />

lfetch.fault のプ リ フ ェ ッ チの側面ではな く 、 ベー ス更新部分に関連してい る。 その<br />

ため、 lfetch.fault の無効操作フ ォ ル ト は、 その他の命令の場合 と 同様に処理する必<br />

要がある。<br />

操作 : if (PR[qp]) {<br />

itype = READ|NON_ACCESS;<br />

itype |= (lftype == ‘fault’) ? LFETCH_FAULT : LFETCH;<br />

if (reg_base_update_form || imm_base_update_form)<br />

check_target_register(r 3 );<br />

if (lftype == ‘fault’) { // faulting form<br />

if (GR[r 3 ].nat && !PSR.ed) // fault on NaT address<br />

register_nat_consumption_fault(itype);<br />

}<br />

excl_hint = (exclusive_form) ? EXCLUSIVE : 0;<br />

if (!GR[r 3 ].nat && !PSR.ed) {// faulting form already faulted if r 3 is nat<br />

paddr = tlb_translate(GR[r 3], 1, itype, PSR.cpl, &mattr, &defer);<br />

if (!defer)<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!