From patchwork Mon Apr 30 14:02:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tulio Magno Quites Machado Filho X-Patchwork-Id: 27034 Received: (qmail 14734 invoked by alias); 30 Apr 2018 14:02:50 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 14707 invoked by uid 89); 30 Apr 2018 14:02:49 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-27.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_LOW, SPF_PASS, URIBL_RED autolearn=ham version=3.3.2 spammy=careful X-HELO: mx0a-001b2d01.pphosted.com From: Tulio Magno Quites Machado Filho To: Joseph Myers Cc: libc-alpha@sourceware.org, meissner@linux.ibm.com Cc: Subject: Re: [PATCH] powerpc: Fix the compiler mode used with C++ when -mabi=ieeelongdouble In-Reply-To: References: <20180427171150.28010-1-tuliom@linux.ibm.com> User-Agent: Notmuch/0.25 (http://notmuchmail.org) Emacs/25.3.1 (x86_64-redhat-linux-gnu) Date: Mon, 30 Apr 2018 11:02:26 -0300 MIME-Version: 1.0 X-TM-AS-GCONF: 00 x-cbid: 18043014-0008-0000-0000-000009AFA7A0 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00008951; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000257; SDB=6.01025476; UDB=6.00523666; IPR=6.00804707; MB=3.00020859; MTD=3.00000008; XFM=3.00000015; UTC=2018-04-30 14:02:32 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18043014-0009-0000-0000-000047091143 Message-Id: <8736zc7pxp.fsf@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2018-04-30_05:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1804300135 Joseph Myers 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. > > In that case (-mabi=ieeelongdouble), I'd expect you to use "typedef long > double _Float128;" for C++, and _Complex long double as the definition of > __CFLOAT128 for C++, and x##l as the definition of __f128 for C++, as it's > essentially the case implemented by > sysdeps/ieee754/ldbl-128/bits/floatn.h. You shouldn't need to use mode > attributes at all. Agreed. > (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: Is it architecturally-agnostic OK? 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++ */