[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug#788102: The code doesn't compile on kfreebsd


Mathieu Malaterre wrote:
> Steven Chamberlain <steven@pyro.eu.org> 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);

Steven Chamberlain

Attachment: signature.asc
Description: Digital signature

Reply to: