第二部 トロン仕様チップ命令詳細|第十四章 マルチプロセッサ命令
| CSI マルチプロセッサ命令 <<L1R>>,<<L1>>,<<L2>> |
【ニモニックとオペランド】
【機能】
Compare and store with interlock
インタロック状態での比較とストア
【オプション】
なし
【命令フォーマットと表記法】
【解説】
デスティネーションオペランドdestの値をcmpregにより指定される値と比較します。2つの値が同一であれば、destがソースオペランドsrcの値で更新され、Z_flagが"1"にセットされます。同一でなければ、destの値がcmpregで指定されたレジスタへ転送され、Z_flagが"0"にクリアされます。これらの操作はメモリインタロックの下で行われます。
この命令を使用して単純な構造のデータをマルチプロセッサから更新できます。CSI命令を実行した結果、destの値が以前の値と異なっていることがわかった場合、このことは別のプロセッサが既にdestを更新したことを意味しています。したがって、destの変化を発見したプロセッサはCSIの結果として得られたdestの新しい値を使用してdestの更新をやり直さなければなりません。これにより、マルチプロセッサ環境でデータの一貫性が保たれます。
【フラグ変化】
【発生EIT】
RIE src [Gen/r], dest [Gen-R/mi]のアドレッシングモード違反 RIE SX = 11
【注意事項】
- SXの値がcmpreg、src、destの共通のサイズを指定します。
- destとcmpregの比較が失敗した場合でも、srcの読み出しは行われます。この場合、メモリインタロックが呼び出されます。この命令ではdestに関してreadとwriteのアクセスを使用可能にしなければなりません。つまり、比較が失敗して、destに書き込むものが何もない場合でも、destに関してwriteアクセスを使用不能にした場合には、リング保護違反が検出されれば(インプリメントに依存)、アドレス変換例外 (ATRE)が発生します。
- オペランドのサイズSXをハーフワードまたはワードと指定し、destアドレスをアライメントしなかった場合には、メモリインタロックの下で複数のメモリアクセス(つまり4メモリアクセス動作:read-read-write-write)が行われます。
【使用例】
メモリインタロックが開始されます。そして、1ワードのデータが汎用レジスタR2の内容(H'0001e24c)で指定されたメモリアドレスから読み出されます。この32ビットのデータ(H'c348c950)をR1の内容(H'c348c950)と比較します。これらは同一ですから、メモリアドレスH'0001e24c〜fへR0の内容が書き込まれ、メモリインタロックが終了します。更新に成功したので、Z_flagが"1"にセットされます。命令の前後での値の変化は以下の通りです。
srcとしてR3の内容(H'00c31100)で示されたメモリアドレスから1ワードのデータを読み出します。メモリインタロックが開始されます。そして、R2の内容(H'0001e24c)で示されたメモリアドレスから1ワードのデータが読み出されます。この32ビットのデータ(H'44414dc5)をR1の内容(H'd4d2cf4e)と比較します。これらは同一ではないので、32ビットのデータがR1にロードされ、メモリインタロックが終了します。更新に失敗したので、Z_flagが"0"にクリアされます。命令の前後での値の変化は以下の通りです。
![]()