aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMichael Meissner <meissner@linux.vnet.ibm.com>2017-10-26 17:33:38 +0000
committerMichael Meissner <meissner@gcc.gnu.org>2017-10-26 17:33:38 +0000
commit73b0ac0b82fb81dbbab5738d6443b14225c3fe53 (patch)
tree1202fcd30619978b42d76853077820c36057cd5d /gcc
parentbd5a2c67cfd636b6c78f213c8ee6dac62323eff9 (diff)
downloadgcc-73b0ac0b82fb81dbbab5738d6443b14225c3fe53.zip
gcc-73b0ac0b82fb81dbbab5738d6443b14225c3fe53.tar.gz
gcc-73b0ac0b82fb81dbbab5738d6443b14225c3fe53.tar.bz2
aix.h (TARGET_IEEEQUAD_DEFAULT): Set long double default to IBM.
[gcc] 2017-10-26 Michael Meissner <meissner@linux.vnet.ibm.com> * config/rs6000/aix.h (TARGET_IEEEQUAD_DEFAULT): Set long double default to IBM. * config/rs6000/darwin.h (TARGET_IEEEQUAD_DEFAULT): Likewise. * config/rs6000/rs6000.opt (-mabi=ieeelongdouble): Move the warning to rs6000.c. Remove the Undocumented flag, since it has been documented. (-mabi=ibmlongdouble): Likewise. * config/rs6000/rs6000.c (TARGET_IEEEQUAD_DEFAULT): If it is not already set, set the default format for long double. (rs6000_debug_reg_global): Print whether long double is IBM or IEEE. (rs6000_option_override_internal): Rework setting long double format. Only warn if the user is changing the long double default and they did not use -Wno-psabi. * doc/invoke.texi (PowerPC options): Update the documentation for -mabi=ieeelongdouble and -mabi=ibmlongdouble. From-SVN: r254116
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog19
-rw-r--r--gcc/config/rs6000/aix.h3
-rw-r--r--gcc/config/rs6000/darwin.h3
-rw-r--r--gcc/config/rs6000/rs6000.c46
-rw-r--r--gcc/config/rs6000/rs6000.opt4
-rw-r--r--gcc/doc/invoke.texi10
6 files changed, 75 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4312ac2..c6e0b85 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,22 @@
+2017-10-26 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/aix.h (TARGET_IEEEQUAD_DEFAULT): Set long double
+ default to IBM.
+ * config/rs6000/darwin.h (TARGET_IEEEQUAD_DEFAULT): Likewise.
+ * config/rs6000/rs6000.opt (-mabi=ieeelongdouble): Move the
+ warning to rs6000.c. Remove the Undocumented flag, since it has
+ been documented.
+ (-mabi=ibmlongdouble): Likewise.
+ * config/rs6000/rs6000.c (TARGET_IEEEQUAD_DEFAULT): If it is not
+ already set, set the default format for long double.
+ (rs6000_debug_reg_global): Print whether long double is IBM or
+ IEEE.
+ (rs6000_option_override_internal): Rework setting long double
+ format. Only warn if the user is changing the long double default
+ and they did not use -Wno-psabi.
+ * doc/invoke.texi (PowerPC options): Update the documentation for
+ -mabi=ieeelongdouble and -mabi=ibmlongdouble.
+
2017-10-26 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
diff --git a/gcc/config/rs6000/aix.h b/gcc/config/rs6000/aix.h
index 607b42c..7354181 100644
--- a/gcc/config/rs6000/aix.h
+++ b/gcc/config/rs6000/aix.h
@@ -76,6 +76,9 @@
#undef TARGET_IEEEQUAD
#define TARGET_IEEEQUAD 0
+#undef TARGET_IEEEQUAD_DEFAULT
+#define TARGET_IEEEQUAD_DEFAULT 0
+
/* The AIX linker will discard static constructors in object files before
collect has a chance to see them, so scan the object files directly. */
#define COLLECT_EXPORT_LIST
diff --git a/gcc/config/rs6000/darwin.h b/gcc/config/rs6000/darwin.h
index 9a88a8d..a6a7b2c 100644
--- a/gcc/config/rs6000/darwin.h
+++ b/gcc/config/rs6000/darwin.h
@@ -272,6 +272,9 @@ extern int darwin_emit_branch_islands;
#undef TARGET_IEEEQUAD
#define TARGET_IEEEQUAD 0
+#undef TARGET_IEEEQUAD_DEFAULT
+#define TARGET_IEEEQUAD_DEFAULT 0
+
/* Since Darwin doesn't do TOCs, stub this out. */
#define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X, MODE) ((void)X, (void)MODE, 0)
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 3095419..3162d52 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -86,6 +86,20 @@
#define TARGET_NO_PROTOTYPE 0
#endif
+ /* Set -mabi=ieeelongdouble on some old targets. In the future, power server
+ systems will also set long double to be IEEE 128-bit. AIX and Darwin
+ explicitly redefine TARGET_IEEEQUAD and TARGET_IEEEQUAD_DEFAULT to 0, so
+ those systems will not pick up this default. This needs to be after all
+ of the include files, so that POWERPC_LINUX and POWERPC_FREEBSD are
+ properly defined. */
+#ifndef TARGET_IEEEQUAD_DEFAULT
+#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD)
+#define TARGET_IEEEQUAD_DEFAULT 1
+#else
+#define TARGET_IEEEQUAD_DEFAULT 0
+#endif
+#endif
+
#define min(A,B) ((A) < (B) ? (A) : (B))
#define max(A,B) ((A) > (B) ? (A) : (B))
@@ -2878,6 +2892,13 @@ rs6000_debug_reg_global (void)
fprintf (stderr, DEBUG_FMT_D, "tls_size", rs6000_tls_size);
fprintf (stderr, DEBUG_FMT_D, "long_double_size",
rs6000_long_double_type_size);
+ if (rs6000_long_double_type_size == 128)
+ {
+ fprintf (stderr, DEBUG_FMT_S, "long double type",
+ TARGET_IEEEQUAD ? "IEEE" : "IBM");
+ fprintf (stderr, DEBUG_FMT_S, "default long double type",
+ TARGET_IEEEQUAD_DEFAULT ? "IEEE" : "IBM");
+ }
fprintf (stderr, DEBUG_FMT_D, "sched_restricted_insns_priority",
(int)rs6000_sched_restricted_insns_priority);
fprintf (stderr, DEBUG_FMT_D, "Number of standard builtins",
@@ -4560,13 +4581,26 @@ rs6000_option_override_internal (bool global_init_p)
rs6000_long_double_type_size = RS6000_DEFAULT_LONG_DOUBLE_SIZE;
}
- /* Set -mabi=ieeelongdouble on some old targets. Note, AIX and Darwin
- explicitly redefine TARGET_IEEEQUAD to 0, so those systems will not
- pick up this default. */
-#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD)
+ /* Set -mabi=ieeelongdouble on some old targets. In the future, power server
+ systems will also set long double to be IEEE 128-bit. AIX and Darwin
+ explicitly redefine TARGET_IEEEQUAD and TARGET_IEEEQUAD_DEFAULT to 0, so
+ those systems will not pick up this default. Warn if the user changes the
+ default unless -Wno-psabi. */
if (!global_options_set.x_rs6000_ieeequad)
- rs6000_ieeequad = 1;
-#endif
+ rs6000_ieeequad = TARGET_IEEEQUAD_DEFAULT;
+
+ else if (rs6000_ieeequad != TARGET_IEEEQUAD_DEFAULT && TARGET_LONG_DOUBLE_128)
+ {
+ static bool warned_change_long_double;
+ if (!warned_change_long_double)
+ {
+ warned_change_long_double = true;
+ if (TARGET_IEEEQUAD)
+ warning (OPT_Wpsabi, "Using IEEE extended precision long double");
+ else
+ warning (OPT_Wpsabi, "Using IBM extended precision long double");
+ }
+ }
/* Enable the default support for IEEE 128-bit floating point on Linux VSX
sytems. In GCC 7, we would enable the the IEEE 128-bit floating point
diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt
index c42818f..e7d0829 100644
--- a/gcc/config/rs6000/rs6000.opt
+++ b/gcc/config/rs6000/rs6000.opt
@@ -381,10 +381,10 @@ mabi=d32
Target RejectNegative Undocumented Warn(using old darwin ABI) Var(rs6000_darwin64_abi, 0)
mabi=ieeelongdouble
-Target RejectNegative Undocumented Warn(using IEEE extended precision long double) Var(rs6000_ieeequad) Save
+Target RejectNegative Var(rs6000_ieeequad) Save
mabi=ibmlongdouble
-Target RejectNegative Undocumented Warn(using IBM extended precision long double) Var(rs6000_ieeequad, 0)
+Target RejectNegative Var(rs6000_ieeequad, 0)
mcpu=
Target RejectNegative Joined Var(rs6000_cpu_index) Init(-1) Enum(rs6000_cpu_opt_value) Save
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 71b2445..f950c3c 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -22614,12 +22614,18 @@ Disable Book-E SPE ABI extensions for the current ABI@.
@item -mabi=ibmlongdouble
@opindex mabi=ibmlongdouble
Change the current ABI to use IBM extended-precision long double.
-This is a PowerPC 32-bit SYSV ABI option.
+This is not likely to work if your system defaults to using IEEE
+extended-precision long double. If you change the long double type
+from IEEE extended-precision, the compiler will issue a warning unless
+you use the @option{-Wno-psabi} option.
@item -mabi=ieeelongdouble
@opindex mabi=ieeelongdouble
Change the current ABI to use IEEE extended-precision long double.
-This is a PowerPC 32-bit Linux ABI option.
+This is not likely to work if your system defaults to using IBM
+extended-precision long double. If you change the long double type
+from IBM extended-precision, the compiler will issue a warning unless
+you use the @option{-Wno-psabi} option.
@item -mabi=elfv1
@opindex mabi=elfv1