public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH], Set -mpcrel by default on Linux 64-bit systems for -mcpu=future
@ 2020-03-23 20:38 Michael Meissner
  2020-03-25 16:07 ` will schmidt
  0 siblings, 1 reply; 5+ messages in thread
From: Michael Meissner @ 2020-03-23 20:38 UTC (permalink / raw)
  To: gcc-patches, Segher Boessenkool, David Edelsohn, Michael Meissner

This is a revision of a patch that I've submitted several times.  It makes
-mpcrel the default on Linux 64-bit systems that use ELF v2, use the medium
code mode, and if the user did not disable prefixed load/store instructions for
-mcpu=future.

Previous versions of the patch had two macros that the target os could set, one
to say that the target os supported prefixed instructions with large numeric
offsets, and the second whether PC-relative prefixed load/store instructions
could be generated.  Segher asked that we drop the capability to configure
whether prefixed numeric load/store instructions would be enabled by default,
and this patch does this.  All of the PC-relative support is in the master
branch, we just need to enable it by default.

Is this patch acceptable to be committed to the master branch.  I have done
various tests with this patch, including most recently bootstraping and running
make check.  I have built the Spec 2017 benchmark suite with this patch.

2020-03-23  Michael Meissner  <meissner@linux.ibm.com>

	* config/rs6000/linux64.h (PCREL_SUPPORTED_BY_OS): Enable -mpcrel
	for -mcpu=future by default on 64-bit systems with medium code
	model.
	* config/rs6000/rs6000-cpus.def (ISA_FUTURE_MASKS_SERVER): Do not
	define the bits for -mprefixed or -mpcrel here.
	(OTHER_FUTURE_MASKS): Define the bits for -mprefixed and -mpcrel
	here.
	* config/rs6000/rs6000.c (PCREL_SUPPORTED_BY_OS): If not defined,
	don't enable -mpcrel by default.
	(rs6000_option_override_internal): Enable -mpcrel on systems that
	support it, if the user did not do -mno-pcrel.

--- /tmp/QuuFm5_linux64.h	2020-03-20 20:15:38.321862650 -0400
+++ gcc/config/rs6000/linux64.h	2020-03-20 18:36:33.654484833 -0400
@@ -640,3 +640,11 @@ extern int dot_symbols;
    enabling the __float128 keyword.  */
 #undef	TARGET_FLOAT128_ENABLE_TYPE
 #define TARGET_FLOAT128_ENABLE_TYPE 1
+
+/* Enable support for PC-relative addressing on the 'future' system.  Currently
+   this support only exits for the ELF v2 object file format using the medium
+   code model.  */
+#undef  PCREL_SUPPORTED_BY_OS
+#define PCREL_SUPPORTED_BY_OS	(TARGET_FUTURE && TARGET_PREFIXED	\
+				 && ELFv2_ABI_CHECK			\
+				 && (TARGET_CMODEL == CMODEL_MEDIUM))
--- /tmp/sO5cAE_rs6000-cpus.def	2020-03-20 20:15:38.331862575 -0400
+++ gcc/config/rs6000/rs6000-cpus.def	2020-03-20 17:05:17.347638233 -0400
@@ -75,11 +75,10 @@
 				 | OPTION_MASK_P8_VECTOR		\
 				 | OPTION_MASK_P9_VECTOR)
 
-/* Support for a future processor's features.  Do not enable -mpcrel until it
-   is fully functional.  */
+/* Support for a future processor's features.  The addressing related options
+   (like -mprefixed, -mpcrel) are not set here.  */
 #define ISA_FUTURE_MASKS_SERVER	(ISA_3_0_MASKS_SERVER			\
-				 | OPTION_MASK_FUTURE			\
-				 | OPTION_MASK_PREFIXED)
+				 | OPTION_MASK_FUTURE)
 
 /* Flags that need to be turned off if -mno-future.  */
 #define OTHER_FUTURE_MASKS	(OPTION_MASK_PCREL			\
--- /tmp/xQt3Pd_rs6000.c	2020-03-20 20:15:38.343862485 -0400
+++ gcc/config/rs6000/rs6000.c	2020-03-20 20:11:02.942928364 -0400
@@ -98,6 +98,12 @@
 #endif
 #endif
 
+/* Set up the defaults for whether PC-relative addressing is supported by the
+   target system.  */
+#ifndef PCREL_SUPPORTED_BY_OS
+#define PCREL_SUPPORTED_BY_OS		0
+#endif
+
 /* Support targetm.vectorize.builtin_mask_for_load.  */
 tree altivec_builtin_mask_for_load;
 
@@ -4012,6 +4018,11 @@ rs6000_option_override_internal (bool gl
       rs6000_isa_flags &= ~OPTION_MASK_FLOAT128_HW;
     }
 
+  /* Enable -mprefixed by default on 64-bit 'future' systems.  */
+  if (TARGET_FUTURE && TARGET_POWERPC64
+      && (rs6000_isa_flags_explicit & OPTION_MASK_PREFIXED) == 0)
+    rs6000_isa_flags |= OPTION_MASK_PREFIXED;
+
   /* -mprefixed (and hence -mpcrel) requires -mcpu=future.  */
   if (TARGET_PREFIXED && !TARGET_FUTURE)
     {
@@ -4173,6 +4184,11 @@ rs6000_option_override_internal (bool gl
       rs6000_isa_flags &= ~OPTION_MASK_PCREL;
     }
 
+  /* If the OS has support for PC-relative relocations, enable it now.  */
+  if (PCREL_SUPPORTED_BY_OS
+      && (rs6000_isa_flags_explicit & OPTION_MASK_PCREL) == 0)
+    rs6000_isa_flags |= OPTION_MASK_PCREL;
+
   if (TARGET_DEBUG_REG || TARGET_DEBUG_TARGET)
     rs6000_print_isa_options (stderr, 0, "after subtarget", rs6000_isa_flags);
 


-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meissner@linux.ibm.com, phone: +1 (978) 899-4797

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-04-02 17:27 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-23 20:38 [PATCH], Set -mpcrel by default on Linux 64-bit systems for -mcpu=future Michael Meissner
2020-03-25 16:07 ` will schmidt
2020-03-25 20:12   ` Segher Boessenkool
2020-03-27 18:30   ` Michael Meissner
2020-04-02 17:27     ` Segher Boessenkool

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).