UMWAIT

用户级别监视器等待

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
F2 0F AE /6UMWAIT 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

  1. modrm.rm lecturaModRM 字节的 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] = 0C0.2慢一点大一点提高同一核心上其他SMT线程的性能.
位 [0] = 1C0.1快点小一点N/A
位数 [31:1]N/AN/AN/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 := 0

Intel 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.

来源