第二部 トロン仕様チップ命令詳細第十四章 マルチプロセッサ命令
CSI
マルチプロセッサ命令 <<L1R>>,<<L1>>,<<L2>>

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

CSI cmpreg, src, dest

【機能】

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

【注意事項】

【使用例】

 

 メモリインタロックが開始されます。そして、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"にクリアされます。命令の前後での値の変化は以下の通りです。