TPAUSE
计时 PAUSE
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
66 0F AE /6 | TPAUSE r32, <edx>, <eax> Op/En Tuple A N/A | A | 有效 | 有效 | 引导处理器输入一个依赖执行的优化状态,直到TSC达到EDX:EAX. Inst ruction O perand Encoding1 操作数 1 Ope Rand 2 操作数 3 操作数 4 ModRM:r/ m (r) N/A N/A N/A |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
A
modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
实测开销
正在从 arch-data 加载实测数据...
说明
TPAUSE指示处理器输入一个依赖执行的优化状态. 有两个这样的优化状态可以选择:轻量级功率/性能优化状态,以及改进的功率/性能优化状态. 两者之间的选择由明确的输入寄存器比特[0] 源操作数规范.
TPAUSE在CPUID.07H.00H:ECX.WAITPKG[5]被列举为1. TPAUSE可以在任何特权级别执行. 此指令的操作在非64位模式和64位模式中是相同的.
与 PAUSE 不同的是, TPAUSE 指令不会在交易区域内部使用时导致中止,该指令在Intel(R)64和IA-32架构软件开发者手册第1卷第16章"与Intel(R) AVX10 的编程"中有所描述.
输入寄存器包含一些信息,如首选的优化状态,处理器应当按下表的描述输入. 保留比特0以外的位数,如果非零,则会产生#GP.
TPAUSE 输入记录位定义
| 位值 | 国名 | 醒来时间 | 节省电力 | 其他福利 |
|---|---|---|---|---|
| 位 [0] = 0 | C0.2 | 慢一点 | 大一点 | 提高同一核心上其他SMT线程的性能. |
| 位 [0] = 1 | C0.1 | 快点 | 小一点 | N/A |
| 位数 [31:1] | N/A | N/A | N/A | 准备金 |
行动
os_deadline := TSC+(IA32_UMWAIT_CONTROL[31:2]<<2)
instr_deadline := UINT64(EDX:EAX)
IF os_deadline < instr_deadline:
deadline := os_deadline
using_os_deadline := 1
ELSE:
deadline := instr_deadline
using_os_deadline := 0
WHILE TSC < deadline:
implementation_dependent_optimized_state(Source register, deadline, IA32_UMWAIT_CONTROL[0])
IF using_os_deadline AND TSC deadline:
RFLAGS.CF := 1
ELSE:
RFLAGS.CF := 0
RFLAGS.AF,PF,SF,ZF,OF := 0Intel C/C++ 内在编译器
TPAUSE uint8_t _tpause(uint32_t control, uint64_t counter);数字例外
None.
异常
实地址模式
#GP(0) | 如果src[31:1] != 0. 如果CR4.TSD = 1和 CPL != 0. |
#UD | 如果 CPUID.07H.00H:ECX.WAITPKG[5]=0. |
保护模式
#GP(0) | 如果src[31:1] != 0. 如果CR4.TSD = 1和 CPL != 0. |
#UD | 如果 CPUID.07H.00H:ECX.WAITPKG[5]=0. |
虚拟 8086 模式
#GP(0) | 如果src[31:1] != 0. 如果CR4.TSD = 1和 CPL != 0. |
#UD | 如果 CPUID.07H.00H:ECX.WAITPKG[5]=0. |
兼容模式
#GP(0) | 如果src[31:1] != 0. 如果CR4.TSD = 1和 CPL != 0. |
#UD | 如果 CPUID.07H.00H:ECX.WAITPKG[5]=0. |
64 位模式
#GP(0) | 如果src[31:1] != 0. 如果CR4.TSD = 1和 CPL != 0. |
#UD | 如果 CPUID.07H.00H:ECX.WAITPKG[5]=0. |