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 ─ ビット・テスト (Test Bit)<br />

書式 : (qp) tbit.trel.ctype p 1 , p 2 = r 3 , pos 6 I16<br />

説明 : 即値 pos6 で指定される ビ ッ ト が GR r3 か ら 選択 さ れる。 選択 さ れたビ ッ ト は、 trel コン<br />

プリータに応じて補数を取られるかそのままで、 単一ビッ トの結果を形成する。 この結<br />

果は、 2 つのプレディケート ・レジスタ・デスティネーションp1 と p2 に書き込まれる。<br />

結果がデスティネーションにどのように書き込まれるかは、 ctype で指定される比較タ イ<br />

プによ って決まる。 Compare 命令 と 3:34 ページの表 2-15 を参照のこ と。<br />

trel コンプリータの値.nz および .z は、 それぞれ、 非ゼ ロ判定かゼ ロ判定かを示す。 通常<br />

タイプと unc タイプの比較では、 .z の値だけがハー ド ウ ェアに よ って直接サポ ー ト され<br />

ている。 つま り、 .nz 値は、 実際には擬似オペコ ー ド である。 .nz 値では、 アセンブラは<br />

単にプ レ デ ィ ケ ー ト ・ タ ー ゲ ッ ト 指定子を切 り 換え、 サポ ー ト さ れてい る関係を利用す<br />

る。 並列タイプは、 両方の関係がハー ド ウ ェアでサポー ト されている。<br />

表 2-52. 通常および unc タイプのビット判定での関係<br />

trel 判定関係 擬似オペコード<br />

nz 選択されたビット == 1 z p1 ↔ p2 z 選択されたビット == 0<br />

表 2-53. 並列タイプのビット判定での関係<br />

trel 判定関係<br />

nz 選択されたビット == 1<br />

z 選択されたビット == 0<br />

2 つのプレデ ィ ケー ト レジスタ ・ デステ ィ ネーシ ョ ンが同じ (p 1 と p 2 が同一のプレデ ィ<br />

ケー ト ・ レジスタを指定) 場合は、 修飾プ レ デ ィ ケ ー ト がセ ッ ト さ れてい る か、 比較タ<br />

イプが unc であれば、 こ の命令は無効操作 (Illegal Operation) フォルトを発生する。<br />

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

if (p1 == p2)<br />

illegal_operation_fault();<br />

if (trel == ‘nz’) // ‘nz’ - test for 1<br />

tmp_rel = GR[r 3 ]{pos 6 };<br />

else // ‘z’ - test for 0<br />

tmp_rel = !GR[r 3 ]{pos 6 };<br />

switch (ctype) {<br />

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

if (GR[r 3 ].nat || !tmp_rel) {<br />

PR[p 1 ] = 0;<br />

PR[p 2 ] = 0;<br />

}<br />

break;<br />

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

if (!GR[r 3 ].nat && tmp_rel) {<br />

PR[p 1 ] = 1;<br />

PR[p 2 ] = 1;<br />

}<br />

break;<br />

case ‘or.andcm’: // or.andcm-type compare<br />

if (!GR[r 3 ].nat && tmp_rel) {<br />

PR[p 1] = 1;<br />

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

tbit

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!