Sanitize HWCAP_SPARC_* defines/usage, and add new entries.
authorDavid S. Miller <davem@davemloft.net>
Thu, 1 Sep 2011 20:41:27 +0000 (13:41 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 1 Sep 2011 20:43:06 +0000 (13:43 -0700)
ChangeLog
elf/elf.h
sysdeps/sparc/dl-procinfo.c
sysdeps/sparc/dl-procinfo.h
sysdeps/sparc/sparc32/bits/atomic.h
sysdeps/sparc/sparc32/dl-machine.h
sysdeps/sparc/sparc64/multiarch/memcpy.S
sysdeps/sparc/sparc64/multiarch/memset.S
sysdeps/sparc/sysdep.h [new file with mode: 0644]
sysdeps/unix/sparc/sysdep.h

index cdf4bc09e2951c21c6e20140346c5a8b23a6d0fd..927b24c45874e2c49fd32898ffe7bcd2ea55cd81 100644 (file)
--- 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.
index ca5abbf4038d4739c0fab50227a5e8dcd3d1999f..47db25c16275422cdb9ccd8c6183ccf641e67ddb 100644 (file)
--- 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.  */
index db7e867468b6a2e5e619273b21fb9e4c85a2bd3c..4a629caa1e55366c38b77b5063ec581567f13d19 100644 (file)
@@ -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.
 
 #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
 ;
index 04ebda751b21b4802ebed102005cfd66621b9b15..1aea45867b24ab522e8488b2e6288a4ff6339a1d 100644 (file)
@@ -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))
index ef553f7270040293b0a9e56852f48eaa78afed75..b9b51245ff6dd937f7e344a26602bd539ba26134 100644 (file)
@@ -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) \
   ({                                                                 \
index f8e8fe4179560d34ebeb48f64e5c9dc619cb136b..f2bc94a07d58dbaf251301ce266d67d5aaae404d 100644 (file)
@@ -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>
 
index c12dc3bbedb24748df9026cc5ab80376ce7ceb58..c022a4052638bcc340e953e5b4d221113ca83f1b 100644 (file)
@@ -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
index 2e27448742581afe46a40641ff455ad077538368..e2674d7adfa1e2d34cda91eeea87d1b05a1c49d6 100644 (file)
@@ -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 (file)
index 0000000..bba4141
--- /dev/null
@@ -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
index c8f4ccafa6e183c94547d3ad46de0d3ffc47d14f..590b7abc4a32795237ef1aecccbbd3471eb817dc 100644 (file)
@@ -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__