_xrstors
Classification
Other, OS-Targeted, CPUID Test: XSAVE
Header File
Instruction
XRSTORS m8
Synopsis
_xrstors(const void * mem_addr, unsigned __int64 rs_mask);
Description
Perform a full or partial restore of the enabled processor states using the state information stored in memory at "mem_addr". xrstors differs from xrstor in that it can restore state components corresponding to bits set in the IA32_XSS MSR; xrstors cannot restore from an xsave area in which the extended region is in the standard form. State is restored based on bits [62:0] in "rs_mask", "XCR0", and "mem_addr.HEADER.XSTATE_BV". "mem_addr" must be aligned on a 64-byte boundary.
Operation
st_mask := mem_addr.HEADER.XSTATE_BV[62:0]
FOR i := 0 to 62
IF (rs_mask[i] AND XCR0[i])
IF st_mask[i]
CASE (i) OF
0: ProcessorState[x87_FPU] := mem_addr.FPUSSESave_Area[FPU]
1: ProcessorState[SSE] := mem_addr.FPUSSESaveArea[SSE]
DEFAULT: ProcessorState[i] := mem_addr.Ext_Save_Area[i]
ESAC
ELSE
// ProcessorExtendedState := Processor Supplied Values
CASE (i) OF
1: MXCSR := mem_addr.FPUSSESave_Area[SSE]
ESAC
FI
FI
i := i + 1
ENDFOR