XMM_SAVE_AREA32 Structure

The XMM_SAVE_AREA32 structure defines the layout of the 128‑bit SSE registers for a 32‑bit context. It is used as part of the CONTEXT structure when the CONTEXT_XSTATE flag is set.

Syntax

typedef struct _XMM_SAVE_AREA32 {
    DWORD   ControlWord;
    DWORD   StatusWord;
    BYTE    TagWord;
    BYTE    Reserved1;
    WORD    ErrorOpcode;
    DWORD   ErrorOffset;
    WORD    ErrorSelector;
    WORD    Reserved2;
    DWORD   DataOffset;
    WORD    DataSelector;
    WORD    Reserved3;
    DWORD   MXCSR;
    DWORD   MXCSR_Mask;
    M128A   FloatRegisters[8];
    M128A   XmmRegisters[16];
    BYTE    Reserved4[96];
} XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;

Members

MemberTypeOffset (bytes)Description
ControlWordDWORD0The x87 FPU control word.
StatusWordDWORD4The x87 FPU status word.
TagWordBYTE8Tag word for the FPU registers.
Reserved1BYTE9Reserved.
ErrorOpcodeWORD10Opcode of the last x87 instruction that generated an exception.
ErrorOffsetDWORD12Instruction pointer for the exception.
ErrorSelectorWORD16Code segment selector for the exception.
Reserved2WORD18Reserved.
DataOffsetDWORD20Data pointer for the exception.
DataSelectorWORD24Data segment selector for the exception.
Reserved3WORD26Reserved.
MXCSRDWORD28Current MXCSR register value.
MXCSR_MaskDWORD32Mask of supported MXCSR bits.
FloatRegisters[8]M128A[8]36Legacy x87 FP registers (ST0‑ST7).
XmmRegisters[16]M128A[16]164SSE XMM registers (XMM0‑XMM15).
Reserved4[96]BYTE[96]420Reserved for future use.

Example

#include <windows.h>
#include <stdio.h>

void PrintXmmSaveArea(const XMM_SAVE_AREA32* pXmm)
{
    printf("MXCSR = 0x%08X\n", pXmm->MXCSR);
    for (int i = 0; i < 16; ++i) {
        printf("XMM%02d = %016llX%016llX\n",
               i,
               pXmm->XmmRegisters[i].High,
               pXmm->XmmRegisters[i].Low);
    }
}

int main()
{
    CONTEXT ctx = {0};
    ctx.ContextFlags = CONTEXT_FULL | CONTEXT_FLOATING_POINT;
    if (GetThreadContext(GetCurrentThread(), &ctx)) {
        PrintXmmSaveArea(&ctx.XmmSaveArea32);
    }
    return 0;
}

See Also