| LDCTX(特権命令) OS関連命令 <<L1R>>,<<L1>>,<<L2>> |
【ニモニックとオペランド】
LDCTX ctxbadr
【機能】
Load a context
コンテキストのロード
【命令フォーマットと表記法】
【解説】
タスクのコンテキストブロック(CTXB)の内容をレジスタにロードします。この命令で転送されるレジスタはSP0 〜 SP3,UATB, CSWです。
OSがマスチタスクやコルーチン機能をサポートしている場合、現在実行中でないコンテキストに対するハードウェア資源の情報はメモリに退避しておく必要があります。ハードウェア資源の情報はそれぞれのコンテキストごとにメモリに退避します。
CTXBの置かれる空間は、論理空間(LS)または制御空間(CS)より選択できます。/LSオプションを指定した場合には、ctxbadrは論理空間のアドレスを意味し、CTXBは論理空間に置かれていることになります。また、/CSオプションを指定した場合には、ctxbadrは制御空間のアドレスを意味します。ただし/CSオプションは仕様レベル<<L2>>となっています。
CTXBベースレジスタ(CTXBB)は現在実行中のコンテキストCTXBの先頭アドレスを保持するレジスタです。
LDCTX命令はctxbadrで指定された実効アドレスをCTXBBレジスタにロードし、CTXBからコンテキストをプロセッサのレジスタにロードします。これをコンテキストスイッチと呼びます。32ビット仕様の標準CTXBフォーマット
仕様レベル<<L1>>では、CSW, SP0, SP1, SP2, SP3, UATBレジスタを転送します。
以下のような要因によってCTXBまたはそのフォーマットが変化する可能性があります。MMUを実装した仕様レベル<<L1>>の基本プロセッサでは、LDCTX命令でUATBが変化します。プロセッサにLSIDが実装されていない場合には、UATBが変化すると自動的にTLBとキャッシュがパージされます。LDCTX命令では論理空間の切り換えが行われるため、LDCTX/LSが意味のある動作を行うには、ctxbadrが共有半空間(SS)を指している必要があります。LDCTX/LSでctxbadrが個別半空間 (US)を指定した場合の動作は保証されません。
LDCTX命令は汎用レジスタ、PC,PSWの転送は行いません。
仕様レベル<<L1>>では、AT = 00(アドレス変換なし)の場合にも、UATBを転送することができます。ただし、/LSオプションを指定しても、ctxbadrは物理アドレスとして扱われます。LDCTX命令がUATBを転送しないことを示すには、CTXBのフォーマットを指定するCSWのCTXBFMフィールドまたはCTXBFMレジスタ(仕様レベル<<L2>>)を使用します。
LDCTX命令はctxbadrをCTXBBレジスタにセットします。このとき、CTXBBレジスタの下位3ビットは"0"に固定すべきです。ただし、ctxbadrのアラインメントが取れていない場合でも、LDCTXは実行できます。
【フラグ変化】
【発生EIT】
RIE ctxbadr [Gen-IRSC/rx]のアドレッシングモード違反 RIE xx = 10,11 RIE xx = 01(<<L2>>以外) PIVE RNG ≠ 00 DCT DCT値の変更による条件成立
【使用例】