https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95640

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |burnus at gcc dot gnu.org

--- Comment #21 from Tobias Burnus <burnus at gcc dot gnu.org> ---
(In reply to Bill Long from comment #19)
> On an ia64 Intel target that does not support x87 floating point, it seems
> that having IEEE_SUPPORT_DATATYPE (1._10)  return .true. is as error.  If
> that is fixed, will the rest of the issue fall into place?

https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libgfortran/ieee/ieee_arithmetic.F90#l1353
has:

#ifdef HAVE_GFC_REAL_10
SUPPORTMACRO(IEEE_SUPPORT_DATATYPE,10,.true.)
#endif

This could be unconditionally set to .false. The question is whether that makes
sense or not – or rather what condition needs to be fulfilled to have it set to
true or false.

(Likewise for all ieee_* functions, handled either in the library file or in
the compiler itself, like simplify_ieee_selected_real_kind.)

 * * *

Regarding REAL KIND=10, we have
https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/fortran/trans-types.c#l463

      /* Let the kind equal the precision divided by 8, rounding up.  Again,
         this insulates the programmer from the underlying byte size.

         Also, it effectively deals with IEEE extended formats.  There, the
         total size of the type may equal 16, but it's got 6 bytes of padding
         and the increased size can get in the way of a real IEEE quad format
         which may also be supported by the target.

         We round up so as to handle IA-64 __floatreg (RFmode), which is an
         82 bit type.  Not to be confused with __float80 (XFmode), which is
         an 80 bit type also supported by IA-64.  So XFmode should come out
         to be kind=10, and RFmode should come out to be kind=11.  Egads.  */

      kind = (GET_MODE_PRECISION (mode) + 7) / 8;

Reply via email to