24531904_j

24531904_j 24531904_j

16.02.2013 Aufrufe

スタティ ック ・ レジスタとローテー ト ・ レジスタを 1 つずつ指定するのは、 CFM.rrb.fr の値が予測可能な値 (0 など ) になる と きに限られる。 操作 : if (PR[qp]) { size = single_form ? 8 : 16; speculative = (fldtype == ‘s’ || fldtype == ‘sa’); advanced = (fldtype == ‘a’ || fldtype == ‘sa’); check_clear = (fldtype == ‘c.clr’); check_no_clear = (fldtype == ‘c.nc’); check = check_clear || check_no_clear; itype = READ; if (speculative) itype |= SPEC; if (advanced) itype |= ADVANCE; if (fp_reg_bank_conflict(f1, f2)) illegal_operation_fault(); if (base_update_form) check_target_register(r 3 ); fp_check_target_register(f 1 ); fp_check_target_register(f 2 ); if (tmp_isrcode = fp_reg_disabled(f 1, f 2, 0, 0)) disabled_fp_register_fault(tmp_isrcode, itype); if (!speculative && GR[r 3].nat) // fault on NaT address register_nat_consumption_fault(itype); defer = speculative && (GR[r 3].nat || PSR.ed);// defer exception if spec if (check && alat_cmp(FLOAT, f 1 )) { // no load on ldfp.c & ALAT hit if (check_clear) // remove entry on ldfp.c.clr alat_inval_single_entry(FLOAT, f 1 ); } else { if (!defer) { paddr = tlb_translate(GR[r 3 ], size, itype, PSR.cpl, &mattr, &defer); spontaneous_deferral(paddr, size, UM.be, mattr, UNORDERED, ldhint, &defer); if (!defer) mem_read_pair(&f1_val, &f2_val, paddr, size, UM.be, mattr, UNORDERED, ldhint); } if (check_clear || advanced) // remove any old ALAT entry alat_inval_single_entry(FLOAT, f 1 ); if (speculative && defer) { FR[f 1 ] = NATVAL; FR[f 2 ] = NATVAL; } else if (advanced && !speculative && defer) { FR[f 1 ] = (integer_form ? FP_INT_ZERO : FP_ZERO); FR[f 2 ] = (integer_form ? FP_INT_ZERO : FP_ZERO); } else { // execute load normally FR[f 1 ] = fp_mem_to_fr_format(f1_val, size/2, integer_form); FR[f 2 ] = fp_mem_to_fr_format(f2_val, size/2, integer_form); } if ((check_no_clear || advanced) && ma_is_speculative(mattr)) // add entry to ALAT alat_write(FLOAT, f 1, paddr, size); 3:144 第 3 巻 : 命令リファレンス ldfp

ldfp } } if (base_update_form) { // update base register GR[r 3 ] = GR[r 3 ] + size; GR[r 3].nat = GR[r 3].nat; if (!GR[r 3 ].nat) mem_implicit_prefetch(GR[r 3 ], ldhint, itype); } fp_update_psr(f 1 ); fp_update_psr(f 2 ); 割り込み : 無効操作フ ォ ル ト デー タ ・ ペー ジ不在フ ォ ル ト 浮動小数点レ ジ ス タ無効フ ォ ル ト デー タ NaT ページ参照フォル ト レジスタ NaT 参照フォルト データ・キー・ ミス・フォルト 実装されていないデータ ・アドレス ・ フォルト データ ・キー許可フォルト データがネス ト された TLB フォルト データ・アクセス権フォルト 別のデー タ TLB フォルト データ・アクセス・ビット ・フォルト VHPT データ ・ フォル ト データ ・ デバッグ ・ フォル ト データ TLB フ ォル ト アライ メン ト の合っていないデー タ参照 フォルト 第 3 巻 : 命令リファレンス 3:145

ldfp<br />

}<br />

}<br />

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

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

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

if (!GR[r 3 ].nat)<br />

mem_implicit_prefetch(GR[r 3 ], ldhint, itype);<br />

}<br />

fp_update_psr(f 1 );<br />

fp_update_psr(f 2 );<br />

割り込み : 無効操作フ ォ ル ト デー タ ・ ペー ジ不在フ ォ ル ト<br />

浮動小数点レ ジ ス タ無効フ ォ ル ト デー タ NaT ページ参照フォル ト<br />

レジスタ NaT 参照フォルト データ・キー・ ミス・フォルト<br />

実装されていないデータ ・アドレス ・ フォルト データ ・キー許可フォルト<br />

データがネス ト された TLB フォルト データ・アクセス権フォルト<br />

別のデー タ TLB フォルト データ・アクセス・ビット ・フォルト<br />

VHPT データ ・ フォル ト データ ・ デバッグ ・ フォル ト<br />

データ TLB フ ォル ト アライ メン ト の合っていないデー タ参照<br />

フォルト<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!