24531904_j
24531904_j 24531904_j
fprcpa ─ 浮動小数点並列逆数近似 (Floating-point Parallel Reciprocal Approximation) fprcpa 書式 : (qp) fprcpa.sf f 1 ,p 2 = f 2 , f 3 F6 説明 : PR qp が 0 の場合、 RP p2 がク リアされる。 FR f1 はそのま ま変わらない。 PR qp が 1 の場合、 以下が行われる。 • FR f1 の仮数の上下各半分が、 FR f3 の対応する半分の逆数の近似値 ( 相対誤差
fprcpa } else if (fp_is_zero(num) && fp_is_finite(den)) { tmp_res = FP_ZERO; tmp_res.sign = num.sign ^ den.sign; tmp_pred_hi = 0; } else { tmp_res = fp_ieee_recip(den); if (limits_check.hi_fr2_or_quot) tmp_pred_hi = 0; else tmp_pred_hi = 1; } tmp_res_hi = fp_single(tmp_res); } if (fp_is_nan_or_inf(tmp_default_result_pair.lo) || limits_check.lo_fr3) { tmp_res_lo = fp_single(tmp_default_result_pair.lo); tmp_pred_lo = 0; } else { num = fp_normalize(fp_reg_read_lo(f2 )); den = fp_normalize(fp_reg_read_lo(f3 )); if (fp_is_inf(num) && fp_is_finite(den)) { tmp_res = FP_INFINITY; tmp_res.sign = num.sign ^ den.sign; tmp_pred_lo = 0; } else if (fp_is_finite(num) && fp_is_inf(den)) { tmp_res = FP_ZERO; tmp_res.sign = num.sign ^ den.sign; tmp_pred_lo = 0; } else if (fp_is_zero(num) && fp_is_finite(den)) { tmp_res = FP_ZERO; tmp_res.sign = num.sign ^ den.sign; tmp_pred_lo = 0; } else { tmp_res = fp_ieee_recip(den); if (limits_check.lo_fr2_or_quot) tmp_pred_lo = 0; else tmp_pred_lo = 1; } tmp_res_lo = fp_single(tmp_res); } FR[f 1].significand = fp_concatenate(tmp_res_hi, tmp_res_lo); FR[f 1 ].exponent = FP_INTEGER_EXP; FR[f 1 ].sign = FP_SIGN_POSITIVE; PR[p 2] = tmp_pred_hi && tmp_pred_lo; fp_update_fpsr(sf, tmp_fp_env); } fp_update_psr(f1 ); } else { PR[p2] = 0; } FP 例外 : 無効操作 (Invalid Operation: V) ゼロ除算 (Zero Divide: Z) デノーマル/ アンノ ーマル ・ オペラン ド (Denormal/Unnormal Operand: D) ソフ ト ウェア・アシスト (Software Assist: SWA) フォルト 割り込み : 無効操作フ ォ ル ト 浮動小数点例外フ ォ ル ト 浮動小数点レ ジ ス タ無効フ ォ ル ト 第 3 巻 : 命令リファレンス 3:111
- Seite 71 und 72: fclrf fclrf ─ 浮動小数点フ
- Seite 73 und 74: fcmp 操作 : if (PR[qp]) { if (p 1
- Seite 75 und 76: fcvt.fx fcvt.fx ─ 浮動小数点
- Seite 77 und 78: fcvt.xf fcvt.xf ─ 符号付き整
- Seite 79 und 80: fetchadd fetchadd ─ 即値のフ
- Seite 81 und 82: flushrs flushrs ─ レジスタ・
- Seite 83 und 84: fmax fmax ─ 浮動小数点最大
- Seite 85 und 86: fmerge 操作 : if (PR[qp]) { fp_ch
- Seite 87 und 88: fmix fmix ─ 浮動小数点ミッ
- Seite 89 und 90: fmpy fmpy ─ 浮動小数点乗算
- Seite 91 und 92: fneg fneg ─ 浮動小数点否定
- Seite 93 und 94: fnma fnma ─ 浮動小数点積和
- Seite 95 und 96: fnorm fnorm ─ 浮動小数点正
- Seite 97 und 98: fpabs fpabs ─ 浮動小数点並
- Seite 99 und 100: fpamax fpamax ─ 浮動小数点
- Seite 101 und 102: fpamin fpamin ─ 浮動小数点
- Seite 103 und 104: fpcmp fpcmp ─ 浮動小数点並
- 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: fpnmpy fpnmpy ─ 浮動小数点
- 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 und 156: ldfp ldfp ─ 浮動小数点ペア
- Seite 157 und 158: ldfp } } if (base_update_form) { //
- 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 ─ 浮動小数点レ
fprcpa<br />
} else if (fp_is_zero(num) && fp_is_finite(den)) {<br />
tmp_res = FP_ZERO;<br />
tmp_res.sign = num.sign ^ den.sign;<br />
tmp_pred_hi = 0;<br />
} else {<br />
tmp_res = fp_ieee_recip(den);<br />
if (limits_check.hi_fr2_or_quot)<br />
tmp_pred_hi = 0;<br />
else<br />
tmp_pred_hi = 1;<br />
}<br />
tmp_res_hi = fp_single(tmp_res);<br />
}<br />
if (fp_is_nan_or_inf(tmp_default_result_pair.lo) ||<br />
limits_check.lo_fr3) {<br />
tmp_res_lo = fp_single(tmp_default_result_pair.lo);<br />
tmp_pred_lo = 0;<br />
} else {<br />
num = fp_normalize(fp_reg_read_lo(f2 ));<br />
den = fp_normalize(fp_reg_read_lo(f3 ));<br />
if (fp_is_inf(num) && fp_is_finite(den)) {<br />
tmp_res = FP_INFINITY;<br />
tmp_res.sign = num.sign ^ den.sign;<br />
tmp_pred_lo = 0;<br />
} else if (fp_is_finite(num) && fp_is_inf(den)) {<br />
tmp_res = FP_ZERO;<br />
tmp_res.sign = num.sign ^ den.sign;<br />
tmp_pred_lo = 0;<br />
} else if (fp_is_zero(num) && fp_is_finite(den)) {<br />
tmp_res = FP_ZERO;<br />
tmp_res.sign = num.sign ^ den.sign;<br />
tmp_pred_lo = 0;<br />
} else {<br />
tmp_res = fp_ieee_recip(den);<br />
if (limits_check.lo_fr2_or_quot)<br />
tmp_pred_lo = 0;<br />
else<br />
tmp_pred_lo = 1;<br />
}<br />
tmp_res_lo = fp_single(tmp_res);<br />
}<br />
FR[f 1].significand = fp_concatenate(tmp_res_hi, tmp_res_lo);<br />
FR[f 1 ].exponent = FP_INTEGER_EXP;<br />
FR[f 1 ].sign = FP_SIGN_POSITIVE;<br />
PR[p 2] = tmp_pred_hi && tmp_pred_lo;<br />
fp_update_fpsr(sf, tmp_fp_env);<br />
}<br />
fp_update_psr(f1 );<br />
} else {<br />
PR[p2] = 0;<br />
}<br />
FP 例外 : 無効操作 (Invalid Operation: V)<br />
ゼロ除算 (Zero Divide: Z)<br />
デノーマル/ アンノ ーマル ・ オペラン ド (Denormal/Unnormal Operand: D)<br />
ソフ ト ウェア・アシスト (Software Assist: SWA) フォルト<br />
割り込み : 無効操作フ ォ ル ト 浮動小数点例外フ ォ ル ト<br />
浮動小数点レ ジ ス タ無効フ ォ ル ト<br />
第 3 巻 : 命令リファレンス 3:111