PowerPC: Add future hwcap2 bits
authorMichael Meissner <meissner@linux.ibm.com>
Tue, 9 Jun 2020 20:32:02 +0000 (15:32 -0500)
committerMichael Meissner <meissner@linux.ibm.com>
Tue, 9 Jun 2020 20:32:02 +0000 (15:32 -0500)
This patch adds support for the two new HWCAP2 fields used by the
__builtin_cpu_supports function.  It adds support in the target_clones
attribute for -mcpu=future.

The two new __builtin_cpu_supports tests are:
__builtin_cpu_supports ("isa_3_1")
__builtin_cpu_supports ("mma")

The bits used are the bits that the Linux kernel engineers will be using for
these new features.

gcc/
2020-06-05  Michael Meissner  <meissner@linux.ibm.com>

* config/rs6000/ppc-auxv.h (PPC_PLATFORM_FUTURE): Allocate
'future' PowerPC platform.
(PPC_FEATURE2_ARCH_3_1): New HWCAP2 bit for ISA 3.1.
(PPC_FEATURE2_MMA): New HWCAP2 bit for MMA.
* config/rs6000/rs6000-call.c (cpu_supports_info): Add ISA 3.1 and
MMA HWCAP2 bits.
* config/rs6000/rs6000.c (CLONE_ISA_3_1): New clone support.
(rs6000_clone_map): Add 'future' system target_clones support.

gcc/config/rs6000/ppc-auxv.h
gcc/config/rs6000/rs6000-call.c
gcc/config/rs6000/rs6000.c

index 323293178e71681ab6c78e65acfc2d791d23ff5e..e51d0393e5f93150818b46356b2e2ca3c8b2e855 100644 (file)
@@ -48,6 +48,9 @@
 #define PPC_PLATFORM_POWER8            13
 #define PPC_PLATFORM_POWER9            14
 
+/* This is not yet official.  */
+#define PPC_PLATFORM_FUTURE            15
+
 /* AT_HWCAP bits.  These must match the values defined in the Linux kernel.  */
 #define PPC_FEATURE_32              0x80000000
 #define PPC_FEATURE_64              0x40000000
@@ -93,6 +96,9 @@
 #define PPC_FEATURE2_SCV            0x00100000
 #define PPC_FEATURE2_HTM_NO_SUSPEND 0x00080000
 
+/* These are not yet official.  */
+#define PPC_FEATURE2_ARCH_3_1       0x00040000
+#define PPC_FEATURE2_MMA            0x00020000
 
 /* Thread Control Block (TCB) offsets of the AT_PLATFORM, AT_HWCAP and
    AT_HWCAP2 values.  These must match the values defined in GLIBC.  */
index 0ac8054d03092630546cd1c185dfddd1670c58bc..817a14c9c0d6ca35e125c86fa355856283cab48c 100644 (file)
@@ -172,7 +172,9 @@ static const struct
   { "arch_3_00",       PPC_FEATURE2_ARCH_3_00,         1 },
   { "ieee128",         PPC_FEATURE2_HAS_IEEE128,       1 },
   { "darn",            PPC_FEATURE2_DARN,              1 },
-  { "scv",             PPC_FEATURE2_SCV,               1 }
+  { "scv",             PPC_FEATURE2_SCV,               1 },
+  { "arch_3_1",                PPC_FEATURE2_ARCH_3_1,          1 },
+  { "mma",             PPC_FEATURE2_MMA,               1 },
 };
 
 static void altivec_init_builtins (void);
index ff09e9378ef4a3829738899481dc834a34df399d..0bbd06ad1dede9227c19ed1f98fbcb29a2095d0f 100644 (file)
@@ -260,6 +260,7 @@ enum {
   CLONE_ISA_2_06,                      /* ISA 2.06 (power7).  */
   CLONE_ISA_2_07,                      /* ISA 2.07 (power8).  */
   CLONE_ISA_3_00,                      /* ISA 3.00 (power9).  */
+  CLONE_ISA_3_1,                       /* ISA 3.1 (future).  */
   CLONE_MAX
 };
 
@@ -275,6 +276,7 @@ static const struct clone_map rs6000_clone_map[CLONE_MAX] = {
   { OPTION_MASK_POPCNTD,       "arch_2_06" },  /* ISA 2.06 (power7).  */
   { OPTION_MASK_P8_VECTOR,     "arch_2_07" },  /* ISA 2.07 (power8).  */
   { OPTION_MASK_P9_VECTOR,     "arch_3_00" },  /* ISA 3.00 (power9).  */
+  { OPTION_MASK_FUTURE,                "arch_3_1" },   /* ISA 3.1 (future).  */
 };