24531904_j

24531904_j 24531904_j

16.02.2013 Aufrufe

otate_regs(); } else { AR[LC] = AR[LC]; AR[EC] = AR[EC]; PR[63] = 0; CFM.rrb.gr = CFM.rrb.gr; CFM.rrb.fr = CFM.rrb.fr; CFM.rrb.pr = CFM.rrb.pr; } break; case ‘wtop’: case ‘wexit’: // SW pipelined while loop if (slot != 2) illegal_operation_fault(); if (btype == ‘wtop’) tmp_taken = (PR[qp] || (AR[EC] u> 1)); if (btype == ‘wexit’)tmp_taken = !(PR[qp] || (AR[EC] u> 1)); if (PR[qp]) { AR[EC] = AR[EC]; PR[63] = 0; rotate_regs(); } else if (AR[EC] != 0) { AR[EC]--; PR[63] = 0; rotate_regs(); } else { AR[EC] = AR[EC]; PR[63] = 0; CFM.rrb.gr = CFM.rrb.gr; CFM.rrb.fr = CFM.rrb.fr; CFM.rrb.pr = CFM.rrb.pr; } break; } if (tmp_taken) { taken_branch = 1; IP = tmp_IP; // set the new value for IP if ((PSR.it && unimplemented_virtual_address(tmp_IP)) || (!PSR.it && unimplemented_physical_address(tmp_IP))) unimplemented_instruction_address_trap(lower_priv_transition, tmp_IP); if (lower_priv_transition && PSR.lp) lower_privilege_transfer_trap(); if (PSR.tb) taken_branch_trap(); } 割り込み : 無効操作フ ォ ル ト 下位特権遷移 ト ラ ッ プ 命令セ ッ ト 移行無効フ ォ ル ト 分岐発生 ト ラ ッ プ 実装 さ れていない命令ア ド レ ス ・ ト ラ ッ プ 分岐先の IA-32 命令での追加フ ォ ル ト : IA-32_Exception(GPFault) 浮動小数点レ ジ ス タ無効フ ォ ル ト (PSR.dfh が 1 の場合 ) 3:24 第 3 巻 : 命令リファレンス br

eak break ─ ブレーク (Break) 書式 : (qp) break imm 21 擬似オペ コ ー ド (qp) break.i imm 21 i_unit_form I19 (qp) break.b imm 21 b_unit_form B9 (qp) break.m imm 21 m_unit_form M37 (qp) break.f imm 21 f_unit_form F15 (qp) break.x imm 62 x_unit_form X1 説明 : Break Instruction ( ブレーク命令) フォルトが発生する。 i_unit_form、 f_unit_form、 m_unit_form では、 imm21 で指定 される値がゼ ロ拡張 さ れ、 割 り 込み即値 (Interruption Immediate: IIM) コントロール・ レジスタに格納される。 b_unit_form では、 imm21 が無視され、 値 0 が IIM コント ロール・ レジスタに格納される。 x_unit_form では、 imm62 で指定される値の下位 21 ビットがゼロ拡張され、 IIM コント ロール・ レジスタに格納される。 バンドルのL スロッ ト に imm62 の上位 41 ビットが入 る。 break.i 命令は、 MLI テンプレー ト ・ バンドル内にエンコー ドできる。 この場合は、 そ のバン ド ルの L スロッ トは無視される。 この命令には 5 つの形式があ る が、 各形式は、 それぞれ特定の タ イ プの実行ユニ ッ ト に 対してのみ実行で き る。 実行するユニ ッ ト の タ イ プが重要でない場合は、 擬似オペ コ ー ドを使用してよい。 操作 : if (PR[qp]) { if (b_unit_form) immediate = 0; else if (x_unit_form) immediate = zero_ext(imm 62 , 21); else // i_unit_form || m_unit_form || f_unit_form immediate = zero_ext(imm 21, 21); } 割り込み : ブレーク命令フォルト break_instruction_fault(immediate); 第 3 巻 : 命令リファレンス 3:25

otate_regs();<br />

} else {<br />

AR[LC] = AR[LC];<br />

AR[EC] = AR[EC];<br />

PR[63] = 0;<br />

CFM.rrb.gr = CFM.rrb.gr;<br />

CFM.rrb.fr = CFM.rrb.fr;<br />

CFM.rrb.pr = CFM.rrb.pr;<br />

}<br />

break;<br />

case ‘wtop’:<br />

case ‘wexit’: // SW pipelined while loop<br />

if (slot != 2)<br />

illegal_operation_fault();<br />

if (btype == ‘wtop’) tmp_taken = (PR[qp] || (AR[EC] u> 1));<br />

if (btype == ‘wexit’)tmp_taken = !(PR[qp] || (AR[EC] u> 1));<br />

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

AR[EC] = AR[EC];<br />

PR[63] = 0;<br />

rotate_regs();<br />

} else if (AR[EC] != 0) {<br />

AR[EC]--;<br />

PR[63] = 0;<br />

rotate_regs();<br />

} else {<br />

AR[EC] = AR[EC];<br />

PR[63] = 0;<br />

CFM.rrb.gr = CFM.rrb.gr;<br />

CFM.rrb.fr = CFM.rrb.fr;<br />

CFM.rrb.pr = CFM.rrb.pr;<br />

}<br />

break;<br />

}<br />

if (tmp_taken) {<br />

taken_branch = 1;<br />

IP = tmp_IP; // set the new value for IP<br />

if ((PSR.it && unimplemented_virtual_address(tmp_IP))<br />

|| (!PSR.it && unimplemented_physical_address(tmp_IP)))<br />

unimplemented_instruction_address_trap(lower_priv_transition,<br />

tmp_IP);<br />

if (lower_priv_transition && PSR.lp)<br />

lower_privilege_transfer_trap();<br />

if (PSR.tb)<br />

taken_branch_trap();<br />

}<br />

割り込み : 無効操作フ ォ ル ト 下位特権遷移 ト ラ ッ プ<br />

命令セ ッ ト 移行無効フ ォ ル ト 分岐発生 ト ラ ッ プ<br />

実装 さ れていない命令ア ド レ ス ・ ト ラ ッ プ<br />

分岐先の IA-32 命令での追加フ ォ ル ト :<br />

IA-32_Exception(GPFault)<br />

浮動小数点レ ジ ス タ無効フ ォ ル ト (PSR.dfh が 1 の場合 )<br />

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

br

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!