On Wed, 24 Sep 2014, Uros Bizjak wrote:
However, alpha *does* support all IEEE features, the only problem is
in its default model, which is for some reason "High-Performance
IEEE-Format Arithmetic" (please see alpha AHB [1], section 4.7.6.5).
This model "does not require the overhead of an operating system
completion handler and can be the fastest of the three IEEE models.".
Unfortunately, this model also "notifies applications of all
exceptional floating-point operations". Denormals are considered
non-finite IEEE values, so they trap.
When the target is in certain "high-speed" mode, it is up to the user
to obey all the limitations, in this particular case, that only IEEE
finite numbers are provided. This is not the case with the original
testcase, so I'd say that the test is out of specs. It beats me, why
-mieee is not the default on alpha, since current default suits
-ffast-math more, but it looks that we have to live with this mess.
(I believe -mieee is the default on some alpha platforms, maybe debian
or bsd?)
To avoid traps on denormals, -mieee has to be specified. This option
enables FP software completion that completes denormal handling, so
there is no need to "notify application ...". IMO, instead of XFAILing
the test, we should simply provide "-mieee". __*_DENORM_MIN__ should
indeed apply to the underlying FP format, not to sme target-dependent
model and its implementation details.
[1] http://www.compaq.com/cpq-alphaserver/technology/literature/alphaahb.pdf
In 4.7.6.5, I see: "Underflow results are set to zero." so this is a
functional model without denormals. According to the C11 standard, this
means DBL_HAS_SUBNORM should be 0 and DBL_TRUE_MIN should be the same as
DBL_MIN. The same is probably true on x86 with -ffast-math.
Giving DBL_TRUE_MIN an unusable value (zero or trapping) is not very
useful, while providing the real usable minimum lets users do something
meaningful with it.
The main issue is using incompatible flags in different objects or at
link time...
--
Marc Glisse