Date: Mon, 31 Aug 1998 18:24:46 +0200 From: Martin Cracauer <cracauer@cons.org> To: Bruce Evans <bde@zeta.org.au>, cracauer@cons.org, current@FreeBSD.ORG Subject: Re: Floating Point Exceptions, signal handlers & subsequent ops Message-ID: <19980831182446.A26258@cons.org> In-Reply-To: <199808311400.AAA03763@godzilla.zeta.org.au>; from Bruce Evans on Tue, Sep 01, 1998 at 12:00:19AM %2B1000 References: <199808311400.AAA03763@godzilla.zeta.org.au>
next in thread | previous in thread | raw e-mail | index | archive | help
In <199808311400.AAA03763@godzilla.zeta.org.au>, Bruce Evans wrote:
> >> >> code = translation_table[ffs(status_word & control_word & 0x3F)];
> >> >
> >> >But the values of the symbols the application tests against
> >> >("FP_X_...") are chosen so that no translation is needed.
> >>
> >> Sorry, I thought that you didn't change the codes that much.
> >
> >I didn't. The FP_X_ value have always been the hardware bit
> >values. They are on Solaris (SPARC and x86) as well, so I thought
> >people agreed to use the hardware bit values to make the kernel code
> >more efficient.
>
> I thought Sun normally uses machine-independent codes like our FPE_*.
They have both. I don't known what is commonly used.
> >> >npx.c:npxintr() ?
> >>
> >> Just translate the code there. You do need to store the control word
> >> somewhere.
> >
> >Store it for use outside of npxintr()? Why that?
>
> Outside of the CFU 8-).
I'm afraid I'm out of reach for the smily. What's CFU? :-/
> >If I implement XXX_ENCODE, I get the trap code I want and have no need
> >for the control word (or the status word, for that matter) outside
> >this function.
>
> There's no trap code except possibly for one generated from the FPU state.
> XXX_ENCODE currently takes only the status word as an arg. Your idea of
> throwing away the masked bits is good. I think the point of FPE_* is
> that that they give a simple semi-portable interface for applications
> that don't want to know about the status word, the control word and
> where they may be found.
OK, I had another look and Linux and Solaris both have
#define FPE_INTDIV 1 /* integer divide by zero */
#define FPE_INTOVF 2 /* integer overflow */
#define FPE_FLTDIV 3 /* floating point divide by zero */
#define FPE_FLTOVF 4 /* floating point overflow */
#define FPE_FLTUND 5 /* floating point underflow */
#define FPE_FLTRES 6 /* floating point inexact result */
#define FPE_FLTINV 7 /* invalid floating point operation */
#define FPE_FLTSUB 8 /* subscript out of range */
I think that's the way to go for the code to pass as the second
argument to the signal handler.
I will think over a priority scheme for the case that multiple
unmasked bits are set. Some Intel document I have talks about this,
maybe IEEE has something as well.
Which header file should I put the FPE_...... macros in? Should I
replace the FPE_......_TRAP macros in trap.h? That way, I can add our
FPE_FPU_NP_TRAP to the set above.
Martin
--
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Martin Cracauer <cracauer@cons.org> http://www.cons.org/cracauer
Tel.: (private) +4940 5221829 Fax.: (private) +4940 5228536
Paper: (private) Waldstrasse 200, 22846 Norderstedt, Germany
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980831182446.A26258>
