This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] PPC Add Power6x Support to dl-procinfo
- From: Steven Munroe <munroesj at us dot ibm dot com>
- To: libc-alpha at sources dot redhat dot com, Paul Mackerras <paulus at samba dot org>
- Date: Sun, 12 Nov 2006 23:22:33 -0600
- Subject: [PATCH] PPC Add Power6x Support to dl-procinfo
The POWER6 processor includes addtional instructions beyond the 2.05 ISA
(Move Float to GRP, Move Float from GRP) which are available as the
default on unmanaged systems (single partition systems identified by
the AT_PLATFORM="power6x"). For Partitioned systems those instructions
are disabled by default (AT_PLATFORM="power6"). Paul Mackerras recently
posted the power6, power6x kernel support:
http://patchwork.ozlabs.org/linuxppc/patch?id=7989
Also we need to add the hardware Decimal Floating Point feature to
AT_HWCAP and update the HWCAP_IMPORTANT to include PPC_FEATURE_HAS_DFP).
2006-11-11 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_cap_flags): Add 3 new cap
names to the beginning.
(_dl_powerpc_platforms): Add "power6x".
* sysdeps/powerpc/dl-procinfo.h (_DL_HWCAP_FIRST): Decrease.
(HWCAP_IMPORTANT): Add PPC_FEATURE_HAS_DFP.
(_DL_PLATFORMS_COUNT): Increase.
(_dl_string_platform): Handle power6x case.
* sysdeps/powerpc/sysdep.h (PPC_FEATURE_PA6T, PPC_FEATURE_HAS_DFP,
PPC_FEATURE_POWER6_EXT): Define.
(PPC_FEATURE_POWER5, PPC_FEATURE_POWER5_PLUS): Correct Comment.
diff -urN libc25-cvstip-20061111/sysdeps/powerpc/dl-procinfo.c libc25/sysdeps/powerpc/dl-procinfo.c
--- libc25-cvstip-20061111/sysdeps/powerpc/dl-procinfo.c 2006-09-15 02:47:28.000000000 -0500
+++ libc25/sysdeps/powerpc/dl-procinfo.c 2006-11-12 10:16:28.000000000 -0600
@@ -46,10 +46,11 @@
#if !defined PROCINFO_DECL && defined SHARED
._dl_powerpc_cap_flags
#else
-PROCINFO_CLASS const char _dl_powerpc_cap_flags[20][10]
+PROCINFO_CLASS const char _dl_powerpc_cap_flags[23][10]
#endif
#ifndef PROCINFO_DECL
= {
+ "power6x", "dfp", "pa6t",
"arch_2_05", "ic_snoop", "smt", "booke",
"cellbe", "power5+", "power5", "power4",
"notb", "efpdouble", "efpsingle", "spe",
@@ -66,11 +67,12 @@
#if !defined PROCINFO_DECL && defined SHARED
._dl_powerpc_platforms
#else
-PROCINFO_CLASS const char _dl_powerpc_platforms[6][12]
+PROCINFO_CLASS const char _dl_powerpc_platforms[7][12]
#endif
#ifndef PROCINFO_DECL
= {
- "power4", "ppc970", "power5", "power5+", "power6", "ppc-cell-be"
+ "power4", "ppc970", "power5", "power5+", "power6", "ppc-cell-be",
+ "power6x"
}
#endif
#if !defined SHARED || defined PROCINFO_DECL
diff -urN libc25-cvstip-20061111/sysdeps/powerpc/dl-procinfo.h libc25/sysdeps/powerpc/dl-procinfo.h
--- libc25-cvstip-20061111/sysdeps/powerpc/dl-procinfo.h 2006-09-15 02:47:45.000000000 -0500
+++ libc25/sysdeps/powerpc/dl-procinfo.h 2006-11-12 10:17:20.000000000 -0600
@@ -24,13 +24,14 @@
#include <sysdep.h> /* This defines the PPC_FEATURE_* macros. */
/* There are 20 bits used, but they are bits 12..31. */
-#define _DL_HWCAP_FIRST 12
+#define _DL_HWCAP_FIRST 9
#define _DL_HWCAP_COUNT 32
/* These bits influence library search. */
-#define HWCAP_IMPORTANT (PPC_FEATURE_HAS_ALTIVEC)
+#define HWCAP_IMPORTANT (PPC_FEATURE_HAS_ALTIVEC \
+ + PPC_FEATURE_HAS_DFP)
-#define _DL_PLATFORMS_COUNT 6
+#define _DL_PLATFORMS_COUNT 7
#define _DL_FIRST_PLATFORM 32
/* Mask to filter out platforms. */
@@ -84,6 +85,8 @@
break;
case '6':
ret = _DL_FIRST_PLATFORM + 4;
+ if (str[1] == 'x')
+ ret+=2, ++str;
break;
default:
return -1;
diff -urN libc25-cvstip-20061111/sysdeps/powerpc/sysdep.h libc25/sysdeps/powerpc/sysdep.h
--- libc25-cvstip-20061111/sysdeps/powerpc/sysdep.h 2006-09-15 02:48:04.000000000 -0500
+++ libc25/sysdeps/powerpc/sysdep.h 2006-11-12 15:39:42.000000000 -0600
@@ -34,13 +34,16 @@
#define PPC_FEATURE_HAS_EFP_DOUBLE 0x00200000 /* SPE Double. */
#define PPC_FEATURE_NO_TB 0x00100000 /* 601/403gx have no timebase */
#define PPC_FEATURE_POWER4 0x00080000 /* POWER4 ISA 2.00 */
-#define PPC_FEATURE_POWER5 0x00040000 /* POWER5 ISA 2.01 */
-#define PPC_FEATURE_POWER5_PLUS 0x00020000 /* POWER5+ ISA 2.02 */
+#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_SMT 0x00004000
+#define PPC_FEATURE_SMT 0x00004000 /* Simultaneous Multi-Threading */
#define PPC_FEATURE_ICACHE_SNOOP 0x00002000
#define PPC_FEATURE_ARCH_2_05 0x00001000 /* ISA 2.05 */
+#define PPC_FEATURE_PA6T 0x00000800 /* PA Semi 6T Core */
+#define PPC_FEATURE_HAS_DFP 0x00000400 /* Decimal FP Unit */
+#define PPC_FEATURE_POWER6_EXT 0x00000200 /* P6 + mffgpr/mftgpr */
#define PPC_FEATURE_970 (PPC_FEATURE_POWER4 + PPC_FEATURE_HAS_ALTIVEC)
#ifdef __ASSEMBLER__