[PATCH, gfortran testsuite]: Do not load denormals in gfortran.fortran_torture/intrinsic_nearest.f90
Tim Prince
n8tm@aol.com
Mon Aug 24 17:11:00 GMT 2009
IainS wrote:
>
> On 24 Aug 2009, at 03:42, Tim Prince wrote:
>
>> IainS wrote:
>>> On 23 Aug 2009, at 01:26, Tim Prince wrote:
>>>> Steve Kargl wrote:
>>>>> On Sat, Aug 22, 2009 at 07:20:48AM -0700, Tim Prince wrote:
>>>>>> N.M. Maclaren wrote:
>>>>>>> On Aug 21 2009, Uros Bizjak wrote:
>>>>>>>> On 08/21/2009 07:09 PM, Tobias Burnus wrote:
>>>>>>>>
>>>>>>>>>> It is not nice to upset FP hardware of various target
>>>>>>>>>> architectures by
>>>>>>>>>> generating denormalized single-precision FP numbers [1] in the
>>>>>>>>>> testsuite. ...
>>>>>> It does look dangerous to generate specific bit patterns which are
>>>>>> likely to break with options such as -ffast-math.
>>>>>>> Most HPC systems use hard underflow, because it is faster.
>>>>>> This is likely to change a year a so from now, no doubt influenced
>>>>>> by gfortran not having adequate provision to control underflow
>>>>>> setting, and gcc programmers not caring to deal with it.
>>>>> Tim,
>>>>> You know where to find the source code for GCC. I suspect
>>>>> that more than one person will be indebted to you when you
>>>>> submit your patch that addresses this issue.
>>>> I suppose the least controversial part of this would be to supply
>>>> the IEEE_ARITHMETIC subroutines IEEE_SET_UNDERFLOW_MODE and
>>>> IEEE_GET_UNDERFLOW_MODE in libgfortran, as it looks straightforward
>>>> in current gcc/gfortran with iso_c_interop for the i386/x64
>>>> platforms. I don't have any other targets available to test
>>> I'm willing to stick my neck out to try and replicate what you do on
>>> i386/x64 on PowerPC (at least G4 and G5 which I have access too).
>>> ( but I might need help :-) )
>>> Iain
>> I put an initial version of get/set underflow and rounding modes for
>> -fpmath=sse with a rudimentary test driver in
>> http://sites.google.com/site/tprincesite/Home/gfortran-ieee-arithmetic
>>
>> On my target, it turned out that -ffast-math doesn't set abrupt
>> underflow.
>
> Thanks Tim,
>
> That looks as brief as I'd expect (given access to the assembly language
> necessary to manipulate the chip directly).
> (it would be pretty similar on PPC [set/clear a bit in a control reg]
> --- minus the issues below).
>
> I understand the floating point, and the assembly language mechanisms...
> ... and I'm partially familiar with the layout of gcc.
>
> There are three things I need to understand better:
>
> 1/
>
> Yesterday I reviewed (briefly) the options on the PowerPC target:
> .. there is a bit in the status reg. that sets "non-IEEE" mode.
>
> One side-effect of setting that bit is that flush-to-zero is *allowed*
> for de-normalized numbers.
>
> However:
> (a) it does not seem that such an action is mandatory on the setting of
> the bit;
> (b) I need to ascertain what other side-effects might be allowed from
> setting it.
>
> In other words, there isn't a "set flush-to-zero" bit per se.
> Possibly, it might be that on all commonly used chips that is the only
> action of the "non-IEEE" bit (need to check and implement a way of
> distinguishing).
> It is, however, certain that there are differences in handling it
> between at least two older PPC variants (603e and 604).
>
> Possibly a can of wriggly things here - so (2) is essential.
>
> 2/
> The way in which libgfortran handles target-specific code.
>
> 3/
> Perhaps, especially in light of (1) above, someone could point me at a
> place to download the specific sections of the spec.
> ... so that I can read how to handle non-compliance and partial
> compliance on a particular chip.
> Google of IEEE_SET_UNDERFLOW_MODE was not especially revealing (it
> mainly turns up compiler documentation talking about the application to
> that implementation).
>
> cheers,
> Iain
I'll try making <fenv.h> the primary implementation for rounding
control. <fenv.h> doesn't cover underflow mode. I don't suppose anyone
cares that <fenv.h> is likely to work only for glibc targets, while
<xmmintrin.h> (for SSE only) doesn't depend on glibc. I haven't seen
any examples of autoconf to choose between <fenv.h> and <xmmintrin.h>.
More information about the Fortran
mailing list