[PATCH 1/1] Keep the denormal-operand exception masked; modify FE_ALL_EXCEPT accordingly.

Houder houder@xs4all.nl
Wed Aug 15 15:04:00 GMT 2018


On 2018-08-15 16:59, Corinna Vinschen wrote:
> On Aug 15 16:54, Corinna Vinschen wrote:
>> On Aug 15 12:59, J.H. van de Water wrote:
>> > By excluding the denormal-operand exception from FE_ALL_EXCEPT, it will not
>> > be possible anymore to UNmask this exception by means of the API defined by
>> > /usr/include/fenv.h
>> >
>> > Note: terminology has changed since IEEE Std 854-1987; denormalized numbers
>> > are called subnormal numbers nowadays.
>> >
>> > This modification has basically been motivated by the fact that it is also
>> > not possible on Linux to manipulate the denormal-operand exception by means
>> > of the interface as defined by /usr/include/fenv.h. This has been the state
>> > of affairs on Linux since 2001 (Andreas Jaeger).
>> >
>> > The exceptions required by the standard (IEEE Std 754), in case they can be
>> > supported by the implementation, are:
>> > FE_INEXACT, FE_UNDERFLOW, FE_OVERFLOW, FE_DIVBYZERO and FE_INVALID.
>> >
>> > Although it is allowed to define additional exceptions, there is no reason
>> > to support the "denormal-operand exception" in this case (fenv.h), because
>> > the subnormal numbers can be handled almost as fast the normalized numbers
>> > by the hardware of the x86/x86_64 architecture. Said differently, a reason
>> > to trap on the input of subnormal numbers does not exist. At least that is
>> > what William Kahan and others at Intel asserted around 2000.
>> > (that is William Kahan of the K-C-S draft, the precursor to the standard)
>> >
>> > This commit modifies winsup/cygwin/include/fenv.h as follows:
>> >  - redefines FE_ALL_EXCEPT from 0x3f to 0x3d
>> >  - removes the definition for FE_DENORMAL
>> >  - introduces __FE_DENORM (0x2) (enum in Linux also uses __FE_DENORM)
>> >  - introduces FE_ALL_EXCEPT_X86 (0x3f), i.e. ALL x86/x86_64 FP exceptions
>> 
>> Shouldn't FE_ALL_EXCEPT_X86 be defined locally in fenv.cc only?
>> I don't see that Linux exports that definition.
> 
> Never mind, I just realize it's underscored so it's internal anyway.

Not withstanding, you were correct in your last message!

Henri



More information about the Cygwin-patches mailing list