This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Sanitize HWCAP_SPARC_* defines/usage, and add new entries.


This cleans things up a bit, gets rid of magic constant usage in
assembler, and provides a framework for some future ifunc stuff I'd
like to do on sparc.

It also updates the procinfo support to report hwcap flags that have
been added to the kernel recently.

Committed to master.

---
 ChangeLog                                |   16 ++++++++++
 elf/elf.h                                |   11 -------
 sysdeps/sparc/dl-procinfo.c              |    9 ++++--
 sysdeps/sparc/dl-procinfo.h              |    5 ++-
 sysdeps/sparc/sparc32/bits/atomic.h      |    8 ++---
 sysdeps/sparc/sparc32/dl-machine.h       |    3 +-
 sysdeps/sparc/sparc64/multiarch/memcpy.S |    8 ++--
 sysdeps/sparc/sparc64/multiarch/memset.S |    6 ++--
 sysdeps/sparc/sysdep.h                   |   45 ++++++++++++++++++++++++++++++
 sysdeps/unix/sparc/sysdep.h              |    4 ++-
 10 files changed, 85 insertions(+), 30 deletions(-)
 create mode 100644 sysdeps/sparc/sysdep.h

diff --git a/ChangeLog b/ChangeLog
index cdf4bc0..927b24c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2011-09-01  David S. Miller  <davem@davemloft.net>
+
+	* elf/elf.h (HWCAP_SPARC_*): Move to..
+	* sysdeps/sparc/sysdep.h: this new file and add new values.
+	* sysdeps/unix/sparc/sysdep.h: Include sysdeps/sparc/sysdep.h
+	* sysdeps/sparc/dl-procinfo.h: Include sysdep.h and increase
+	_DL_HWCAP_COUNT to 24.
+	* sysdeps/sparc/dl-procinfo.c (_dl_sparc_cap_flags): Add new
+	entries.
+	* sysdeps/sparc/sparc32/bits/atomic.h: Don't use magic local
+	__ATOMIC_HWCAP_SPARC_V9 define, use sysdep.h one instead.
+	* sysdeps/sparc/sparc32/dl-machine.h: Include sysdep.h
+	* sysdeps/sparc/sparc64/multiarch/memcpy.S: Use HWCAP_SPARC_*
+	instead of magic constants.
+	* sysdeps/sparc/sparc64/multiarch/memset.S: Likewise.
+
 2011-08-31  David S. Miller  <davem@davemloft.net>
 
 	* sysdeps/unix/sparc/sysdep.h (SETUP_PIC_REG): Define.
diff --git a/elf/elf.h b/elf/elf.h
index ca5abbf..47db25c 100644
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -1339,17 +1339,6 @@ typedef struct
 #define DT_SPARC_REGISTER 0x70000001
 #define DT_SPARC_NUM	2
 
-/* Bits present in AT_HWCAP on SPARC.  */
-
-#define HWCAP_SPARC_FLUSH	1	/* The CPU supports flush insn.  */
-#define HWCAP_SPARC_STBAR	2
-#define HWCAP_SPARC_SWAP	4
-#define HWCAP_SPARC_MULDIV	8
-#define HWCAP_SPARC_V9		16	/* The CPU is v9, so v8plus is ok.  */
-#define HWCAP_SPARC_ULTRA3	32
-#define HWCAP_SPARC_BLKINIT	64	/* Sun4v with block-init/load-twin.  */
-#define HWCAP_SPARC_N2		128
-
 /* MIPS R3000 specific definitions.  */
 
 /* Legal values for e_flags field of Elf32_Ehdr.  */
diff --git a/sysdeps/sparc/dl-procinfo.c b/sysdeps/sparc/dl-procinfo.c
index db7e867..4a629ca 100644
--- a/sysdeps/sparc/dl-procinfo.c
+++ b/sysdeps/sparc/dl-procinfo.c
@@ -1,5 +1,5 @@
 /* Data for Linux/sparc version of processor capability information.
-   Copyright (C) 2002,2003,2006 Free Software Foundation, Inc.
+   Copyright (C) 2002,2003,2006,2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
 
@@ -47,10 +47,13 @@
 #if !defined PROCINFO_DECL && defined SHARED
   ._dl_sparc_cap_flags
 #else
-PROCINFO_CLASS const char _dl_sparc_cap_flags[8][7]
+PROCINFO_CLASS const char _dl_sparc_cap_flags[24][11]
 #endif
 #ifndef PROCINFO_DECL
-  = { "flush", "stbar", "swap", "muldiv", "v9", "ultra3", "v9v", "v9v2" }
+  = { "flush", "stbar", "swap", "muldiv", "v9", "ultra3", "v9v", "v9v2",
+      "mul32", "div32", "fsmuld", "v8plus", "popc", "vis", "vis2",
+      "ASIBlkInit", "fmaf", "vis3", "hpc", "random", "trans", "fjfmau",
+      "ima", "cspare" }
 #endif
 #if !defined SHARED || defined PROCINFO_DECL
 ;
diff --git a/sysdeps/sparc/dl-procinfo.h b/sysdeps/sparc/dl-procinfo.h
index 04ebda7..1aea458 100644
--- a/sysdeps/sparc/dl-procinfo.h
+++ b/sysdeps/sparc/dl-procinfo.h
@@ -1,5 +1,5 @@
 /* Linux/sparc version of processor capability information handling macros.
-   Copyright (C) 1999,2000,2001,2002,2003,2004,2006
+   Copyright (C) 1999,2000,2001,2002,2003,2004,2006,2011
 	Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jj@ultra.linux.cz>, 1999.
@@ -23,8 +23,9 @@
 #define _DL_PROCINFO_H	1
 
 #include <ldsodefs.h>
+#include <sysdep.h>
 
-#define _DL_HWCAP_COUNT 8
+#define _DL_HWCAP_COUNT 24
 
 static inline int
 __attribute__ ((unused))
diff --git a/sysdeps/sparc/sparc32/bits/atomic.h b/sysdeps/sparc/sparc32/bits/atomic.h
index ef553f7..b9b5124 100644
--- a/sysdeps/sparc/sparc32/bits/atomic.h
+++ b/sysdeps/sparc/sparc32/bits/atomic.h
@@ -1,5 +1,5 @@
 /* Atomic operations.  sparc32 version.
-   Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2006, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
 
@@ -22,6 +22,7 @@
 #define _BITS_ATOMIC_H	1
 
 #include <stdint.h>
+#include <sysdep.h>
 
 typedef int8_t atomic8_t;
 typedef uint8_t uatomic8_t;
@@ -238,13 +239,10 @@ volatile unsigned char __sparc32_atomic_locks[64]
    apps on v9 CPUs e.g. with process shared primitives, use cas insn
    on v9 CPUs and ldstub on pre-v9.  */
 
-/* Avoid <ldsodefs.h> include here.  */
 extern uint64_t _dl_hwcap __attribute__((weak));
-# define __ATOMIC_HWCAP_SPARC_V9	16
 # define __atomic_is_v9 \
   (__builtin_expect (&_dl_hwcap != 0, 1) \
-   && __builtin_expect (_dl_hwcap & __ATOMIC_HWCAP_SPARC_V9, \
-			__ATOMIC_HWCAP_SPARC_V9))
+   && __builtin_expect (_dl_hwcap & HWCAP_SPARC_V9, HWCAP_SPARC_V9))
 
 # define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
   ({								      \
diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h
index f8e8fe4..f2bc94a 100644
--- a/sysdeps/sparc/sparc32/dl-machine.h
+++ b/sysdeps/sparc/sparc32/dl-machine.h
@@ -1,5 +1,5 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  SPARC version.
-   Copyright (C) 1996-2003, 2004, 2005, 2006, 2007, 2010
+   Copyright (C) 1996-2003, 2004, 2005, 2006, 2007, 2010, 2011
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -26,6 +26,7 @@
 #include <string.h>
 #include <sys/param.h>
 #include <ldsodefs.h>
+#include <sysdep.h>
 #include <tls.h>
 #include <dl-plt.h>
 
diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy.S b/sysdeps/sparc/sparc64/multiarch/memcpy.S
index c12dc3b..c022a40 100644
--- a/sysdeps/sparc/sparc64/multiarch/memcpy.S
+++ b/sysdeps/sparc/sparc64/multiarch/memcpy.S
@@ -1,5 +1,5 @@
 /* Multiple versions of memcpy
-   Copyright (C) 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010, 2011 Free Software Foundation, Inc.
    Contributed by David S. Miller (davem@davemloft.net)
    This file is part of the GNU C Library.
 
@@ -33,9 +33,9 @@ ENTRY(memcpy)
 1:	add	%o7, %o3, %o3
 	mov	%o5, %o7
 # endif
-	andcc	%o0, 0x80, %g0	! HWCAP_SPARC_N2
+	andcc	%o0, HWCAP_SPARC_N2, %g0
 	be	1f
-	 andcc	%o0, 0x40, %g0	! HWCAP_SPARC_BLKINIT
+	 andcc	%o0, HWCAP_SPARC_BLKINIT, %g0
 # ifdef SHARED
 	sethi	%gdop_hix22(__memcpy_niagara2), %o1
 	xor	%o1, %gdop_lox10(__memcpy_niagara2), %o1
@@ -45,7 +45,7 @@ ENTRY(memcpy)
 	ba	10f
 	 nop
 1:	be	1f
-	 andcc	%o0, 0x20, %g0	! HWCAP_SPARC_ULTRA3
+	 andcc	%o0, HWCAP_SPARC_ULTRA3, %g0
 # ifdef SHARED
 	sethi	%gdop_hix22(__memcpy_niagara1), %o1
 	xor	%o1, %gdop_lox10(__memcpy_niagara1), %o1
diff --git a/sysdeps/sparc/sparc64/multiarch/memset.S b/sysdeps/sparc/sparc64/multiarch/memset.S
index 2e27448..e2674d7 100644
--- a/sysdeps/sparc/sparc64/multiarch/memset.S
+++ b/sysdeps/sparc/sparc64/multiarch/memset.S
@@ -1,5 +1,5 @@
 /* Multiple versions of memset and bzero
-   Copyright (C) 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010, 2011 Free Software Foundation, Inc.
    Contributed by David S. Miller (davem@davemloft.net)
    This file is part of the GNU C Library.
 
@@ -33,7 +33,7 @@ ENTRY(memset)
 1:	add	%o7, %o3, %o3
 	mov	%o5, %o7
 # endif
-	andcc	%o0, 0x40, %g0	! HWCAP_SPARC_BLKINIT
+	andcc	%o0, HWCAP_SPARC_BLKINIT, %g0
 	be	9f
 	 nop
 # ifdef SHARED
@@ -69,7 +69,7 @@ ENTRY(__bzero)
 1:	add	%o7, %o3, %o3
 	mov	%o5, %o7
 # endif
-	andcc	%o0, 0x40, %g0	! HWCAP_SPARC_BLKINIT
+	andcc	%o0, HWCAP_SPARC_BLKINIT, %g0
 	be	9f
 	 nop
 # ifdef SHARED
diff --git a/sysdeps/sparc/sysdep.h b/sysdeps/sparc/sysdep.h
new file mode 100644
index 0000000..bba4141
--- /dev/null
+++ b/sysdeps/sparc/sysdep.h
@@ -0,0 +1,45 @@
+/* Copyright (C) 2011 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/* Bits present in AT_HWCAP on SPARC.  */
+
+#define HWCAP_SPARC_FLUSH	0x00000001
+#define HWCAP_SPARC_STBAR	0x00000002
+#define HWCAP_SPARC_SWAP	0x00000004
+#define HWCAP_SPARC_MULDIV	0x00000008
+#define HWCAP_SPARC_V9		0x00000010
+#define HWCAP_SPARC_ULTRA3	0x00000020
+#define HWCAP_SPARC_BLKINIT	0x00000040
+#define HWCAP_SPARC_N2		0x00000080
+#define HWCAP_SPARC_MUL32	0x00000100
+#define HWCAP_SPARC_DIV32	0x00000200
+#define HWCAP_SPARC_FSMULD	0x00000400
+#define HWCAP_SPARC_V8PLUS	0x00000800
+#define HWCAP_SPARC_POPC	0x00001000
+#define HWCAP_SPARC_VIS		0x00002000
+#define HWCAP_SPARC_VIS2	0x00004000
+#define HWCAP_SPARC_ASI_BLK_INIT 0x00008000
+#define HWCAP_SPARC_FMAF	0x00010000
+#define HWCAP_SPARC_VIS3	0x00020000
+#define HWCAP_SPARC_HPC		0x00040000
+#define HWCAP_SPARC_RANDOM	0x00080000
+#define HWCAP_SPARC_TRANS	0x00100000
+#define HWCAP_SPARC_FJFMAU	0x00200000
+#define HWCAP_SPARC_IMA		0x00400000
+#define HWCAP_SPARC_ASI_CACHE_SPARING \
+				0x00800000
diff --git a/sysdeps/unix/sparc/sysdep.h b/sysdeps/unix/sparc/sysdep.h
index c8f4cca..590b7ab 100644
--- a/sysdeps/unix/sparc/sysdep.h
+++ b/sysdeps/unix/sparc/sysdep.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 1993, 1994, 1995, 1997, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1994, 1995, 1997, 2003, 2011
+        Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -17,6 +18,7 @@
    02111-1307 USA.  */
 
 #include <sysdeps/unix/sysdep.h>
+#include <sysdeps/sparc/sysdep.h>
 
 #ifdef	__ASSEMBLER__
 
-- 
1.7.6.401.g6a319


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]