On Sun, 30 Apr 2000, Marco van de Voort wrote:

> I want a signalhandler, which splits out sigfpe to the different copro 
> signals. I found a linux example, which is based on the statusword field of the
> sigcontext structure passed to the signalhandler set 
> 
> Problem is that the linux sigcontext has a field for the floatingpoint statusword,
> while the BSD sigcontext (machine/signal.h) has only two arrays of int's:
> 
> (FPU part struct sigcontext
>      * XXX FPU state is 27 * 4 bytes h/w, 1 * 4 bytes s/w (probably not
>          * needed here), or that + 16 * 4 bytes for emulators (probably all
>          * needed here).  The "spare" bytes are mostly not spare.
>          */
>         int     sc_fpregs[28];          /* machine state (FPU): */
>         int     sc_spare[17];
> };
> 
> Does somebody know how to distille the FP statusword from this struct?

See <machine/reg.h> and <machine/npx.h>.

struct fpreg {
        /*
         * XXX should get struct from npx.h.  Here we give a slightly
         * simplified struct.  This may be too much detail.  Perhaps
         * an array of unsigned longs is best.
         */
        unsigned long   fpr_env[7];
        unsigned char   fpr_acc[8][10];
        unsigned long   fpr_ex_sw;
        unsigned char   fpr_pad[64];
};

fpr_env should correspond to struct env87 in npx.h:

/* Environment information of floating point unit */
struct  env87 {
        long    en_cw;          /* control word (16bits) */
        long    en_sw;          /* status word (16bits) */
        long    en_tw;          /* tag word (16bits) */
        long    en_fip;         /* floating point instruction pointer */
        u_short en_fcs;         /* floating code segment selector */
        u_short en_opcode;      /* opcode last executed (11 bits ) */
        long    en_foo;         /* floating operand offset */
        long    en_fos;         /* floating operand segment selector */
};

So your status word should be in sc_fpregs[1].

-- 
Dan Eischen



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to