24531904_j
24531904_j 24531904_j
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
- Seite 1 und 2: インテル ® Itanium ® アー
- Seite 3 und 4: 目次 第 I 部 : インテル ®
- Seite 5: 図 3.2 インテル ® アーキ
- Seite 8 und 9: 2-37 lftype のニーモニック
- Seite 10 und 11: 第 II 部 : IA-32 命令セット
- Seite 13 und 14: 本書について 1 インテル
- Seite 15 und 16: 第 9 章「IA-32 割 り 込みベ
- Seite 17 und 18: 1.4 用語の定義 以下の定義
- Seite 19 und 20: 改訂日付 改訂番号 内容 20
- Seite 21 und 22: 命令リファレンス 2 本章
- Seite 23 und 24: add add ─ 加算 (Add) 書式 : (
- Seite 25 und 26: alloc alloc ─ スタック・フ
- Seite 27 und 28: and and ─ 論理積 (Logical And)
- Seite 29 und 30: br ─ 分岐 (Branch) 書式 : (qp
- Seite 31 und 32: ファイルをフラッシュす
- Seite 33 und 34: 図 2-4. br.wtop および br.wexit
- Seite 35: CFM.sor = 0; CFM.rrb.gr = 0; CFM.rr
- Seite 39 und 40: l 関係な く 、 無効操作フ
- Seite 41 und 42: p 操作 : tmp_tag = IP + sign_ext(
- Seite 43 und 44: chk chk ─ スペキュレーシ
- Seite 45 und 46: clrrrb clrrrb ─ RRB のクリア
- Seite 47 und 48: cmp る関係を利用する。 一
- Seite 49 und 50: cmp4 cmp4 ─ 4 バイト比較 (Co
- Seite 51 und 52: cmp4 PR[p1 ] = 0; PR[p2] = 0; } els
- Seite 53 und 54: cmpxchg ldhint コ ンプ リ ー
- Seite 55 und 56: czx czx ─ ゼロ・インデッ
- Seite 57 und 58: dep dep ─ デポジット (Deposi
- Seite 59 und 60: epc epc ─ 特権コードへの
- Seite 61 und 62: fabs fabs ─ 浮動小数点絶対
- Seite 63 und 64: famax famax ─ 浮動小数点絶
- Seite 65 und 66: fand fand ─ 浮動小数点論理
- Seite 67 und 68: fc fc ─ キャッシュのフラ
- Seite 69 und 70: fclass fclass ─ 浮動小数点
- Seite 71 und 72: fclrf fclrf ─ 浮動小数点フ
- Seite 73 und 74: fcmp 操作 : if (PR[qp]) { if (p 1
- Seite 75 und 76: fcvt.fx fcvt.fx ─ 浮動小数点
- Seite 77 und 78: fcvt.xf fcvt.xf ─ 符号付き整
- Seite 79 und 80: fetchadd fetchadd ─ 即値のフ
- Seite 81 und 82: flushrs flushrs ─ レジスタ・
- Seite 83 und 84: fmax fmax ─ 浮動小数点最大
- Seite 85 und 86: fmerge 操作 : if (PR[qp]) { fp_ch
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