about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRyan S. Arnold <rsa@linux.vnet.ibm.com>2013-05-14 14:33:38 -0500
committerRyan S. Arnold <rsa@linux.vnet.ibm.com>2013-05-14 14:33:38 -0500
commit82fb7c849d61b544174de646181f5a159adb6ceb (patch)
tree864a1b69cd965a23db5144906b92ab0bdfa216f6
parentc3ff538eb2d7a696d4f4731f68267b36133e346e (diff)
downloadglibc-82fb7c849d61b544174de646181f5a159adb6ceb.tar.gz
glibc-82fb7c849d61b544174de646181f5a159adb6ceb.tar.xz
glibc-82fb7c849d61b544174de646181f5a159adb6ceb.zip
PowerPC: Add support for POWER8.
-rw-r--r--ChangeLog29
-rw-r--r--sysdeps/powerpc/bits/hwcap.h16
-rw-r--r--sysdeps/powerpc/dl-procinfo.c10
-rw-r--r--sysdeps/powerpc/dl-procinfo.h15
-rw-r--r--sysdeps/powerpc/powerpc32/power8/Implies2
-rw-r--r--sysdeps/powerpc/powerpc64/power8/Implies2
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/power8/Implies2
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/power8/Implies2
8 files changed, 66 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index d3c890993b..61c71b3baa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,32 @@
+2013-05-14  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
+
+	* sysdeps/powerpc/bits/hwcap.h: Add new AT_HWCAP2 features.
+	[PPC_FEATURE2_ARCH_2_07]: New feature bit for Power ISA 2.07.
+	[PPC_FEATURE2_HAS_HTM]: New feature bit for Hardware Transactional
+	Memory.
+	[PPC_FEATURE2_HAS_DSCR]: New feature bit for Data Stream Control
+	Register.
+	[PPC_FEATURE2_HAS_EBB]: New feature bit for Event Based Branching
+	facility.
+	[PPC_FEATURE2_HAS_ISEL]: New feature bit for Integer Select.
+	[PPC_FEATURE2_HAS_TAR]: New feature bit for Target Address Register
+	facility.
+	* sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_platforms): Add power8 as
+	PPC_PLATFORM_POWER8.
+	(_dl_powerpc_cap_flags): Add arch_2_07, htm, dscr, ebb, isel, and tar
+	as hwcap strings for power8.
+	* sysdeps/powerpc/dl-procinfo.h
+	[_DL_HWCAP2_FIRST]: New define to account for the start of AT_HWCAP2.
+	[_DL_HWCAP_COUNT]: Update count to cover arch_2_07, htm, dscr, ebb,
+	isel, and tar.
+	[_DL_PLATFORMS_COUNT]: Increment for power8.
+	[PPC_PLATFORM_POWER8]: New definition.
+	(_dl_string_platform): Add return value for power8 platform string.
+	* sysdeps/powerpc/powerpc32/power8/Implies: New file.
+	* sysdeps/powerpc/powerpc64/power8/Implies: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/power8/Implies: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/power8/Implies: Likewise.
+
 2013-05-13  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
 
 	* sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_platforms): Add ppc405,
diff --git a/sysdeps/powerpc/bits/hwcap.h b/sysdeps/powerpc/bits/hwcap.h
index 783138a0e6..c1d1defd2a 100644
--- a/sysdeps/powerpc/bits/hwcap.h
+++ b/sysdeps/powerpc/bits/hwcap.h
@@ -20,9 +20,9 @@
 # error "Never include <bits/hwcap.h> directly; use <sys/auxv.h> instead."
 #endif
 
-/*
- * The following must match the kernels asm/cputable.h.
- */
+/* The bit numbers must match those in the kernel's asm/cputable.h.  */
+
+/* Feature definitions in AT_HWCAP.  */
 #define PPC_FEATURE_32		    0x80000000 /* 32-bit mode. */
 #define PPC_FEATURE_64		    0x40000000 /* 64-bit mode. */
 #define PPC_FEATURE_601_INSTR	    0x20000000 /* 601 chip, Old POWER ISA.  */
@@ -39,7 +39,7 @@
 #define PPC_FEATURE_POWER5	    0x00040000 /* POWER5 ISA 2.02 */
 #define PPC_FEATURE_POWER5_PLUS	    0x00020000 /* POWER5+ ISA 2.03 */
 #define PPC_FEATURE_CELL_BE	    0x00010000 /* CELL Broadband Engine */
-#define PPC_FEATURE_BOOKE	    0x00008000
+#define PPC_FEATURE_BOOKE	    0x00008000 /* ISA Category Embedded */
 #define PPC_FEATURE_SMT		    0x00004000 /* Simultaneous Multi-Threading */
 #define PPC_FEATURE_ICACHE_SNOOP    0x00002000
 #define PPC_FEATURE_ARCH_2_05	    0x00001000 /* ISA 2.05 */
@@ -51,3 +51,11 @@
 #define PPC_FEATURE_PSERIES_PERFMON_COMPAT  0x00000040
 #define PPC_FEATURE_TRUE_LE	    0x00000002
 #define PPC_FEATURE_PPC_LE	    0x00000001
+
+/* Feature definitions in AT_HWCAP2.  */
+#define PPC_FEATURE2_ARCH_2_07     0x80000000 /* ISA 2.07 */
+#define PPC_FEATURE2_HAS_HTM       0x40000000 /* Hardware Transactional Memory */
+#define PPC_FEATURE2_HAS_DSCR      0x20000000 /* Data Stream Control Register */
+#define PPC_FEATURE2_HAS_EBB       0x10000000 /* Event Base Branching */
+#define PPC_FEATURE2_HAS_ISEL      0x08000000 /* Integer Select */
+#define PPC_FEATURE2_HAS_TAR       0x04000000 /* Target Address Register */
diff --git a/sysdeps/powerpc/dl-procinfo.c b/sysdeps/powerpc/dl-procinfo.c
index 0f5c2b3d6d..0fbbc80810 100644
--- a/sysdeps/powerpc/dl-procinfo.c
+++ b/sysdeps/powerpc/dl-procinfo.c
@@ -45,11 +45,12 @@
 #if !defined PROCINFO_DECL && defined SHARED
   ._dl_powerpc_cap_flags
 #else
-PROCINFO_CLASS const char _dl_powerpc_cap_flags[25][10]
+PROCINFO_CLASS const char _dl_powerpc_cap_flags[31][10]
 #endif
 #ifndef PROCINFO_DECL
 = {
-    "vsx",
+    "ebb", "isel", "tar",
+    "vsx", "arch_2_07", "htm", "dscr",
     "arch_2_06", "power6x", "dfp", "pa6t",
     "arch_2_05", "ic_snoop", "smt", "booke",
     "cellbe", "power5+", "power5", "power4",
@@ -67,7 +68,7 @@ PROCINFO_CLASS const char _dl_powerpc_cap_flags[25][10]
 #if !defined PROCINFO_DECL && defined SHARED
   ._dl_powerpc_platforms
 #else
-PROCINFO_CLASS const char _dl_powerpc_platforms[13][12]
+PROCINFO_CLASS const char _dl_powerpc_platforms[14][12]
 #endif
 #ifndef PROCINFO_DECL
 = {
@@ -83,7 +84,8 @@ PROCINFO_CLASS const char _dl_powerpc_platforms[13][12]
     [PPC_PLATFORM_PPC405] = "ppc405",
     [PPC_PLATFORM_PPC440] = "ppc440",
     [PPC_PLATFORM_PPC464] = "ppc464",
-    [PPC_PLATFORM_PPC476] = "ppc476"
+    [PPC_PLATFORM_PPC476] = "ppc476",
+    [PPC_PLATFORM_POWER8] = "power8"
   }
 #endif
 #if !defined SHARED || defined PROCINFO_DECL
diff --git a/sysdeps/powerpc/dl-procinfo.h b/sysdeps/powerpc/dl-procinfo.h
index f24a0c6f11..3a5ce12c46 100644
--- a/sysdeps/powerpc/dl-procinfo.h
+++ b/sysdeps/powerpc/dl-procinfo.h
@@ -20,18 +20,21 @@
 #define _DL_PROCINFO_H 1
 
 #include <ldsodefs.h>
-#include <sysdep.h>	/* This defines the PPC_FEATURE_* macros.  */
+#include <sysdep.h>	/* This defines the PPC_FEATURE[2]_* macros.  */
 
 /* There are 25 bits used in AT_HWCAP, but they are bits 7..31.  */
 #define _DL_HWCAP_FIRST		7
+/* Where AT_HWCAP2 starts relative to _DL_HWCAP_FIRST.  */
 #define _DL_HWCAP2_FIRST	32
-#define _DL_HWCAP_COUNT		32
+
+/* The total number of used bits relative to _DL_HWCAP_FIRST.  */
+#define _DL_HWCAP_COUNT		38
 
 /* These bits influence library search.  */
 #define HWCAP_IMPORTANT		(PPC_FEATURE_HAS_ALTIVEC \
 				+ PPC_FEATURE_HAS_DFP)
 
-#define _DL_PLATFORMS_COUNT	13
+#define _DL_PLATFORMS_COUNT	14
 
 #define _DL_FIRST_PLATFORM	32
 /* Mask to filter out platforms.  */
@@ -52,6 +55,7 @@
 #define PPC_PLATFORM_PPC440		10
 #define PPC_PLATFORM_PPC464		11
 #define PPC_PLATFORM_PPC476		12
+#define PPC_PLATFORM_POWER8		13
 
 static inline const char *
 __attribute__ ((unused))
@@ -112,6 +116,9 @@ _dl_string_platform (const char *str)
 	case '7':
 	  ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER7;
 	  break;
+	case '8':
+	  ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER8;
+	  break;
 	default:
 	  return -1;
 	}
@@ -166,7 +173,7 @@ _dl_procinfo (unsigned int type, int word)
     case AT_HWCAP:
       _dl_printf ("AT_HWCAP:       ");
       first = _DL_HWCAP_FIRST;
-      count = MIN(_DL_HWCAP_COUNT,_DL_HWCAP2_FIRST);
+      count = MIN(_DL_HWCAP_COUNT, _DL_HWCAP2_FIRST);
       str_offset = 0;
       break;
     case AT_HWCAP2:
diff --git a/sysdeps/powerpc/powerpc32/power8/Implies b/sysdeps/powerpc/powerpc32/power8/Implies
new file mode 100644
index 0000000000..083f3e950a
--- /dev/null
+++ b/sysdeps/powerpc/powerpc32/power8/Implies
@@ -0,0 +1,2 @@
+powerpc/powerpc32/power7/fpu
+powerpc/powerpc32/power7
diff --git a/sysdeps/powerpc/powerpc64/power8/Implies b/sysdeps/powerpc/powerpc64/power8/Implies
new file mode 100644
index 0000000000..9a5e3c7277
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/power8/Implies
@@ -0,0 +1,2 @@
+powerpc/powerpc64/power7/fpu
+powerpc/powerpc64/power7
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/power8/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/power8/Implies
new file mode 100644
index 0000000000..066dea2798
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/power8/Implies
@@ -0,0 +1,2 @@
+powerpc/powerpc32/power8/fpu
+powerpc/powerpc32/power8
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/power8/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc64/power8/Implies
new file mode 100644
index 0000000000..fad2505ab9
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/power8/Implies
@@ -0,0 +1,2 @@
+powerpc/powerpc64/power8/fpu
+powerpc/powerpc64/power8