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;