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

This commit is contained in:
David S. Miller 2011-09-01 13:41:27 -07:00
parent 3ba575169a
commit 5f4318d102
10 changed files with 85 additions and 30 deletions

View File

@ -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> 2011-08-31 David S. Miller <davem@davemloft.net>
* sysdeps/unix/sparc/sysdep.h (SETUP_PIC_REG): Define. * sysdeps/unix/sparc/sysdep.h (SETUP_PIC_REG): Define.

View File

@ -1339,17 +1339,6 @@ typedef struct
#define DT_SPARC_REGISTER 0x70000001 #define DT_SPARC_REGISTER 0x70000001
#define DT_SPARC_NUM 2 #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. */ /* MIPS R3000 specific definitions. */
/* Legal values for e_flags field of Elf32_Ehdr. */ /* Legal values for e_flags field of Elf32_Ehdr. */

View File

@ -1,5 +1,5 @@
/* Data for Linux/sparc version of processor capability information. /* 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. This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
@ -47,10 +47,13 @@
#if !defined PROCINFO_DECL && defined SHARED #if !defined PROCINFO_DECL && defined SHARED
._dl_sparc_cap_flags ._dl_sparc_cap_flags
#else #else
PROCINFO_CLASS const char _dl_sparc_cap_flags[8][7] PROCINFO_CLASS const char _dl_sparc_cap_flags[24][11]
#endif #endif
#ifndef PROCINFO_DECL #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 #endif
#if !defined SHARED || defined PROCINFO_DECL #if !defined SHARED || defined PROCINFO_DECL
; ;

View File

@ -1,5 +1,5 @@
/* Linux/sparc version of processor capability information handling macros. /* 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. Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jj@ultra.linux.cz>, 1999. Contributed by Jakub Jelinek <jj@ultra.linux.cz>, 1999.
@ -23,8 +23,9 @@
#define _DL_PROCINFO_H 1 #define _DL_PROCINFO_H 1
#include <ldsodefs.h> #include <ldsodefs.h>
#include <sysdep.h>
#define _DL_HWCAP_COUNT 8 #define _DL_HWCAP_COUNT 24
static inline int static inline int
__attribute__ ((unused)) __attribute__ ((unused))

View File

@ -1,5 +1,5 @@
/* Atomic operations. sparc32 version. /* 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. This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
@ -22,6 +22,7 @@
#define _BITS_ATOMIC_H 1 #define _BITS_ATOMIC_H 1
#include <stdint.h> #include <stdint.h>
#include <sysdep.h>
typedef int8_t atomic8_t; typedef int8_t atomic8_t;
typedef uint8_t uatomic8_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 apps on v9 CPUs e.g. with process shared primitives, use cas insn
on v9 CPUs and ldstub on pre-v9. */ on v9 CPUs and ldstub on pre-v9. */
/* Avoid <ldsodefs.h> include here. */
extern uint64_t _dl_hwcap __attribute__((weak)); extern uint64_t _dl_hwcap __attribute__((weak));
# define __ATOMIC_HWCAP_SPARC_V9 16
# define __atomic_is_v9 \ # define __atomic_is_v9 \
(__builtin_expect (&_dl_hwcap != 0, 1) \ (__builtin_expect (&_dl_hwcap != 0, 1) \
&& __builtin_expect (_dl_hwcap & __ATOMIC_HWCAP_SPARC_V9, \ && __builtin_expect (_dl_hwcap & HWCAP_SPARC_V9, HWCAP_SPARC_V9))
__ATOMIC_HWCAP_SPARC_V9))
# define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ # define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
({ \ ({ \

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. SPARC version. /* 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. Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
@ -26,6 +26,7 @@
#include <string.h> #include <string.h>
#include <sys/param.h> #include <sys/param.h>
#include <ldsodefs.h> #include <ldsodefs.h>
#include <sysdep.h>
#include <tls.h> #include <tls.h>
#include <dl-plt.h> #include <dl-plt.h>

View File

@ -1,5 +1,5 @@
/* Multiple versions of memcpy /* 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) Contributed by David S. Miller (davem@davemloft.net)
This file is part of the GNU C Library. This file is part of the GNU C Library.
@ -33,9 +33,9 @@ ENTRY(memcpy)
1: add %o7, %o3, %o3 1: add %o7, %o3, %o3
mov %o5, %o7 mov %o5, %o7
# endif # endif
andcc %o0, 0x80, %g0 ! HWCAP_SPARC_N2 andcc %o0, HWCAP_SPARC_N2, %g0
be 1f be 1f
andcc %o0, 0x40, %g0 ! HWCAP_SPARC_BLKINIT andcc %o0, HWCAP_SPARC_BLKINIT, %g0
# ifdef SHARED # ifdef SHARED
sethi %gdop_hix22(__memcpy_niagara2), %o1 sethi %gdop_hix22(__memcpy_niagara2), %o1
xor %o1, %gdop_lox10(__memcpy_niagara2), %o1 xor %o1, %gdop_lox10(__memcpy_niagara2), %o1
@ -45,7 +45,7 @@ ENTRY(memcpy)
ba 10f ba 10f
nop nop
1: be 1f 1: be 1f
andcc %o0, 0x20, %g0 ! HWCAP_SPARC_ULTRA3 andcc %o0, HWCAP_SPARC_ULTRA3, %g0
# ifdef SHARED # ifdef SHARED
sethi %gdop_hix22(__memcpy_niagara1), %o1 sethi %gdop_hix22(__memcpy_niagara1), %o1
xor %o1, %gdop_lox10(__memcpy_niagara1), %o1 xor %o1, %gdop_lox10(__memcpy_niagara1), %o1

View File

@ -1,5 +1,5 @@
/* Multiple versions of memset and bzero /* 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) Contributed by David S. Miller (davem@davemloft.net)
This file is part of the GNU C Library. This file is part of the GNU C Library.
@ -33,7 +33,7 @@ ENTRY(memset)
1: add %o7, %o3, %o3 1: add %o7, %o3, %o3
mov %o5, %o7 mov %o5, %o7
# endif # endif
andcc %o0, 0x40, %g0 ! HWCAP_SPARC_BLKINIT andcc %o0, HWCAP_SPARC_BLKINIT, %g0
be 9f be 9f
nop nop
# ifdef SHARED # ifdef SHARED
@ -69,7 +69,7 @@ ENTRY(__bzero)
1: add %o7, %o3, %o3 1: add %o7, %o3, %o3
mov %o5, %o7 mov %o5, %o7
# endif # endif
andcc %o0, 0x40, %g0 ! HWCAP_SPARC_BLKINIT andcc %o0, HWCAP_SPARC_BLKINIT, %g0
be 9f be 9f
nop nop
# ifdef SHARED # ifdef SHARED

45
sysdeps/sparc/sysdep.h Normal file
View File

@ -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

View 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -17,6 +18,7 @@
02111-1307 USA. */ 02111-1307 USA. */
#include <sysdeps/unix/sysdep.h> #include <sysdeps/unix/sysdep.h>
#include <sysdeps/sparc/sysdep.h>
#ifdef __ASSEMBLER__ #ifdef __ASSEMBLER__