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.

スタティ ック ・ レジスタとローテー ト ・ レジスタを 1 つずつ指定するのは、 CFM.rrb.fr<br />

の値が予測可能な値 (0 など ) になる と きに限られる。<br />

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

size = single_form ? 8 : 16;<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 (fp_reg_bank_conflict(f1, f2))<br />

illegal_operation_fault();<br />

if (base_update_form)<br />

check_target_register(r 3 );<br />

fp_check_target_register(f 1 );<br />

fp_check_target_register(f 2 );<br />

if (tmp_isrcode = fp_reg_disabled(f 1, f 2, 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 ldfp.c & ALAT hit<br />

if (check_clear) // remove entry on ldfp.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 />

mem_read_pair(&f1_val, &f2_val, paddr, size, UM.be,<br />

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 />

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

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

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

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

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

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

FR[f 2 ] = fp_mem_to_fr_format(f2_val, size/2, integer_form);<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 />

3:144 第 3 巻 : 命令リファレンス<br />

ldfp

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!