24531904_j

24531904_j 24531904_j

16.02.2013 Aufrufe

pavg ─ 並列平均 (Parallel Average) 書式 : (qp) pavg1r 1 = r 2 , r 3 normal_form, one_byte_form A9 (qp) pavg1.raz r 1 = r 2 , r 3 raz_form, one_byte_form A9 (qp) pavg2r 1 = r 2 , r 3 normal_form, two_byte_form A9 (qp) pavg2.raz r 1 = r 2 , r 3 raz_form, two_byte_form A9 説明 : GR r2 の符号なしの各デー タ要素が GR r3 の対応する符号なしデー タ要素に加算され、 次 に こ の加算結果がそれぞれ独立に右に 1 ビ ッ ト だけ シ フ ト さ れる。 各要素の最上位ビ ッ ト に は加算のキ ャ リ ー ・ ビ ッ ト が埋め ら れる。 丸め誤差を累積 さ せないために、 平均操 作が行われる。 符号なしの結果が GR r1 に格納される。 平均操作は次の と お り であ る。 normal_form では、 対応す る加算結果の最下位 2 ビッ トの 少な く と も いずれかが 1 の場合、 それぞれの加算結果の最下位ビ ッ ト が 1 に設定される。 raz_form ( ゼロか ら離れる方向の丸め形式 ) では、 それぞれの加算結果に 1 を加算して、 平均がゼ ロ か ら 丸め ら れる。 図 2-30. 並列平均の例 GR r 3 : GR r 2 : 16 ビットの和 + キャリー 1 ビット 右シフト GR r 1 : + + pavg2 + 3:180 第 3 巻 : 命令リファレンス + キャリー・ ビット 最下位ビットを平均して 1 ビット右シフト 和ビット or pavg

pavg 図 2-31. 並列平均でのゼロから離れる方向の丸めの例 GR r 3 : GR r 2 : 16 ビットの和 + キャリー 1 ビット 右シフト GR r 1 : 操作 : if (PR[qp]) { check_target_register(r 1); + 1 1 1 1 + if (one_byte_form) { x[0] = GR[r 2]{7:0}; y[0] = GR[r 3]{7:0}; x[1] = GR[r 2 ]{15:8}; y[1] = GR[r 3 ]{15:8}; x[2] = GR[r 2 ]{23:16}; y[2] = GR[r 3 ]{23:16}; x[3] = GR[r 2]{31:24}; y[3] = GR[r 3]{31:24}; x[4] = GR[r 2 ]{39:32}; y[4] = GR[r 3 ]{39:32}; x[5] = GR[r 2 ]{47:40}; y[5] = GR[r 3 ]{47:40}; x[6] = GR[r 2]{55:48}; y[6] = GR[r 3]{55:48}; x[7] = GR[r 2 ]{63:56}; y[7] = GR[r 3 ]{63:56}; + pavg2.raz if (raz_form) { for (i = 0; i < 8; i++) { temp[i] = zero_ext(x[i], 8) + zero_ext(y[i], 8) + 1; res[i] = shift_right_unsigned(temp[i], 1); } } else { // normal form for (i = 0; i < 8; i++) { temp[i] = zero_ext(x[i], 8) + zero_ext(y[i], 8); res[i] = shift_right_unsigned(temp[i], 1) | (temp[i]{0}); } } GR[r 1 ] = concatenate8(res[7], res[6], res[5], res[4], res[3], res[2], res[1], res[0]); } else { // two_byte_form x[0] = GR[r 2 ]{15:0}; y[0] = GR[r 3 ]{15:0}; x[1] = GR[r 2 ]{31:16}; y[1] = GR[r 3 ]{31:16}; x[2] = GR[r 2 ]{47:32}; y[2] = GR[r 3 ]{47:32}; x[3] = GR[r 2 ]{63:48}; y[3] = GR[r 3 ]{63:48}; if (raz_form) { for (i = 0; i < 4; i++) { temp[i] = zero_ext(x[i], 16) + zero_ext(y[i], 16) + 1; 第 3 巻 : 命令リファレンス 3:181 + キャリー・ ビット 1 ビット右シフト 和ビット

pavg ─ 並列平均 (Parallel Average)<br />

書式 : (qp) pavg1r 1 = r 2 , r 3 normal_form, one_byte_form A9<br />

(qp) pavg1.raz r 1 = r 2 , r 3 raz_form, one_byte_form A9<br />

(qp) pavg2r 1 = r 2 , r 3 normal_form, two_byte_form A9<br />

(qp) pavg2.raz r 1 = r 2 , r 3 raz_form, two_byte_form A9<br />

説明 : GR r2 の符号なしの各デー タ要素が GR r3 の対応する符号なしデー タ要素に加算され、 次<br />

に こ の加算結果がそれぞれ独立に右に 1 ビ ッ ト だけ シ フ ト さ れる。 各要素の最上位ビ ッ<br />

ト に は加算のキ ャ リ ー ・ ビ ッ ト が埋め ら れる。 丸め誤差を累積 さ せないために、 平均操<br />

作が行われる。 符号なしの結果が GR r1 に格納される。<br />

平均操作は次の と お り であ る。 normal_form では、 対応す る加算結果の最下位 2 ビッ トの<br />

少な く と も いずれかが 1 の場合、 それぞれの加算結果の最下位ビ ッ ト が 1 に設定される。<br />

raz_form ( ゼロか ら離れる方向の丸め形式 ) では、 それぞれの加算結果に 1 を加算して、<br />

平均がゼ ロ か ら 丸め ら れる。<br />

図 2-30. 並列平均の例<br />

GR r 3 :<br />

GR r 2 :<br />

16 ビットの和<br />

+<br />

キャリー<br />

1 ビット<br />

右シフト<br />

GR r 1 :<br />

+<br />

+<br />

pavg2<br />

+<br />

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

+<br />

キャリー・<br />

ビット<br />

最下位ビットを平均して<br />

1 ビット右シフト<br />

和ビット<br />

or<br />

pavg

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!