24531904_j

24531904_j 24531904_j

16.02.2013 Aufrufe

tbit ─ ビット・テスト (Test Bit) 書式 : (qp) tbit.trel.ctype p 1 , p 2 = r 3 , pos 6 I16 説明 : 即値 pos6 で指定される ビ ッ ト が GR r3 か ら 選択 さ れる。 選択 さ れたビ ッ ト は、 trel コン プリータに応じて補数を取られるかそのままで、 単一ビッ トの結果を形成する。 この結 果は、 2 つのプレディケート ・レジスタ・デスティネーションp1 と p2 に書き込まれる。 結果がデスティネーションにどのように書き込まれるかは、 ctype で指定される比較タ イ プによ って決まる。 Compare 命令 と 3:34 ページの表 2-15 を参照のこ と。 trel コンプリータの値.nz および .z は、 それぞれ、 非ゼ ロ判定かゼ ロ判定かを示す。 通常 タイプと unc タイプの比較では、 .z の値だけがハー ド ウ ェアに よ って直接サポ ー ト され ている。 つま り、 .nz 値は、 実際には擬似オペコ ー ド である。 .nz 値では、 アセンブラは 単にプ レ デ ィ ケ ー ト ・ タ ー ゲ ッ ト 指定子を切 り 換え、 サポ ー ト さ れてい る関係を利用す る。 並列タイプは、 両方の関係がハー ド ウ ェアでサポー ト されている。 表 2-52. 通常および unc タイプのビット判定での関係 trel 判定関係 擬似オペコード nz 選択されたビット == 1 z p1 ↔ p2 z 選択されたビット == 0 表 2-53. 並列タイプのビット判定での関係 trel 判定関係 nz 選択されたビット == 1 z 選択されたビット == 0 2 つのプレデ ィ ケー ト レジスタ ・ デステ ィ ネーシ ョ ンが同じ (p 1 と p 2 が同一のプレデ ィ ケー ト ・ レジスタを指定) 場合は、 修飾プ レ デ ィ ケ ー ト がセ ッ ト さ れてい る か、 比較タ イプが unc であれば、 こ の命令は無効操作 (Illegal Operation) フォルトを発生する。 操作 : if (PR[qp]) { if (p1 == p2) illegal_operation_fault(); if (trel == ‘nz’) // ‘nz’ - test for 1 tmp_rel = GR[r 3 ]{pos 6 }; else // ‘z’ - test for 0 tmp_rel = !GR[r 3 ]{pos 6 }; switch (ctype) { case ‘and’: // and-type compare if (GR[r 3 ].nat || !tmp_rel) { PR[p 1 ] = 0; PR[p 2 ] = 0; } break; case ‘or’: // or-type compare if (!GR[r 3 ].nat && tmp_rel) { PR[p 1 ] = 1; PR[p 2 ] = 1; } break; case ‘or.andcm’: // or.andcm-type compare if (!GR[r 3 ].nat && tmp_rel) { PR[p 1] = 1; 3:234 第 3 巻 : 命令リファレンス tbit

tbit PR[p2 ] = 0; } break; case ‘unc’: // unc-type compare default: // normal compare if (GR[r3 ].nat) { PR[p1 ] = 0; PR[p2 ] = 0; } else { PR[p1 ] = tmp_rel; PR[p2 ] = !tmp_rel; } break; } } else { if (ctype == ‘unc’) { if (p1 == p2) illegal_operation_fault(); PR[p1 ] = 0; PR[p2 ] = 0; } } 割り込み : 無効操作フ ォ ル ト 第 3 巻 : 命令リファレンス 3:235

tbit<br />

PR[p2 ] = 0;<br />

}<br />

break;<br />

case ‘unc’: // unc-type compare<br />

default: // normal compare<br />

if (GR[r3 ].nat) {<br />

PR[p1 ] = 0;<br />

PR[p2 ] = 0;<br />

} else {<br />

PR[p1 ] = tmp_rel;<br />

PR[p2 ] = !tmp_rel;<br />

}<br />

break;<br />

}<br />

} else {<br />

if (ctype == ‘unc’) {<br />

if (p1 == p2)<br />

illegal_operation_fault();<br />

PR[p1 ] = 0;<br />

PR[p2 ] = 0;<br />

}<br />

}<br />

割り込み : 無効操作フ ォ ル ト<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!