16.02.2013 Aufrufe

24531904_j

24531904_j

24531904_j

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

fi<br />

この命令を発行する前に、 mf 命令を発行しなければな ら ない。 プ ロ セ ッ サは、 命令ス ト<br />

リーム内で、 Itanium 命令セ ッ ト に よ っ て生成 さ れた書き込みが、 後続の IA-32 命令か ら<br />

検出で き る こ と を保証していない。<br />

ソフ ト ウェアは、 この命令を発行する前に、 コード ・セグメント ・ディスク リプタおよ<br />

びセレ ク タがロー ド される よ う にしなければならない。 戻り先の EIP 値がコ ー ド ・ セグ<br />

メ ン ト 制限を超え る場合や、 その値に コ ー ド ・ セグ メ ン ト 特権違反があ る場合は、 戻 り<br />

先の IA-32 命令で、 IA-32_Exception(GPFault) 例外が発生す る。 16 ビットのIA-32 コード<br />

への移行では、 IIP が CSD.base の 64K バイ ト の範囲か ら 外れる場合、 戻 り 先の命令で<br />

GPFault が発生する。<br />

戻り先の IA-32 命令が正常に終了す る ま で、 EFLAG.rf と PSR.id は変更されない。 戻り先<br />

の IA-32 命令の実行が開始 さ れる前に、 PSR.da、 PSR.dd、 PSR.ia、 および PSR.ed は 0 に<br />

クリアされる。<br />

IA-32 命令セ ッ ト が実行 さ れた場合、 ALAT の内容は不定になる。 ソフトウェアは、 命令<br />

セ ッ ト の移行の前後で、 ALAT の状態に依存してはな ら ない。 IA-32 コードへの移行の際<br />

は、 ALAT 内の既存のエン ト リ は無視される。<br />

操作 : if (!followed_by_stop())<br />

illegal_operation_fault();<br />

unimplemented_address = 0;<br />

if (PSR.cpl != 0)<br />

privileged_operation_fault(0);<br />

taken_rfi = 1;<br />

PSR = CR[IPSR];<br />

if (CR[IPSR].is == 1) { //resume IA-32 instruction set<br />

tmp_IP = CR[IIP];<br />

if ((CR[IPSR].it && unimplemented_virtual_address(tmp_IP))<br />

|| (!CR[IPSR].it && unimplemented_physical_address(tmp_IP)))<br />

unimplemented_address = 1;<br />

//compute effective instruction pointer<br />

EIP{31:0} = CR[IIP]{31:0} - AR[CSD].Base;<br />

//force zero-sized restored frame<br />

rse_restore_frame(0, 0, CFM.sof);<br />

CFM.sof = 0;<br />

CFM.sol = 0;<br />

CFM.sor = 0;<br />

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

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

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

rse_invalidate_non_current_regs();<br />

//The register stack engine is disabled during IA-32<br />

//instruction set execution.<br />

} else { //return to Itanium instruction set<br />

tmp_IP = CR[IIP] & ~0xf;<br />

slot = CR[IPSR].ri;<br />

if ((CR[IPSR].it && unimplemented_virtual_address(tmp_IP))<br />

|| (!CR[IPSR].it && unimplemented_physical_address(tmp_IP)))<br />

unimplemented_address = 1;<br />

if (CR[IFS].v) {<br />

tmp_growth = -CFM.sof;<br />

alat_frame_update(-CR[IFS].ifm.sof, 0);<br />

rse_restore_frame(CR[IFS].ifm.sof, tmp_growth, CFM.sof);<br />

CFM = CR[IFS].ifm;<br />

}<br />

rse_enable_current_frame_load();<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!