インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
Restricted Transactional Memory (RTM) コード領域の開始を指定し、ステータスを示す値を返します。対応するインテル® AVX2 命令は XBEGIN です。
unsigned int _xbegin(void); |
なし。
RTM コード領域を開始し、トランザクション開始の成功を示す値またはトランザクション・アボートのステータスを返します。
論理プロセッサーでトランザクション実行が行われていない場合、xbegin 命令により論理プロセッサーはトランザクション実行を開始します。論理プロセッサーがトランザクション実行に移行する xbegin 命令は、最外 xbegin 命令と呼ばれます。
xbegin 命令は、トランザクションがアボートされた場合に実行するフォールバック・コード・パスへの相対オフセットを指定します。適切なプログラム構造になるように、C++ コードはこれを実行せず、組込み関数は次のモデルコードを起動するように動作します。
__inline unsigned int _xbegin() { unsigned status; __asm { move eax, 0xFFFFFFFF xbegin _txnL1 _txnL1: move status, eax } return status; }
トランザクションに成功すると、関数は 0xFFFFFFFF を返します。このステータスコードはトランザクションがアボートされた場合には返されません。何らかの理由によりトランザクションがアボートされた場合、論理プロセッサーはトランザクション実行中に行われたアーキテクチャー上のレジスターとメモリーの更新をすべて破棄し、アーキテクチャー上の状態を、対応する最外 xbegin 命令の状態に戻します。次に、EAX レジスターがアボートされたトランザクションのステータスコードで更新され、フォールバック・ハンドラーに制御を移すために使用されます。
組込み関数は、トランザクションがアボートされた場合に実行するフォールバック・コード・パスのアドレスを計算する相対オフセットも指定します。RTM がアボートされると、論理プロセッサーは RTM 実行中に行われたアーキテクチャー上のレジスターとメモリーの更新をすべて破棄し、アーキテクチャー上の状態を、対応する最外 xbegin 命令の状態に戻します。トランザクションがアボートした場合でもアボートしなかった場合でも制御フローに変更がないように、xbegin 命令のアボート・デスティネーション・オペランドは次の命令のターゲットにされます。
トランザクション開始成功を示す値またはトランザクション・アボートのステータス。