Date: Sat, 1 Jun 2002 11:00:06 -0700 (PDT) From: Bruce Evans <bde@zeta.org.au> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/38170: fpgetmask, fpsetmask yield strange results Message-ID: <200206011800.g51I06e09224@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/38170; it has been noted by GNATS.
From: Bruce Evans <bde@zeta.org.au>
To: Andreas Haakh <ah@alvman.Haakh.de>
Cc: FreeBSD-gnats-submit@FreeBSD.ORG
Subject: Re: kern/38170: fpgetmask, fpsetmask yield strange results
Date: Sun, 2 Jun 2002 03:54:07 +1000 (EST)
On Fri, 17 May 2002, Andreas Haakh wrote:
> >Description:
> I tried to modify the default fp_exception-mask. The results from fpgetmask and fpsetmask (and probably some other fp[sg]et-routines) are buggy.
fpsetmask() is fixed in -current. The complement of the mask (ANDed with
the mask bitfield) was being returned. The other routines seem to be OK.
> >How-To-Repeat:
> The following codeexample shows this strange behaviour:
>
> #include <stdio.h>
> #include <ieeefp.h>
>
> int main (void) {
>
> fp_except_t except, res;
>
> res=fpgetmask();
>
> printf ("fp_except from fpgetmask: \t0x%02x!\n", res);
>
> except = FP_X_INV|FP_X_DZ|FP_X_OFL|FP_X_STK;
Note that FP_X_STK is output-only. Attempts to set it are ignored by
fpsetmask(), and fpgetmask() returns whatever the hardware gives for
attempts to set it in other initializations that don't mask it. It
is documented as "reserved" in at least the i486 manual, so strictly
it should not be set unconditionally, but the kernel just tries to
write 0 to it. I wish that this bit controlled stack exceptions
independently of invalid operand exceptions, so that SIGFPEs could
be generated for the programming error of stack overflow without
generating them for invalid operands which might not even be an error
in programs that generate NaNs intentionally.
Bruce
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200206011800.g51I06e09224>
