インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

_xbegin

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 命令のアボート・デスティネーション・オペランドは次の命令のターゲットにされます。

戻り値

トランザクション開始成功を示す値またはトランザクション・アボートのステータス。