UMWAIT
用户级别监视器等待
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
F2 0F AE /6 | UMWAIT r32, <edx>, <eax> Op/En Tuple Operand 1 A N/A ModRM:r/m (r) | A | 有效 | 有效 | 一个提示,允许处理器停止指令执行并输入一个依赖于执行的优化状态,直到某一类事件的发生。在指令 O perand Enc oding1 Opera nd 2 操作数 3 操作数 4 N/A N/A N/A |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
A
modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
实测开销
正在从 arch-data 加载实测数据...
说明
UMWAIT指示处理器在监视一系列地址时输入一个依赖执行的优化状态. 优化状态可以是轻量级功率/性能优化状态,也可以是改进后的功率/性能优化状态. 两个州之间的选择由明确的输入寄存器比特[0] 源操作数管辖.
UMWAIT在CPUID.07H.00H:ECX.WAITPKG[5]被列举为1. UMWAIT可以在任何特权级别执行. 此指令的操作在非64位模式和64位模式中是相同的.
输入寄存器包含一些信息,如首选的优化状态,处理器应当按下表的描述输入. 保留了比特0以外的位数,如果非零,则会产生#GP.
UMWAIT 输入记录位定义
| 位值 | 国名 | 醒来时间 | 节省电力 | 其他福利 |
|---|---|---|---|---|
| 位 [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 monitor hardware armed AND 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++ 内在编译器
UMWAIT uint8_t _umwait(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. |