24531904_j
24531904_j 24531904_j
スタティ ック ・ レジスタとローテー ト ・ レジスタを 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
- Seite 105 und 106: fpcmp FP 例外 : 無効操作 (Inv
- Seite 107 und 108: fpcvt.fx } } } tmp_res.significand
- Seite 109 und 110: fpma } } fp_update_fpsr(sf, tmp_fp_
- Seite 111 und 112: fpmerge fpmerge ─ 浮動小数点
- Seite 113 und 114: fpmin fpmin ─ 浮動小数点並
- Seite 115 und 116: fpms fpms ─ 浮動小数点並列
- Seite 117 und 118: fpneg fpneg ─ 浮動小数点並
- Seite 119 und 120: fpnma fpnma ─ 浮動小数点並
- Seite 121 und 122: fpnmpy fpnmpy ─ 浮動小数点
- Seite 123 und 124: fprcpa } else if (fp_is_zero(num) &
- Seite 125 und 126: fprsqrta } tmp_pred_hi = 0; else tm
- Seite 127 und 128: frcpa } fp_update_fpsr(sf, tmp_fp_e
- Seite 129 und 130: frsqrta } PR[p 2 ] = 0; // fp_ieee_
- Seite 131 und 132: fsetc fsetc ─ 浮動小数点コ
- Seite 133 und 134: fswap fswap ─ 浮動小数点ス
- Seite 135 und 136: fsxt fsxt ─ 浮動小数点符号
- Seite 137 und 138: fxor fxor ─ 浮動小数点排他
- Seite 139 und 140: getf } GR[r 1 ] = FR[f 2 ].signific
- Seite 141 und 142: invala invala ─ ALAT の無効化
- Seite 143 und 144: itc 割り込み : マシン ・
- Seite 145 und 146: itr シリアル化 : instruction_f
- Seite 147 und 148: ld 表 2-33. ロード・タイプ(
- Seite 149 und 150: ld if (check && alat_cmp(GENERAL, r
- Seite 151 und 152: ldf ldf ─ 浮動小数点ロー
- Seite 153 und 154: ldf ldfe でのみ発生する。
- Seite 155: ldfp ldfp ─ 浮動小数点ペア
- Seite 159 und 160: lfetch 表 2-38. lfhint のニー
- Seite 161 und 162: loadrs loadrs ─ レジスタ・
- Seite 163 und 164: mix mix ─ ミックス (Mix) 書
- Seite 165 und 166: mix 操作 : if (PR[qp]) { check_ta
- Seite 167 und 168: mov ar 操作 : if (PR[qp]) { tmp_t
- Seite 169 und 170: mov cr mov ─ コントロール
- Seite 171 und 172: mov fr mov ─ 浮動小数点レ
- Seite 173 und 174: mov imm mov ─ 即値の移動 (Mo
- Seite 175 und 176: mov indirect 操作 : if (PR[qp]) {
- Seite 177 und 178: mov ip mov ─ 命令ポインタ
- Seite 179 und 180: mov psr mov ─ プロセッサ・
- Seite 181 und 182: movl movl ─ ロング型即値の
- Seite 183 und 184: mux 図 2-27. Mux2 の例 (16 ビ
- Seite 185 und 186: nop nop ─ ノー・オペレー
- Seite 187 und 188: pack pack ─ パック (Pack) 書
- Seite 189 und 190: padd padd ─ 並列加算 (Paralle
- Seite 191 und 192: padd } 割り込み : 無効操作
- Seite 193 und 194: pavg 図 2-31. 並列平均での
- Seite 195 und 196: pavgsub pavgsub ─ 並列平均減
- Seite 197 und 198: pcmp pcmp ─ 並列比較 (Paralle
- Seite 199 und 200: pmax pmax ─ 並列最大値 (Para
- Seite 201 und 202: pmpy pmpy ─ 並列乗算 (Paralle
- Seite 203 und 204: pmpyshr 操作 : if (PR[qp]) { chec
- Seite 205 und 206: probe probe ─ アクセスのプ
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