[Bug libfortran/58020] Code for handling IEEE exceptions

2016-09-16 Thread jvdelisle at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020
Bug 58020 depends on bug 59015, which changed state.

Bug 59015 Summary: I/O of PARAMETER derived type with private component is 
forbidden
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59015

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |FIXED

[Bug libfortran/58020] Code for handling IEEE exceptions

2014-06-07 Thread fxcoudert at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

Francois-Xavier Coudert fxcoudert at gcc dot gnu.org changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |DUPLICATE

--- Comment #25 from Francois-Xavier Coudert fxcoudert at gcc dot gnu.org ---
Thanks for the suggestion and code. I have decided to follow up a different
route to achieve support of the IEEE intrinsic modules in gfortran (patch
currently submitted for review here:
https://gcc.gnu.org/ml/fortran/2014-06/msg00038.html). I am thus closing this
PR, and marking it as a duplicate of PR29383, so we retain a link between the
two.

*** This bug has been marked as a duplicate of bug 29383 ***


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-11-24 Thread kargl at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

kargl at gcc dot gnu.org changed:

   What|Removed |Added

 CC|kargl at gcc dot gnu.org   |

--- Comment #24 from kargl at gcc dot gnu.org ---
Remove myself from cc list.


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-11-06 Thread fxcoudert at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #23 from Francois-Xavier Coudert fxcoudert at gcc dot gnu.org ---
(In reply to Tobias Burnus from comment #16)
 I want to mention that there is now some additional support for IEEE in
 libgfortran/config. None of those functions is exported, yet - that permits
 to tweak their ABI. All work on x86 hardware, glibc, sysv (= Solaris,
 FreeBSD), AIX - which should cover most systems.

Yes. After thinking about it some more, we'll need to add two save/restore FPU
state functions.


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-11-05 Thread fxcoudert at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

Francois-Xavier Coudert fxcoudert at gcc dot gnu.org changed:

   What|Removed |Added

 CC||fxcoudert at gcc dot gnu.org
 Blocks||29383

--- Comment #13 from Francois-Xavier Coudert fxcoudert at gcc dot gnu.org ---
I may have a bit of time in November and December to look at this. I actually
had started implementing the IEEE modules in gfortran back in 2008-2009, but
never got too far (I was unclear, back then, on the exact requirements for
things like constant folding… some interps have made clear that our job is
actually easier than I thought back then).

So, a few questions to Fred and Richard:

 0. Thanks for contributing your work to our open-source effort!
 1. What is the current status of your code w.r.t. the IEEE modules? Do you
have full coverage? Full test coverage? Does it depend on 32 vs 64-bit?
 2. Although you don't plan to support other architectures than i386/x86_64, we
have to think about it. The current approach does not seem to lend itself to
writing new ports easily. How do you think we could better insulate the
processor-specific code from the higher-level IEEE modules themselves?

I have started reading the code, but your answers would be very much
appreciated!

[Bug libfortran/58020] Code for handling IEEE exceptions

2013-11-05 Thread fkrogh at mathalacarte dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #14 from fkrogh at mathalacarte dot com ---
Hi Francois-Xavier --
 I'm sorry, but Richard did all the work on this, and I'm just a 
sorry middle man.  We are both people specializing in computational 
mathematics, and thus not likely to be helpful with respect to your 
question number 2.  With this email I'm asking Richard to give you a 
more detailed response.
Many thanks for looking into this,
 Fred


 Original Message 
Subject: [Bug libfortran/58020] Code for handling IEEE exceptions
Date: Tue, 05 Nov 2013 13:54:19 +
From: fxcoudert at gcc dot gnu.org gcc-bugzi...@gcc.gnu.org
To: fkrogh#g...@mathalacarte.com



http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

Francois-Xavier Coudert fxcoudert at gcc dot gnu.org changed:

What|Removed |Added

  CC||fxcoudert at gcc dot gnu.org
  Blocks||29383

--- Comment #13 from Francois-Xavier Coudert fxcoudert at gcc dot gnu.org ---
I may have a bit of time in November and December to look at this. I actually
had started implementing the IEEE modules in gfortran back in 2008-2009, but
never got too far (I was unclear, back then, on the exact requirements for
things like constant folding… some interps have made clear that our job is
actually easier than I thought back then).

So, a few questions to Fred and Richard:

  0. Thanks for contributing your work to our open-source effort!
  1. What is the current status of your code w.r.t. the IEEE modules? Do you
have full coverage? Full test coverage? Does it depend on 32 vs 64-bit?
  2. Although you don't plan to support other architectures than i386/x86_64,
we
have to think about it. The current approach does not seem to lend itself to
writing new ports easily. How do you think we could better insulate the
processor-specific code from the higher-level IEEE modules themselves?

I have started reading the code, but your answers would be very much
appreciated!

[Bug libfortran/58020] Code for handling IEEE exceptions

2013-11-05 Thread fkrogh at mathalacarte dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #15 from fkrogh at mathalacarte dot com ---
Hi Francois-Xavier --
  I'm sorry, but Richard did all the work on this, and I'm just a
sorry middle man.  We are both people specializing in computational
mathematics, and thus not likely to be helpful with respect to your
question number 2.  With this email I'm asking Richard to give you a
more detailed response.
Many thanks for looking into this,
  Fred



On 11/05/2013 05:54 AM, fxcoudert at gcc dot gnu.org wrote:
 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

 Francois-Xavier Coudert fxcoudert at gcc dot gnu.org changed:

 What|Removed |Added
 
   CC||fxcoudert at gcc dot gnu.org
   Blocks||29383

 --- Comment #13 from Francois-Xavier Coudert fxcoudert at gcc dot gnu.org 
 ---
 I may have a bit of time in November and December to look at this. I actually
 had started implementing the IEEE modules in gfortran back in 2008-2009, but
 never got too far (I was unclear, back then, on the exact requirements for
 things like constant folding… some interps have made clear that our job is
 actually easier than I thought back then).

 So, a few questions to Fred and Richard:

   0. Thanks for contributing your work to our open-source effort!
   1. What is the current status of your code w.r.t. the IEEE modules? Do you
 have full coverage? Full test coverage? Does it depend on 32 vs 64-bit?
   2. Although you don't plan to support other architectures than i386/x86_64, 
 we
 have to think about it. The current approach does not seem to lend itself to
 writing new ports easily. How do you think we could better insulate the
 processor-specific code from the higher-level IEEE modules themselves?

 I have started reading the code, but your answers would be very much
 appreciated!


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-11-05 Thread burnus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

Tobias Burnus burnus at gcc dot gnu.org changed:

   What|Removed |Added

 CC||burnus at gcc dot gnu.org

--- Comment #16 from Tobias Burnus burnus at gcc dot gnu.org ---
(In reply to Francois-Xavier Coudert from comment #13)
 I may have a bit of time in November and December to look at this. I
 actually had started implementing the IEEE modules in gfortran back in
 2008-2009, but never got too far (I was unclear, back then, on the exact
 requirements for things like constant folding… some interps have made clear
 that our job is actually easier than I thought back then).

One problem is that behaviour changes when a module is loaded. Related:

- Similar issue in C/C++, cf. #pragma STDC FENV_ACCESS ON and also
http://gcc.gnu.org/ml/gcc-patches/2013-10/msg01131.html

- Changes required for the new ISO/IEC/IEEE 60559:2011 standard
(http://www.iso.org/iso/catalogue_detail.htm?csnumber=57469):
http://j3-fortran.org/doc/year/13/13-356.txt


  2. Although you don't plan to support other architectures than i386/x86_64,
 we have to think about it.

I want to mention that there is now some additional support for IEEE in
libgfortran/config. None of those functions is exported, yet - that permits to
tweak their ABI. All work on x86 hardware, glibc, sysv (= Solaris, FreeBSD),
AIX - which should cover most systems.

a) Enable trapping: set_fpu (invalid, denormal, zero, overflow, underflow,
inexact)  [Used by -ffpe-trap=...]

b) get_fpu_except_flags - returns which exception have been raised by the CPU.
[New in 4.9; used to print those with STOP/ERROR STOP; -ffpe-summary=...]

c) set_fpu_rounding_mode/get_fpu_rounding_mode [New in 4.9; used for I/O
rounding on *input*, only works with atois which honour the rounding mode,
such as very recent GLIBCs.] - Note that Fortran's required rounding mode
compatible is not supported (nearest comes close but has different results
for a tie).

[Bug libfortran/58020] Code for handling IEEE exceptions

2013-11-05 Thread fxcoudert at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #17 from Francois-Xavier Coudert fxcoudert at gcc dot gnu.org ---
(In reply to Tobias Burnus from comment #16)
 I want to mention that there is now some additional support for IEEE in
 libgfortran/config.

Yes, I see that this has grown since I first introduced it (in 2005! it's a
while back). That's good, and we can use this (possibly modified) interface to
the hardware/OS-specific function calls.

Another issue I wanted to get your opinion on, Tobias: we can't implement the
IEEE modules fully on the library side, because of three things:

  1. Changes in behavior when the modules are loaded: I'm not sure I understand
the full extent of these changes. Comment #11 in PR29383 seems to imply that
there are no such changes.

  2. Some IEEE functions are allowed in constant or specification expressions,
thus requiring front-end cooperation: IEEE_SELECTED_REAL_KIND is allowed in
constant expressions; IEEE_SUPPORT_* functions are allowed in specification
expressions.

  3. Library-side implementation of some functions (IEEE_IS_NAN, to give only
one example) will require a function call, while emitting code from the
front-end (like we do for our own ISNAN) will not incur that penalty.

However, for the rest of it, library-side implementation is easier. So, do you
think we can implement the module in libgfortran, and add only minimal
front-end tweaking to catch the necessary cases?


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-11-05 Thread fxcoudert at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #18 from Francois-Xavier Coudert fxcoudert at gcc dot gnu.org ---
(In reply to Francois-Xavier Coudert from comment #17)
 IEEE_SUPPORT_* functions are allowed in specification expressions

On second thought, I think we can handle these on the library side (PURE
functions in modules are allowed in specification expressions, right?)


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-11-05 Thread fxcoudert at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #20 from Francois-Xavier Coudert fxcoudert at gcc dot gnu.org ---
(In reply to Steve Kargl from comment #19)
 (10) a reference to any other standard intrinsic function where each
  argument is a restricted expression

Yes, but the procedures of the intrinsic modules IEEE_* are not themselves
intrinsic procedures (note 14.1 of F2008).

The IEEE_SUPPORT_* functions are allowed under item 9 of the same list
(specification inquiry), because of item 4.3 on the same page: A
specification inquiry is a reference to (3) an inquiry function from the
intrinsic modules IEEE ARITHMETIC and IEEE EXCEPTIONS.

But, as I noted, this can be handled by a library-side module. The only tricky
case remaining, I think, is the IEEE_SELECTED_REAL_KIND, which will have to be
specifically handled by the front-end.


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-11-05 Thread sgk at troutmask dot apl.washington.edu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #19 from Steve Kargl sgk at troutmask dot apl.washington.edu ---
On Tue, Nov 05, 2013 at 04:10:00PM +, fxcoudert at gcc dot gnu.org wrote:
 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020
 
 --- Comment #18 from Francois-Xavier Coudert fxcoudert at gcc dot gnu.org 
 ---
 (In reply to Francois-Xavier Coudert from comment #17)
  IEEE_SUPPORT_* functions are allowed in specification expressions
 
 On second thought, I think we can handle these on the library side (PURE
 functions in modules are allowed in specification expressions, right?)

There's a long list in F2008, 7.1.11 on what is permitted in a
specification expression.  Item (10) is

(10) a reference to any other standard intrinsic function where each
 argument is a restricted expression,

All intrinsic functions are PURE unless otherwise specifically stated
in the description of a given intrinsic function.

This differs tremendously from the short list of intrinsic functions
that were permitted by F95.


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-11-05 Thread richard.koolhans at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #21 from richard.koolhans at gmail dot com ---

I'm not really an expert on any architecture.  But there is an important point
that I think should not be missed.  According to Van Snyder, a long-time member
of the Fortran standards committee, if there is no support for the IEEE
exceptions, a module must be provided that enables a program to query whether
such support is provided.  I strongly recommend that such an intrinsic module
be provided for architectures that are not supported.  

In the test driver I've attempted to have full coverage.  In particular the
status flags from the FPU and SSE units are or-ed or “and-ed” together to
catch or clear exceptions that may occur in either place.  Since there are no
64 bit status registers, I don't see any difference in code for 32 vs 64-bit. 
Little use of the FPU is made in the machine code these days.  But this feature
was important because an assembly code could use the FPU, have an exception,
and only dealing with the SSE flags would miss it.

Your question in 2. was not answered, but I don’t understand  these issues. 
There is a document IEEE.pdf in the distributed package that has some
discussion about decisions made to deal with threads.

Richard J. Hanson

[Bug libfortran/58020] Code for handling IEEE exceptions

2013-11-05 Thread sgk at troutmask dot apl.washington.edu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #22 from Steve Kargl sgk at troutmask dot apl.washington.edu ---
On Tue, Nov 05, 2013 at 05:03:25PM +, richard.koolhans at gmail dot com
wrote:
 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020
 
 --- Comment #21 from richard.koolhans at gmail dot com ---
 
 I'm not really an expert on any architecture.  But there is an important
 point that I think should not be missed.  According to Van Snyder, a
 long-time member of the Fortran standards committee, if there is no
 support for the IEEE exceptions, a module must be provided that enables
 a program to query whether such support is provided.  I strongly
 recommend that such an intrinsic module be provided for architectures
 that are not supported.  

I suspect that you are not recalling what Van said correctly.  
The first 2 sentences of Fortran 2008, Sec. 14 are

   The intrinsic modules IEEE_EXCEPTIONS, IEEE_ARITHMETIC, and
   IEEE_FEATURES provide support for the facilities defined by IEC
   60559:1989*.  Whether the modules are provided is processor
   dependent.

This clearly means that a processeor is not required by the
standard to provide these modules.  There is no other module
defined in Sec. 14.  AFAICT, the only way to tell if one or
more of these modules is present it to read the documentation
that comes with the processor or simply try compiling a
program that USEs them.


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-08-01 Thread dominiq at lps dot ens.fr
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #11 from Dominique d'Humieres dominiq at lps dot ens.fr ---
 The issues have hopefully been resolved and are now in the package. 
 See http://mathalacarte.com/hpcconsult

 Thanks for the comments made above.  Give feedback where it makes sense.

When c_control.c is compiled with -O3 or above, IEEE_tests_gfortran.f90 aborts
at run time with:

 Computing (w/x87) D=sqrt(A/B+C), D=0., A=0., B=0., C=0., correctly signals 
 IEEE_INVALID using gfortran  

Program received signal SIGFPE: Floating-point exception - erroneous arithmetic
operation.

Backtrace for this error:
#0  0x1000240c2
#1  0x100025a1e
#2  0x7fff80df91b9
Floating exception

The test runs without problem with -O2.


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-08-01 Thread richard.koolhans at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #12 from richard.koolhans at gmail dot com ---
Thanks for doing the test with -O3.  That is what I see, also.  My tests show:

With -O0 everything works.
With -O1 everything runs but there are some failures.
With -O2 everything runs but there are some failures.
With -O3 there is a crash, as noted.

I searched and found a suggestion about suppressing optimization within a C
code, using the gcc compiler:

http://stackoverflow.com/questions/2219829/how-to-prevent-gcc-optimizing-some-statements-in-c

I gave my local variables the additional *volatile* attribute and that solved
the optimization problem. This is preferred to requiring that -O0 be used in
the compile line.  That way other optimizations are not suppressed. My
understanding ends there.


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-07-31 Thread richard.koolhans at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

richard.koolhans at gmail dot com changed:

   What|Removed |Added

 CC||richard.koolhans at gmail dot 
com

--- Comment #10 from richard.koolhans at gmail dot com ---
The issues have hopefully been resolved and are now in the package. 
See http://mathalacarte.com/hpcconsult

Thanks for the comments made above.  Give feedback where it makes sense.


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-07-30 Thread dominiq at lps dot ens.fr
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

Dominique d'Humieres dominiq at lps dot ens.fr changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2013-07-30
 Ever confirmed|0   |1

--- Comment #4 from Dominique d'Humieres dominiq at lps dot ens.fr ---
I have tested the code at http://mathalacarte.com/hpcconsult (without reading
it).
The files IEEE_ARITHMETIC.f90 and IEEE_tests_gfortran.f90 must be compiled with
the -fno-range-check option (for the second file it triggers PR58027). On
x86_64-apple-darwin10 the output differs from the one in 'list':

--- tmp2013-07-30 12:33:24.0 +0200
+++ list2013-07-25 21:27:02.0 +0200
@@ -77,7 +77,7 @@

  Double precision rounding mode IEEE_DOWN for \pi ~= 3.142 is  value with
IEEE_UP.

- Double precision rounding mode IEEE_DOWN for \pi ~= 3.141 agrees with
IEEE_TO_ZERO.
+ Double precision rounding mode IEEE_DOWN for \pi ~= 3.142 agrees with
IEEE_TO_ZERO.

  Double precision a=IEEE_REM(4, \pi) correctly satisfies a + \pi==4.


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-07-30 Thread burnus at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #5 from Tobias Burnus burnus at gcc dot gnu.org ---
Cross-ref: See also PR29383.

(In reply to Fred Krogh from comment #0)
 Dr. Richard Hanson has written code to provide IEEE exception handling to
 gfortran.

Cool! I think it should be linked from the Wiki and somewhat made known. Even
prior (or without) inclusion in GCC/gfortran, the code is very useful for
users!


(In reply to kargl from comment #1)
 1) Hanson needs to have a copyright assignment on file with FSF
before the code can be used.

Or rather: Before it can be included in GCC/shipped with gfortran.

(In reply to Fred Krogh from comment #2)
 1. Hanson is willing to assign the copyright if you expect to be using this
 work.  There were thoughts to include this work on a SIAM website where we
 think SIAM would want the copyright

The Free Software Foundation (FSF) only requires a nonexclusive copyright
transfer (for inclusion in GCC). Thus, it could be additionally posted to the
SIAM webpage - assuming SIAM also is fine with a nonexclusive copyright
transfer. See http://gcc.gnu.org/wiki/GettingStarted (Basics, Item 1) for
details.


(In reply to kargl from comment #1)
 2) More importantly, the code appears to only support the i386
and amd64 architectures.  gfortran runs are far more processors
than these.

My personal long-term plan is to add the necessary bits for IEEE to
libgfortran/config/ - and then to use them from there. Currently supported are
setting/getting the rounding mode, obtaining the set exceptions flags and
setting the exception trapping. That's supported for i386/x86-64, GLIBC, SysV
(at least: FreeBSD and Solaris) and AIX; see
http://gcc.gnu.org/viewcvs/gcc/trunk/libgfortran/config/

[Note: Those are currently only internally exported. Before making them
externally callable, one should ensure that the ABI won't change.]

Additionally, I'd like to generate the IEEE modules on the fly - like
ISO_C_Binding and Fortran_Dev. That gives some more optimization possibilities
and also could be used to honor SH's/Alpha's -mieee compiler flag.


One way forward would be to check whether libgfortran/config/'s function are
sufficient - and if not, add more or modify the ABI. Those could then be
exported (public ABI).

In principle, one could then also ship the modules - However, the biggest
question is how to handle the functions in the module. Those then become part
of the public ABI of gfortran and has to continued to be supported, even if we
could move some function to the compiler itself (generated code).


 3) messy_m.f90 includes the statement:
I haven't looked at the code to determine if messy_m.f90 is actually
needed.

It seems to be only used for testing. (In any case, it would be useful to have
some test cases in the testsuite.)


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-07-30 Thread richard.koolhans at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #6 from richard.koolhans at gmail dot com ---
Bonjour Dominique-
Le reste sera l'anglais! Voilà pour mon cours de français.

I see your bug report. There are two matters to track down here. The first
one is the diagnostic of 'PR58027'. This may require you to report a line
number. That would be great. Testing that I have done is with the gfortran
compiler on Krogh's machine and my own with the Intel compiler. I do not
have access to the machine you are using.

The second matter is the difference in a line of output. That is the
printing of the 4 digit approximation to \pi. The internal constant \pi
itself comes from the stored value in the x87. The output of the number
comes from the routine messy. I expect the hardware value is correct. So
one machine writes 3.141 wit messy, and the other 3.142.

I appreciate the feedback. Hope we can find the issues and clear them up.

Richard

[Bug libfortran/58020] Code for handling IEEE exceptions

2013-07-30 Thread dominiq at lps dot ens.fr
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #7 from Dominique d'Humieres dominiq at lps dot ens.fr ---
 I see your bug report. There are two matters to track down here. 
 The first one is the diagnostic of 'PR58027'. This may require you 
 to report a line number. That would be great. Testing that I have 
 done is with the gfortran compiler on Krogh's machine and my own 
 with the Intel compiler. I do not have access to the machine you 
 are using.

The ICE leading to PR58027 is

[macbook] bug/IEEE_1% gfc -c IEEE_tests_gfortran.f90
IEEE_tests_gfortran.f90: In function 'ieee_tests':
IEEE_tests_gfortran.f90:304:0: internal compiler error: in
gfc_conv_array_initializer, at fortran/trans-array.c:5512
 SA=transfer(ISCLASS(I),SA)

However any use of ISCLASS leads to the ICE because the parameter array is not
built. To understand why, I have compiled the following test

integer, parameter :: isclass = Z'FF80'
end

and got

isclass_2.f90:1.35:

integer, parameter :: isclass = Z'FF80'
   1
Error: Arithmetic overflow converting INTEGER(16) to INTEGER(4) at (1). This
check can be disabled with the option -fno-range-check

with -m64 and

isclass_2.f90:1.35:

integer, parameter :: isclass = Z'FF80'
   1
Error: Arithmetic overflow converting INTEGER(8) to INTEGER(4) at (1). This
check can be disabled with the option -fno-range-check

with -m32. The gfortran rationale is that Z'FF80' is converted to the
highest integer kind (8 with -m32 or 16 with -m64) as 2**32-8388608, i.e., a
positive number larger that huge(1)=2**31-1.

 The second matter is the difference in a line of output. That is the
 printing of the 4 digit approximation to \pi. The internal constant \pi
 itself comes from the stored value in the x87. The output of the number
 comes from the routine messy. I expect the hardware value is correct. So
 one machine writes 3.141 wit messy, and the other 3.142.

Apparently 'CALL IEEE_SET_ROUNDING_MODE(IEEE_TO_ZERO)' propagates into

call messy(E,'$N Double precision rounding mode IEEE_DOWN
   for \pi ~= $R agrees with IEEE_TO_ZERO.',rdat=[DA])

If I add

  CALL IEEE_SET_ROUNDING_MODE(IEEE_NEAREST)

before the line

  IF(DC == DA) THEN ! Round down should agree withround to zero, here.

then my output matches the one in list.


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-07-30 Thread sgk at troutmask dot apl.washington.edu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #8 from Steve Kargl sgk at troutmask dot apl.washington.edu ---
On Tue, Jul 30, 2013 at 05:31:01PM +, dominiq at lps dot ens.fr wrote:
 
 with -m32. The gfortran rationale is that Z'FF80' is converted to the
 highest integer kind (8 with -m32 or 16 with -m64) as 2**32-8388608, i.e., a
 positive number larger that huge(1)=2**31-1.

It is not a gfortran rationale.  It is what the Fortran mandates!


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-07-30 Thread fkrogh#gcc at mathalacarte dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #9 from Fred Krogh fkrogh#gcc at mathalacarte dot com ---
Concering Fortran language standards, our guru is W. Van Snyder a long time
member of the Fortran Standards committee.  He has said to me in an email:
It's OK not to support stuff, but the inquiry functions have to be there to
tell you.


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-07-29 Thread kargl at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

kargl at gcc dot gnu.org changed:

   What|Removed |Added

 CC||kargl at gcc dot gnu.org

--- Comment #1 from kargl at gcc dot gnu.org ---
1) Hanson needs to have a copyright assignment on file with FSF
   before the code can be used.

2) More importantly, the code appears to only support the i386
   and amd64 architectures.  gfortran runs are far more processors
   than these.

3) messy_m.f90 includes the statement:

   ! This code is free for noncommercial use as long as this source
   ! file is included.  It is recommended that the test file, tmessy
   ! be included as well.

   I haven't looked at the code to determine if messy_m.f90 is actually
   needed.


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-07-29 Thread fkrogh#gcc at mathalacarte dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #2 from Fred Krogh fkrogh#gcc at mathalacarte dot com ---
1. Hanson is willing to assign the copyright if you expect to be using this
work.  There were thoughts to include this work on a SIAM website where we
think SIAM would want the copyright, but if gfortran wants to use this work it
could be posted someplace that does not require copyright.  Perhaps you could
provide a link that describe how this assignment can be done.  The SIAM
publication is still work in progress and the package can be noted as
copyrighted in accordance with your standards.

2. There are no plans to support other architectures.  The code is useful for
the most prevalent one, and it is hoped would be useful there, as well as
helpful to people interested in ports to other platforms.  The Fortran standard
says it is ok to *not* implement the IEEE modules, but there should be a module
present on non-x86 machines that indicates this lack of support.  Presently
there is no support and no IEEE module of any kind.

3. The messy code is code I wrote, and is currently (I think) likely to be
published in the Transactions on Mathematical Software.  That code is used only
in the testing code and is not used in what should be considered the main
submission.  It does nothing more that give pretty output of results.

Please let us know, if given the above, you have an interest in pursuing this
further.
Fred


[Bug libfortran/58020] Code for handling IEEE exceptions

2013-07-29 Thread sgk at troutmask dot apl.washington.edu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020

--- Comment #3 from Steve Kargl sgk at troutmask dot apl.washington.edu ---
On Mon, Jul 29, 2013 at 09:03:53PM +, fkrogh#gcc at mathalacarte dot com
wrote:
 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58020
 
 --- Comment #2 from Fred Krogh fkrogh#gcc at mathalacarte dot com ---
 1. Hanson is willing to assign the copyright if you expect to be using this
 work.  There were thoughts to include this work on a SIAM website where we
 think SIAM would want the copyright, but if gfortran wants to use this work it
 could be posted someplace that does not require copyright.  Perhaps you could
 provide a link that describe how this assignment can be done.  The SIAM
 publication is still work in progress and the package can be noted as
 copyrighted in accordance with your standards.

Given your 2) below, I suspect that the code would not be used
within gfortran.  If the code appears on the SIAM site or some
other (semi-)permanent websire, then adding a link from the 
gfortran wiki under Using gfortran may be appropriate.

 2. There are no plans to support other architectures.

The problem is that gfortran works on a large selection of
architectures.  We cannot simply pick to support i386/x86_64
and ignore all the others.  At the very least, IEEE_FEATURES
should report that IEEE 754 is not supported for these lesser
archs.

 The Fortran standard says it is ok to *not* implement the IEEE modules,

This is sort of true.

 but there should be a module present on non-x86 machines that indicates
 this lack of support.

This is not required by the standard.

 Presently there is no support and no IEEE module of any kind.

Yep, which is permitted by the standard.

The standard actually states:

Whether the modules are provided is processor dependent.

 3. The messy code is code I wrote, and is currently (I think) likely
to be published in the Transactions on Mathematical Software.  That
code is used only in the testing code and is not used in what should
be considered the main submission.  It does nothing more that give
pretty output of results.

Thanks for the clarification on the messy code.