24531904_j
24531904_j 24531904_j
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 ビット右シフト 和ビット
- 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 ─ 浮動小数点レ
- 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: padd } 割り込み : 無効操作
- 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 ─ アクセスのプ
- Seite 207 und 208: psad psad ─ 並列絶対差累計
- Seite 209 und 210: pshladd pshladd ─ 並列左シフ
- Seite 211 und 212: pshr } 割り込み : 無効操作
- Seite 213 und 214: psub psub ─ 並列減算 (Paralle
- Seite 215 und 216: psub } 割り込み : 無効操作
- Seite 217 und 218: ptc.g, ptc.ga ptc.g, ptc.ga ─ グ
- Seite 219 und 220: ptc.l ptc.l ─ ローカル・ト
- Seite 221 und 222: ptr 割り込み : 特権操作フ
- Seite 223 und 224: fi この命令を発行する前
- Seite 225 und 226: sm rsm ─ システム・マスク
- Seite 227 und 228: um rum ─ ユーザ・マスクの
- Seite 229 und 230: setf 操作 : if (PR[qp]) { fp_chec
- Seite 231 und 232: shladd shladd ─ 左シフトお
- Seite 233 und 234: shr shr ─ 右シフト (Shift Rig
- Seite 235 und 236: srlz srlz ─ シリアル化 (Seri
- Seite 237 und 238: st st ─ ストア (Store) 書式
- Seite 239 und 240: stf stf ─ 浮動小数点スト
- Seite 241 und 242: sub sub ─ 減算 (Subtract) 書
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