Skip to content

Commit 3dab47d

Browse files
committed
Preliminary FPregs for FreeBSD x86_64
1 parent f630092 commit 3dab47d

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

src/pal/src/arch/i386/context.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,21 @@ extern void CONTEXT_CaptureContext(LPCONTEXT lpContext);
132132
#define MCREG_EFlags(mc) ((mc).mc_rflags)
133133
#define MCREG_SegCs(mc) ((mc).mc_cs)
134134

135+
// #define FPREG_Xmm(uc, index) *(M128A*)&((uc)->__fpregs_mem._xmm[index])
136+
137+
// #define FPREG_St(uc, index) *(M128A*)&((uc)->mc_fpstate[index])
138+
139+
// from x86/fpu.h: struct __envxmm64
140+
#define FPREG_ControlWord(uc) (((savefpu*)((uc)->uc_mcontext.mc_fpstate))->sv_env.en_cw)
141+
#define FPREG_StatusWord(uc) (((savefpu*)((uc)->uc_mcontext.mc_fpstate))->sv_env.en_sw)
142+
#define FPREG_TagWord(uc) (((savefpu*)((uc)->uc_mcontext.mc_fpstate))->sv_env.en_tw)
143+
#define FPREG_ErrorOffset(uc) (((savefpu*)((uc)->uc_mcontext.mc_fpstate))->sv_env.en_rip) // *(DWORD*)&((uc)->__fpregs_mem.rdp)
144+
#define FPREG_ErrorSelector(uc) *((WORD*) &(((savefpu*)((uc)->uc_mcontext.mc_fpstate))->sv_env.en_rip) + 2) // *(((WORD*)&((uc)->__fpregs_mem.rip)) + 2)
145+
#define FPREG_DataOffset(uc) (((savefpu*)((uc)->uc_mcontext.mc_fpstate))->sv_env.en_rdp) // *(DWORD*)&((uc)->__fpregs_mem.rdp)
146+
#define FPREG_DataSelector(uc) *((WORD*) &(((savefpu*)((uc)->uc_mcontext.mc_fpstate))->sv_env.en_rdp) + 2) // *(((WORD*)&((uc)->__fpregs_mem.rdp)) + 2)
147+
#define FPREG_MxCsr(uc) (((savefpu*)((uc)->uc_mcontext.mc_fpstate))->sv_env.en_mxcsr)
148+
#define FPREG_MxCsr_Mask(uc) (((savefpu*)((uc)->uc_mcontext.mc_fpstate))->sv_env.en_mxcsr_mask)
149+
135150
#else // BIT64
136151

137152
#define MCREG_Ebx(mc) ((mc).mc_ebx)

0 commit comments

Comments
 (0)