Hi, Mathieu Malaterre wrote: > Steven Chamberlain <[email protected]> wrote: > > Gianfranco Costamagna wrote: > >> file.c:5:38: error: ‘mcontext_t’ has no member named ‘fpregs’ > >> uint32_t mxcsr = ucon.uc_mcontext.fpregs->mxcsr; > > > > FreeBSD doesn't seem to have fpregs in mcontext_t or sigcontext. > > But I think mc_fpstate might be the same thing; but that isn't > > implemented as a struct... > > Correct. Looks like other are handling it this way also > https://github.com/fukamachi/clozure-cl/blob/master/level-1/x86-trap-support.lisp
For future reference, I came up with this alternate implementation of
restoreControlRegs() for kFreeBSD (untested, except it builds and passes
the testsuite):
#include <machine/npx.h>
inline void
restoreControlRegs (const ucontext_t & ucon, bool clearExceptions)
{
struct envxmm *ex = (struct envxmm *)(ucon.uc_mcontext.mc_fpstate);
setCw ((ex->en_cw & cwRestoreMask) | cwRestoreVal);
setMxcsr (ex->en_mxcsr, clearExceptions);
}
Regards,
--
Steven Chamberlain
[email protected]
signature.asc
Description: Digital signature

