background image

Vol. 1 16-7

PROGRAMMING WITH INTEL® TRANSACTIONAL SYNCHRONIZATION EXTENSIONS

Update to non-status portion of EFLAGS: CLI, STI, POPFD, POPFQ.

Instructions that update segment registers, debug registers and/or control registers: MOV to 
DS/ES/FS/GS/SS, POP DS/ES/FS/GS/SS, LDS, LES, LFS, LGS, LSS, SWAPGS, WRFSBASE, WRGSBASE, LGDT, 
SGDT, LIDT, SIDT, LLDT, SLDT, LTR, STR, Far CALL, Far JMP, Far RET, IRET, MOV to DRx, MOV to 
CR0/CR2/CR3/CR4/CR8, CLTS and LMSW.

Ring transitions: SYSENTER, SYSCALL, SYSEXIT, and SYSRET.

TLB and Cacheability control: CLFLUSH, CLFLUSHOPT, INVD, WBINVD, INVLPG, INVPCID, and memory instruc-
tions with a non-temporal hint (V/MOVNTDQA, V/MOVNTDQ, V/MOVNTI, V/MOVNTPD, V/MOVNTPS, 
V/MOVNTQ, V/MASKMOVQ, and V/MASKMOVDQU).

Processor state save: XSAVE, XSAVEOPT, and XRSTOR.

Interrupts: INTn, INTO.

IO: IN, INS, REP INS, OUT, OUTS, REP OUTS and their variants.

VMX: VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF, 
VMXON, INVEPT, INVVPID, and VMFUNC.

SMX: GETSEC.

UD2, RSM, RDMSR, WRMSR, HLT, MONITOR, MWAIT, XSETBV, VZEROUPPER, MASKMOVQ, and 
V/MASKMOVDQU.

16.3.8.2   Runtime Considerations

In addition to the instruction-based considerations, runtime events may cause transactional execution to abort. 
These may be due to data access patterns or micro-architectural implementation causes. Keep in mind that the 
following list is not a comprehensive discussion of all abort causes. 
Any fault or trap in a transactional region that must be exposed to software will be suppressed. Transactional 
execution will abort and execution will transition to a non-transactional execution, as if the fault or trap had never 
occurred. If any exception is not masked, that will result in a transactional abort and it will be as if the exception 
had never occurred.
When executed in VMX non-root operation, certain instructions may result in a VM exit. When such instructions are 
executed inside a transactional region, then instead of causing a VM exit, they will cause a transactional abort and 
the execution will appear as if instruction that would have caused a VM exit never executed.
Synchronous exception events (#DE, #OF, #NP, #SS, #GP, #BR, #UD, #AC, #XM, #PF, #NM, #TS, #MF, #DB, 
#BP/INT3) that occur during transactional execution may cause an execution not to commit transactionally, and 
require a non-transactional execution. These events are suppressed as if they had never occurred. With HLE, since 
the non-transactional code path is identical to the transactional code path, these events will typically re-appear 
when the instruction that caused the exception is re-executed non-transactionally, causing the associated synchro-
nous events to be delivered appropriately in the non-transactional execution. The same behavior also applies to 
synchronous events (EPT violations, EPT misconfigurations, and accesses to the APIC-access page) that occur in 
VMX non-root operation.
Asynchronous events (NMI, SMI, INTR, IPI, PMI, etc.) occurring during transactional execution may cause the 
transactional execution to abort and transition to a non-transactional execution. The asynchronous events will be 
pended and handled after the transactional abort is processed. The same behavior also applies to asynchronous 
events (VMX-preemption timer expiry, virtual-interrupt delivery, and interrupt-window exiting) that occur in VMX 
non-root operation.
Transactional execution only supports write-back cacheable memory type operations. A transactional region may 
always abort if it includes operations on any other memory type. This includes instruction fetches to UC memory 
type.
Memory accesses within a transactional region may require the processor to set the Accessed and Dirty flags of the 
referenced page table entry. The behavior of how the processor handles this is implementation specific. Some 
implementations may allow the updates to these flags to become externally visible even if the transactional region 
subsequently aborts. Some Intel TSX implementations may choose to abort the transactional execution if these 
flags need to be updated. Further, a processor's page-table walk may generate accesses to its own transactionally 
written but uncommitted state. Some Intel TSX implementations may choose to abort the execution of a transac-
tional region in such situations. Regardless, the architecture ensures that, if the transactional region aborts, then