This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] powerpc: Fix the compiler mode used with C++ when -mabi=ieeelongdouble


Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com> writes:

> [ text/plain ]
> Joseph Myers <joseph@codesourcery.com> writes:
>
>> On Fri, 27 Apr 2018, Tulio Magno Quites Machado Filho wrote:
>>
>>> When compiling C++  code with -mabi=ieeelongdouble, KCtype is
>>> unavailable and TCtype should be used instead.
>>
>> (Uses of __HAVE_DISTINCT_FLOAT128 and __HAVE_FLOAT64X_LONG_DOUBLE will 
>> need careful review to see if additional macros are needed to cover this 
>> -mabi=ieeelongdouble case, but the general rule is that they relate to the 
>> *default* long double type for that glibc binary - meaning the one with 
>> __*l symbols, as selection of such implementation-namespace one-per-format 
>> symbols is generally what they are used for in installed headers - meaning 
>> the existing definitions for powerpc remain correct even with 
>> -mabi=ieeelongdouble and you should not copy the 
>> sysdeps/ieee754/ldbl-128/bits/floatn.h definitions of those macros.)
>
> Ack.
>
> I haven't seen requirement for additional macros yet, but when _Float128 is
> typedef'ed to long double, the following changes are also necessary:

I should have said "kind of changes".  We have to make the same changes to a
few other places in math/math.h.

> diff --git a/math/math.h b/math/math.h
> index 9b6cdce431..1f1ae6014f 100644
> --- a/math/math.h
> +++ b/math/math.h
> @@ -1025,7 +1025,11 @@ issignaling (long double __val)
>    return __issignalingl (__val);
>  #  endif
>  }
> -#  if __HAVE_DISTINCT_FLOAT128
> +#  if __HAVE_DISTINCT_FLOAT128 \
> +      && (!defined __cplusplus \
> +	  || defined __cplusplus && __LDBL_MANT_DIG__ != 113)
> +/* When using an IEEE 128-bit long double, _Float128 is defined as long double
> +   in C++.  */
>  inline int issignaling (_Float128 __val) { return __issignalingf128 (__val); }
>  #  endif
>  } /* extern C++ */
>
> Is it architecturally-agnostic OK?

-- 
Tulio Magno


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]