24531904_j

24531904_j 24531904_j

16.02.2013 Aufrufe

fpack ─ 浮動小数点パック (Floating-point Pack) fpack 書式 : (qp) fpack f 1 = f 2 , f 3 pack_form F9 説明 : FR f2 およびFR f3 に格納 さ れてい る レ ジ ス タ形式の 2 つの数値が単精度の メ モ リ 形式に 変換 さ れる。 こ れ ら 2 つの単精度数値が連結 さ れ、 FR f1 の仮数フ ィ ール ド に格納され る。 FR f1 の指数フ ィ ール ド は 2.063 (0x1003E) のバイアス付き指数に設定され、 FR f1 の 符号フ ィ ー ル ド は正に対応す る 0 に設定される。 FR f2 か FR f3 が NaTVal である場合は、 FR f1 は計算結果ではな く NaTVal に設定される。 図 2-14. 浮動小数点パック 操作 : if (PR[qp]) { fp_check_target_register(f 1 ); if (tmp_isrcode = fp_reg_disabled(f 1 , f 2 , f 3 , 0)) disabled_fp_register_fault(tmp_isrcode, 0); } FP 例外 : なし。 FR f 2 81 80 64 63 0 81 80 64 63 0 FR f 1 82 ビットの FR から単精度メモリ形式への変換 81 80 64 63 32 31 0 0 1003E if (fp_is_natval(FR[f 2 ]) || fp_is_natval(FR[f 3 ])) { FR[f 1] = NATVAL; } else { tmp_res_hi = fp_single(FR[f 2 ]); tmp_res_lo = fp_single(FR[f 3]); FR[f1 ].significand = fp_concatenate(tmp_res_hi, tmp_res_lo); FR[f1].exponent = FP_INTEGER_EXP; FR[f1 ].sign = FP_SIGN_POSITIVE; } fp_update_psr(f1); 割り込み : 無効操作フ ォ ル ト 浮動小数点レ ジ ス タ無効フ ォ ル ト 3:86 第 3 巻 : 命令リファレンス FR f 3

fpamax fpamax ─ 浮動小数点並列最大絶対値 (Floating-point Parallel Absolute Maximum) 書式 : (qp) fpamax.sf f 1 = f 2 , f 3 F8 説明 : FR f2 およびFR f3 の両仮数フ ィ ー ル ド に格納 さ れてい る単精度値のペアを それぞれ比較 し、 絶対値が大きい方のオペラン ド が FR f1 の仮数フ ィ ール ド に返される。 FR f3 の上 ( 下 ) 位の絶対値が FR f2 の上 ( 下 ) 位の絶対値よ り も 小 さ い場合は、 FR f1 の 上 ( 下 ) 位には FR f2 の上 ( 下 ) 位が格納 さ れる。 そ う でない場合は、 FR f1 の上 ( 下 ) 位 には FR f3 の上 ( 下 ) 位が格納される。 FR f2 の上 ( 下 ) 位または FR f3 の上 ( 下 ) 位が NaN であって、 かつ FR f2 も FR f3 も NaTVal でない場合は、 FR f1 の上 ( 下 ) 位には FR f3 の上 ( 下 ) 位が格納される。 FR f1 の指数フ ィ ール ド は 2.063 (0x1003E) のバイアス付き指数に設定 さ れ、 FR f1 の符号 フィールドは正に対応する0 に設定される。 FR f2 か FR f3 が NaTVal である場合は、 FR f1 は計算結果ではな く NaTVal に設定される。 こ の操作は、 他の浮動小数点算術演算命令 と は異な り 、 NaN を伝播させない。 fcmp.lt 操作の場合 と 同じ方法で無効操作 (Invalid Operation) が通知される。 sf のニーモニ ッ ク値は、 3:50 ページの表 2-23 に示している。 操作 : if (PR[qp]) { fp_check_target_register(f 1 ); if (tmp_isrcode = fp_reg_disabled(f 1 , f 2 , f 3 , 0)) disabled_fp_register_fault(tmp_isrcode, 0); } if (fp_is_natval(FR[f 2 ]) || fp_is_natval(FR[f 3 ])) { FR[f 1] = NATVAL; } else { fpminmax_exception_fault_check(f 2 , f 3 , sf, &tmp_fp_env); if (fp_raise_fault(tmp_fp_env)) fp_exception_fault(fp_decode_fault(tmp_fp_env)); tmp_fr2 = tmp_right = fp_reg_read_hi(f 2); tmp_fr3 = tmp_left = fp_reg_read_hi(f 3 ); tmp_right.sign = FP_SIGN_POSITIVE; tmp_left.sign = FP_SIGN_POSITIVE; tmp_bool_res = fp_less_than(tmp_left, tmp_right); tmp_res_hi = fp_single(tmp_bool_res ? tmp_fr2: tmp_fr3); tmp_fr2 = tmp_right = fp_reg_read_lo(f 2 ); tmp_fr3 = tmp_left = fp_reg_read_lo(f 3 ); tmp_right.sign = FP_SIGN_POSITIVE; tmp_left.sign = FP_SIGN_POSITIVE; tmp_bool_res = fp_less_than(tmp_left, tmp_right); tmp_res_lo = fp_single(tmp_bool_res ? tmp_fr2: tmp_fr3); 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; fp_update_fpsr(sf, tmp_fp_env); } fp_update_psr(f1 ); 第 3 巻 : 命令リファレンス 3:87

fpamax<br />

fpamax ─ 浮動小数点並列最大絶対値<br />

(Floating-point Parallel Absolute Maximum)<br />

書式 : (qp) fpamax.sf f 1 = f 2 , f 3 F8<br />

説明 : FR f2 およびFR f3 の両仮数フ ィ ー ル ド に格納 さ れてい る単精度値のペアを それぞれ比較<br />

し、 絶対値が大きい方のオペラン ド が FR f1 の仮数フ ィ ール ド に返される。<br />

FR f3 の上 ( 下 ) 位の絶対値が FR f2 の上 ( 下 ) 位の絶対値よ り も 小 さ い場合は、 FR f1 の<br />

上 ( 下 ) 位には FR f2 の上 ( 下 ) 位が格納 さ れる。 そ う でない場合は、 FR f1 の上 ( 下 ) 位<br />

には FR f3 の上 ( 下 ) 位が格納される。<br />

FR f2 の上 ( 下 ) 位または FR f3 の上 ( 下 ) 位が NaN であって、 かつ FR f2 も FR f3 も<br />

NaTVal でない場合は、 FR f1 の上 ( 下 ) 位には FR f3 の上 ( 下 ) 位が格納される。<br />

FR f1 の指数フ ィ ール ド は 2.063 (0x1003E) のバイアス付き指数に設定 さ れ、 FR f1 の符号<br />

フィールドは正に対応する0 に設定される。<br />

FR f2 か FR f3 が NaTVal である場合は、 FR f1 は計算結果ではな く NaTVal に設定される。<br />

こ の操作は、 他の浮動小数点算術演算命令 と は異な り 、 NaN を伝播させない。 fcmp.lt<br />

操作の場合 と 同じ方法で無効操作 (Invalid Operation) が通知される。<br />

sf のニーモニ ッ ク値は、 3:50 ページの表 2-23 に示している。<br />

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

fp_check_target_register(f 1 );<br />

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

disabled_fp_register_fault(tmp_isrcode, 0);<br />

}<br />

if (fp_is_natval(FR[f 2 ]) || fp_is_natval(FR[f 3 ])) {<br />

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

} else {<br />

fpminmax_exception_fault_check(f 2 , f 3 , sf, &tmp_fp_env);<br />

if (fp_raise_fault(tmp_fp_env))<br />

fp_exception_fault(fp_decode_fault(tmp_fp_env));<br />

tmp_fr2 = tmp_right = fp_reg_read_hi(f 2);<br />

tmp_fr3 = tmp_left = fp_reg_read_hi(f 3 );<br />

tmp_right.sign = FP_SIGN_POSITIVE;<br />

tmp_left.sign = FP_SIGN_POSITIVE;<br />

tmp_bool_res = fp_less_than(tmp_left, tmp_right);<br />

tmp_res_hi = fp_single(tmp_bool_res ? tmp_fr2: tmp_fr3);<br />

tmp_fr2 = tmp_right = fp_reg_read_lo(f 2 );<br />

tmp_fr3 = tmp_left = fp_reg_read_lo(f 3 );<br />

tmp_right.sign = FP_SIGN_POSITIVE;<br />

tmp_left.sign = FP_SIGN_POSITIVE;<br />

tmp_bool_res = fp_less_than(tmp_left, tmp_right);<br />

tmp_res_lo = fp_single(tmp_bool_res ? tmp_fr2: tmp_fr3);<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 />

fp_update_fpsr(sf, tmp_fp_env);<br />

}<br />

fp_update_psr(f1 );<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!