XBEGIN

交易开始

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
C7 F8XBEGIN rel16A有效有效指定 RTM 区域的开始。提供十六位相对偏移,以计算RTM 中止后恢复执行的倒置指令地址。
C7 F8XBEGIN rel32A有效有效指定 RTM 区域的开始。提供32 位相对偏移以计算RTM 中止后恢复执行的倒置指令地址的地址。

操作数编码

每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。

A

  1. offset操作码后的位移

实测开销

正在从 arch-data 加载实测数据...

说明

XBEGIN指令指定了RTM代码区域的起始. 如果逻辑处理器还没有在交易执行中,那么XBEGIN指令会使逻辑处理器向交易执行过渡. 将逻辑处理器转换为交易执行的XBEGIN指令被称为最外层的XBEGIN指令. 该指令还指定了一个相对偏移来计算交易中止后倒置代码路径的地址. (使用16位的操作数大小不会使这个地址切换到16位,与接近跳跃到相对偏移不同.

在 RTM 中止时,逻辑处理器会丢弃 RTM 执行过程中完成的所有建筑寄存器和内存更新,并将建筑状态恢复到与最外侧的 XBEGIN 指令相对应的状态. 中止后的后退地址由最外侧的 XBEGIN 指令计算 。

XBEGIN在暂停读地址跟踪区域执行时会导致交易中止.

行动

XBEGIN
IF RTM_NEST_COUNT < MAX_RTM_NEST_COUNT AND SUSLDTRK_ACTIVE = 0

    THEN
          RTM_NEST_COUNT++
          IF RTM_NEST_COUNT = 1 THEN
                IF 64-bit Mode
                      THEN
                            IF OperandSize = 16
                                  THEN fallbackRIP := RIP + SignExtend64(rel16);
                                  ELSE fallbackRIP := RIP + SignExtend64(rel32);
                            FI;
                            IF fallbackRIP is not canonical
                                  THEN #GP(0);
                            FI;
                      ELSE
                            IF OperandSize = 16
                                  THEN fallbackEIP := EIP + SignExtend32(rel16);
                                  ELSE fallbackEIP := EIP + rel32;
                            FI;
                            IF fallbackEIP outside code segment limit
                                  THEN #GP(0);
                            FI;
                FI;


                RTM_ACTIVE := 1
                Enter RTM Execution (* record register state, start tracking memory state*)
          FI; (* RTM_NEST_COUNT = 1 *)
    ELSE (* RTM_NEST_COUNT = MAX_RTM_NEST_COUNT OR SUSLDTRK_ACTIVE = 1 *)
          GOTO RTM_ABORT_PROCESSING
FI;

(* For any RTM abort condition encountered during RTM execution *)
RTM_ABORT_PROCESSING:

    Restore architectural register state
    Discard memory updates performed in transaction
    Update EAX with status
    RTM_NEST_COUNT := 0
    RTM_ACTIVE := 0
    SUSLDTRK_ACTIVE := 0
    IF 64-bit mode

          THEN
                RIP := fallbackRIP

          ELSE
                EIP := fallbackEIP

    FI;
END

受影响的旗帜

None.

Intel C/C++ 内在编译器

XBEGIN unsigned int _xbegin( void );

SIMD 浮点 例外

None.

异常

保护模式
#UDCPUID. 07H. 00H:EBX.RTM[11]=0.
#GP(0)如果后退地址位于CS段之外.
实地址模式
#GP(0)如果后退地址位于地址空间0000H和FFFFH之外. #UDCPUID. 07H. 00H:EBX.RTM[11]=0. 如果使用LOCK前缀.
虚拟 8086 模式
#GP(0)如果后退地址位于地址空间0000H和FFFFH之外. #UDCPUID. 07H. 00H:EBX.RTM[11]=0. 如果使用LOCK前缀.
兼容模式
与保护模式中的例外相同.
64 位模式
#UDCPUID. 07H. 00H:EBX.RTM[11]=0.
#GP(0)如果倒置地址是非卡诺式的。

来源