public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: "Franथईois-Xavier Coudert" <fxcoudert@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-6097] Fortran: allow __float128 on targets where long double is not REAL(KIND=10) Date: Wed, 22 Dec 2021 11:49:37 +0000 (GMT) [thread overview] Message-ID: <20211222114937.476473858D35@sourceware.org> (raw) https://gcc.gnu.org/g:228173565eafbe34e44c1600c32e32a323eb5aab commit r12-6097-g228173565eafbe34e44c1600c32e32a323eb5aab Author: Francois-Xavier Coudert <fxcoudert@gmail.com> Date: Wed Dec 22 12:46:07 2021 +0100 Fortran: allow __float128 on targets where long double is not REAL(KIND=10) The logic for detection of REAL(KIND=16) in kinds-override.h made assumptions: -- if real(kind=10) exists, i.e. if HAVE_GFC_REAL_10 is defined, then it is necessarily the "long double" type -- if real(kind=16) exists, then: * if HAVE_GFC_REAL_10, real(kind=16) is "__float128" * otherwise, real(kind=16) is "long double" This may not always be true. Take the aarch64-apple-darwin port, it has double == long double == binary64, and __float128 == binary128. We already have more fine-grained logic in the mk-kinds-h.sh script, where we actually check the Fortran kind corresponding to C’s long double. So let's use it, and emit the GFC_REAL_16_IS_FLOAT128 / GFC_REAL_16_IS_LONG_DOUBLE macros there. libgfortran/ChangeLog: * kinds-override.h: Move GFC_REAL_16_IS_* macros... * mk-kinds-h.sh: ... here. Diff: --- libgfortran/kinds-override.h | 23 ++++------------------- libgfortran/mk-kinds-h.sh | 6 +++++- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/libgfortran/kinds-override.h b/libgfortran/kinds-override.h index c9e874a3f38..5f7840b0c89 100644 --- a/libgfortran/kinds-override.h +++ b/libgfortran/kinds-override.h @@ -23,24 +23,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see <http://www.gnu.org/licenses/>. */ -/* What are the C types corresponding to the real(kind=10) and - real(kind=16) types? We currently rely on the following assumptions: - -- if real(kind=10) exists, i.e. if HAVE_GFC_REAL_10 is defined, - then it is necessarily the "long double" type - -- if real(kind=16) exists, then: - * if HAVE_GFC_REAL_10, real(kind=16) is "__float128" - * otherwise, real(kind=16) is "long double" - To allow to change this in the future, we create the - GFC_REAL_16_IS_FLOAT128 macro that is used throughout libgfortran. */ - -#if defined(HAVE_GFC_REAL_16) -# if defined(HAVE_GFC_REAL_10) -# define GFC_REAL_16_IS_FLOAT128 -# if !defined(HAVE_FLOAT128) -# error "Where has __float128 gone?" -# endif -# else -# define GFC_REAL_16_IS_LONG_DOUBLE -# endif +/* Ensure that TFmode is available under. */ + +#if defined(GFC_REAL_16_IS_FLOAT128) && !defined(HAVE_FLOAT128) +# error "Where has __float128 gone?" #endif diff --git a/libgfortran/mk-kinds-h.sh b/libgfortran/mk-kinds-h.sh index 249619061c6..572878ce891 100755 --- a/libgfortran/mk-kinds-h.sh +++ b/libgfortran/mk-kinds-h.sh @@ -64,15 +64,19 @@ for k in $possible_real_kinds; do case $k in 4) ctype="float" ; cplxtype="complex float" ; suffix="f" ;; 8) ctype="double" ; cplxtype="complex double" ; suffix="" ;; + # If we have a REAL(KIND=10), it is always long double 10) ctype="long double" ; cplxtype="complex long double" ; suffix="l" ;; - 16) if [ $long_double_kind -eq 10 ]; then + # If we have a REAL(KIND=16), it is either long double or __float128 + 16) if [ $long_double_kind -ne 16 ]; then ctype="__float128" cplxtype="_Complex float __attribute__((mode(TC)))" suffix="q" + echo "#define GFC_REAL_16_IS_FLOAT128" else ctype="long double" cplxtype="complex long double" suffix="l" + echo "#define GFC_REAL_16_IS_LONG_DOUBLE" fi ;; *) echo "$0: Unknown type" >&2 ; exit 1 ;; esac
reply other threads:[~2021-12-22 11:49 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20211222114937.476473858D35@sourceware.org \ --to=fxcoudert@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).