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.

ldf<br />

ldfe でのみ発生する。 コン ト ロール ・ スペキュ レーテ ィ ブ ・ タイプの ldfe では、 サ<br />

ポー ト されないデータ参照フォルトは常にデファーされる ( 据え置かれる )。<br />

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

size = (fill_form ? 16 : (integer_form ? 8 : fsz));<br />

speculative = (fldtype == ‘s’ || fldtype == ‘sa’);<br />

advanced = (fldtype == ‘a’ || fldtype == ‘sa’);<br />

check_clear = (fldtype == ‘c.clr’ );<br />

check_no_clear = (fldtype == ‘c.nc’);<br />

check = check_clear || check_no_clear;<br />

itype = READ;<br />

if (speculative) itype |= SPEC;<br />

if (advanced) itype |= ADVANCE;<br />

if (size == 10) itype |= UNCACHE_OPT;<br />

if (reg_base_update_form || imm_base_update_form)<br />

check_target_register(r 3 );<br />

fp_check_target_register(f 1);<br />

if (tmp_isrcode = fp_reg_disabled(f 1 , 0, 0, 0))<br />

disabled_fp_register_fault(tmp_isrcode, itype);<br />

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

register_nat_consumption_fault(itype);<br />

defer = speculative && (GR[r 3 ].nat || PSR.ed);// defer exception if spec<br />

if (check && alat_cmp(FLOAT, f 1)) { // no load on ldf.c & ALAT hit<br />

if (check_clear) // remove entry on ldf.c.clr<br />

alat_inval_single_entry(FLOAT, f 1 );<br />

} else {<br />

if (!defer) {<br />

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

&defer);<br />

spontaneous_deferral(paddr, size, UM.be, mattr, UNORDERED,<br />

ldhint, &defer);<br />

if (!defer)<br />

val = mem_read(paddr, size, UM.be, mattr, UNORDERED, ldhint);<br />

}<br />

if (check_clear || advanced) // remove any old ALAT entry<br />

alat_inval_single_entry(FLOAT, f 1 );<br />

if (speculative && defer) {<br />

FR[f 1 ] = NATVAL;<br />

} else if (advanced && !speculative && defer) {<br />

FR[f 1 ] = (integer_form ? FP_INT_ZERO : FP_ZERO);<br />

} else { // execute load normally<br />

FR[f 1 ] = fp_mem_to_fr_format(val, size, integer_form);<br />

}<br />

}<br />

if ((check_no_clear || advanced) && ma_is_speculative(mattr))<br />

// add entry to ALAT<br />

alat_write(FLOAT, f 1 , paddr, size);<br />

if (imm_base_update_form) { // update base register<br />

GR[r 3 ] = GR[r 3 ] + sign_ext(imm 9 , 9);<br />

GR[r 3 ].nat = GR[r 3 ].nat;<br />

} else if (reg_base_update_form) {<br />

GR[r 3 ] = GR[r 3 ] + GR[r 2 ];<br />

GR[r 3].nat = GR[r 3].nat || GR[r 2].nat;<br />

}<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!