X86 XSAVEOPT 指令详解
2017-09-14 15:12
375 查看
xsaveopt指令是xsave的优化版,常用于kernel在进程切换的时候保存进程使用fpu寄存器现场,主要分3个域 X87 SSE AVX AVX512
1.SDM指令功能描述(XSAVEOPT)
实现一个完整或者部分的xsave,将相应寄存器的值存储在目的操作数中. EDX:EAX作为隐式参数是一个指令mask,功能是和XCR0做一个逻辑and操作得到结果是RFBM.
XINUSE的描述在第一卷13.6章节给出,总的说就是硬件来检查CPU内部的几个域的寄存器是否都是初始化的值,如果是初始化的值就是在初始化状态(init optimization);如果不是初始化的值就认为是在使用状态(modified optimization)
xsaveopt当RFBM[i] 和XINUES[i]都为1时会执行对特定域的保存操作.
xstate_bv的值是save域起始的低512个字节 这个字节会在xrstor和xsaveopt中被使用
xsaveopt的操作中如果域被RFBM指定 则会用XINUSE更新xstate_bv相应域中的值
xsaveopt不会修改legacy region的 511:464部分的内容
伪代码:
1.SDM指令功能描述(XSAVEOPT)
实现一个完整或者部分的xsave,将相应寄存器的值存储在目的操作数中. EDX:EAX作为隐式参数是一个指令mask,功能是和XCR0做一个逻辑and操作得到结果是RFBM.
XINUSE的描述在第一卷13.6章节给出,总的说就是硬件来检查CPU内部的几个域的寄存器是否都是初始化的值,如果是初始化的值就是在初始化状态(init optimization);如果不是初始化的值就认为是在使用状态(modified optimization)
xsaveopt当RFBM[i] 和XINUES[i]都为1时会执行对特定域的保存操作.
xstate_bv的值是save域起始的低512个字节 这个字节会在xrstor和xsaveopt中被使用
xsaveopt的操作中如果域被RFBM指定 则会用XINUSE更新xstate_bv相应域中的值
xsaveopt不会修改legacy region的 511:464部分的内容
伪代码:
RFBM=XCR0 & EDX:EAX OLD_BV=XSAVE_HEAD[512] for(i = 0; i < 3; i++) { if(RFBM[i] & XINUSE[i]) //restore相应域 i=0 X87 // i=1 sse // i=2 avx { } } if(RFBM[1] || RFBM[2]) restore MXCSR MXCSR_MASK NEW_XSTATE_BV=(OLD_BV & ~RFBM) | (XINUSE & RFBM) WRITE(NEW_XSTATE_BV, XSAVE_HEAD[512])
相关文章推荐
- X86 LGS/LFS指令详解
- 用VC写Assembly代码(6)--附录3[X86指令使用详解]
- X86 XCHG指令详解
- X86 MOVSB MOVSW MOVSD MOVSQ 指令详解
- X86 PUSHA指令详解
- X86 PUSHF/PUSHFD/PUSHFQ 指令详解
- X86 LSS指令详解
- ARM平台下独占访问指令LDREX和STREX的原理与使用详解
- grep指令详解
- 【Shell指令】Linux nohup命令详解
- RPM 指令详解
- 四、44B0X引导程序中伪指令详解
- angularjs 指令(directive)详解(2)
- SSI指令使用详解
- ImageMagick常用指令详解
- Dockerfile指令详解上
- Linux文本比较指令(diff,cmp)详解
- AngularJS指令参数详解
- Linux 指令详解: chmod
- AngularJS指令参数详解