atomic命令 - __xchg_op()
概要
2つの値を入れ替える
詳細
以下の値を引数として持つ
- 保存先の値へのポインタ : ptr
- 保存する値へのポインタ : arg
- 実行する命令の種類を示す : op
- この値にはxchgかxaddのいずれかの値をとり、xaddの場合はptrとargの合計値をptrに保存する
- atomicに操作を行うか決める : lock
lockにLOCKプリフィクスを示す文字列が指定されていた場合はatomicに実行されることになるが、opにxchgが指定されている場合はlockの値に関わらずatomicに実行される
また、ptrのサイズにより実行する命令に以下のsuffixが付加される
- 1byte : b
- 2byte : w
- 4byte : l
- 8byte : q
ptrのサイズが8byteを超えた場合は不正なサイズとして__op_wrong_size()が実行され、値の書き換えは行われないが、それ以外の場合はopがで示すアセンブラ命令を実行し、ptrとargの値を入れ替える