#include "atomic-cl-32.hpp" namespace factor { #define ESP Esp #define EIP Eip typedef struct DECLSPEC_ALIGN(16) _M128A { ULONGLONG Low; LONGLONG High; } M128A, *PM128A; // The ExtendedRegisters field of the x86.32 CONTEXT structure uses this layout; // however, this structure is only made available from winnt.h on x86.64 typedef struct _XMM_SAVE_AREA32 { WORD ControlWord; // 000 WORD StatusWord; // 002 BYTE TagWord; // 004 BYTE Reserved1; // 005 WORD ErrorOpcode; // 006 DWORD ErrorOffset; // 008 WORD ErrorSelector; // 00c WORD Reserved2; // 00e DWORD DataOffset; // 010 WORD DataSelector; // 014 WORD Reserved3; // 016 DWORD MxCsr; // 018 DWORD MxCsr_Mask; // 01c M128A FloatRegisters[8]; // 020 M128A XmmRegisters[16]; // 0a0 BYTE Reserved4[96]; // 1a0 } XMM_SAVE_AREA32, *PXMM_SAVE_AREA32; #define X87SW(ctx) (ctx)->FloatSave.StatusWord #define MXCSR(ctx) ((XMM_SAVE_AREA32*)((ctx)->ExtendedRegisters))->MxCsr }