第二部 トロン仕様チップ命令詳細第十六章 OS関連命令
RRNG
OS関連命令 <<L1R>>,<<L1>>,<<L2>>

【ニモニックとオペランド】

RRNG

【機能】

Return from an inner ring
内側リングからのリターン

【オプション】

なし

【命令フォーマットと表記法】

【解説】

JRNG命令によるジャンプ後に内側リングから復帰します。

命令動作

@SP+ → tmp1
@SP+ → tmp2
@SP+ → tmp1.RNGのSP

 RNG > tmp1.RNGの場合には、RTVEが発生します。

SM = 0かつtmp1.RNG ≠ 00の場合には、RFEが発生します。

tmp1.PSH → PSH(PRNGを含む)
tmp1.RNG → RNG
tmp2 → PC

 RRNG実行中に処理取消型 EIT [RTVE,RFE]が発生した場合には、RRNG実行後に解除されるはずのJRNGスタックフレームが残ります。したがって、EITJRNGが同一のスタックを使用していた場合には、JRNGスタックフレームに追加される形でEITスタックフレームが形成されます。EITJRNGが異なるスタックを使用する場合には、JRNG命令で使用していたスタックの内容やそのスタックポインタは変化しません。
 RRNGでDCTが発生すると、処理取消型EITの発生時とは異なり、JRNGスタックフレームの解除後にDCTスタックフレームが形成されます。
 この動作では、RRNG命令の実行中にDCTタイプのEITが発生することがありますので、この可能性についてのチェックを行う必要があります。


RFEが発生したときのスタックの例

 RRNGとEITが同一スタックを使用するとき

 RRNG命令でスタックからポップされたPSWについては、PSHRNG以外のフィールドは無視されます。ただし、これらのフィールドはJRNG命令からRRNG命令までの間に書き換えてはなりません。
 RRNG命令で同一のリングに復帰する場合には、SPの最終値は

mem[初期 SP +8]→ SP

となります。
 JRNGVBのEビットはRRNG命令の動作には関係しません。Eビットが0の場合にも、RRNG命令は実行されます。

【フラグ変化】

【発生EIT】

RTVE  RNG > tmp1.RNG(スタックから復帰したPSWRNG
RFE SM = 0かつtmp1.RNG ≠ 00
OAJE/OAJT スタックから復帰したPCが奇数
DCT RNG値の変更によるDCT条件成立

【使用例】



JRNG命令実行後に内側リングから復帰します。
PSHPSSRNGフィールドはスタックから更新されます。