X86 XSAVEOPT 指令详解

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部分的内容

伪代码:

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])
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值