Don't check HWCAP_ARM_VFP in OS-generic code.

Presume VFP if compiled without __SOFTFP__ defined.
This commit is contained in:
Roland McGrath 2012-08-09 10:04:56 -07:00
parent 33b4a91e5b
commit a4ca519518
18 changed files with 129 additions and 90 deletions

View File

@ -1,3 +1,23 @@
2012-08-09 Roland McGrath <roland@hack.frob.com>
* sysdeps/arm/arm-features.h: New file.
* sysdeps/unix/sysv/linux/arm/arm-features.h: New file.
* sysdeps/arm/fclrexcpt.c: Use ARM_HAVE_VFP instead of hwcap bits.
* sysdeps/arm/fedisblxcpt.c: Likewise.
* sysdeps/arm/feenablxcpt.c: Likewise.
* sysdeps/arm/fegetenv.c: Likewise.
* sysdeps/arm/fegetexcept.c: Likewise.
* sysdeps/arm/fegetround.c: Likewise.
* sysdeps/arm/feholdexcpt.c: Likewise.
* sysdeps/arm/fesetenv.c: Likewise.
* sysdeps/arm/fesetround.c: Likewise.
* sysdeps/arm/feupdateenv.c: Likewise.
* sysdeps/arm/fgetexcptflg.c: Likewise.
* sysdeps/arm/fraiseexcpt.c: Likewise.
* sysdeps/arm/fsetexcptflg.c: Likewise.
* sysdeps/arm/ftestexcept.c: Likewise.
* sysdeps/arm/setfpucw.c: Likewise.
2012-08-08 Roland McGrath <roland@hack.frob.com>
* sysdeps/arm/sotruss-lib.c: New file.

View File

@ -0,0 +1,34 @@
/* Macros to test for CPU features on ARM. Generic ARM version.
Copyright (C) 2012 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, see
<http://www.gnu.org/licenses/>. */
#ifndef _ARM_ARM_FEATURES_H
#define _ARM_ARM_FEATURES_H 1
/* An OS-specific arm-features.h file should define ARM_HAVE_VFP to
an appropriate expression for testing at runtime whether the VFP
hardware is present. We'll then redefine it to a constant if we
know at compile time that we can assume VFP. */
#ifndef __SOFTFP__
/* The compiler is generating VFP instructions, so we're already
assuming the hardware exists. */
# undef ARM_HAVE_VFP
# define ARM_HAVE_VFP 1
#endif
#endif /* arm-features.h */

View File

@ -1,5 +1,5 @@
/* Clear given exceptions in current floating-point environment.
Copyright (C) 1997,98,99,2000,01,05,11 Free Software Foundation, Inc.
Copyright (C) 1997-2012 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
@ -18,16 +18,13 @@
#include <fenv.h>
#include <fpu_control.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
int
__feclearexcept (int excepts)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
unsigned long int temp;

View File

@ -1,5 +1,5 @@
/* Disable floating-point exceptions.
Copyright (C) 2001, 2005 Free Software Foundation, Inc.
Copyright (C) 2001-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Philip Blundell <philb@gnu.org>, 2001.
@ -19,16 +19,13 @@
#include <fenv.h>
#include <fpu_control.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
int
fedisableexcept (int excepts)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
unsigned long int new_exc, old_exc;

View File

@ -1,5 +1,5 @@
/* Enable floating-point exceptions.
Copyright (C) 2001, 2005 Free Software Foundation, Inc.
Copyright (C) 2001-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Philip Blundell <philb@gnu.org>, 2001.
@ -19,16 +19,13 @@
#include <fenv.h>
#include <fpu_control.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
int
feenableexcept (int excepts)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
unsigned long int new_exc, old_exc;

View File

@ -1,5 +1,5 @@
/* Store current floating-point environment.
Copyright (C) 1997,98,99,2000,01,05,10 Free Software Foundation, Inc.
Copyright (C) 1997-2012 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
@ -18,16 +18,13 @@
#include <fenv.h>
#include <fpu_control.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
int
__fegetenv (fenv_t *envp)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
unsigned long int temp;
_FPU_GETCW (temp);

View File

@ -1,5 +1,5 @@
/* Get floating-point exceptions.
Copyright (C) 2001, 2005 Free Software Foundation, Inc.
Copyright (C) 2001-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Philip Blundell <philb@gnu.org>, 2001
@ -19,16 +19,13 @@
#include <fenv.h>
#include <fpu_control.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
int
fegetexcept (void)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
unsigned long temp;

View File

@ -1,5 +1,5 @@
/* Return current rounding direction.
Copyright (C) 2004, 2005 Free Software Foundation, Inc.
Copyright (C) 2004-2012 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
@ -18,16 +18,13 @@
#include <fenv.h>
#include <fpu_control.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
int
fegetround (void)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
unsigned int temp;

View File

@ -1,5 +1,5 @@
/* Store current floating-point environment and clear exceptions.
Copyright (C) 1997, 1998, 1999, 2005 Free Software Foundation, Inc.
Copyright (C) 1997-2012 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
@ -18,16 +18,13 @@
#include <fenv.h>
#include <fpu_control.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
int
feholdexcept (fenv_t *envp)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
unsigned long int temp;

View File

@ -1,5 +1,5 @@
/* Install given floating-point environment.
Copyright (C) 2004, 2005 Free Software Foundation, Inc.
Copyright (C) 2004-2012 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
@ -18,16 +18,13 @@
#include <fenv.h>
#include <fpu_control.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
int
__fesetenv (const fenv_t *envp)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
unsigned int temp;

View File

@ -1,5 +1,5 @@
/* Set current rounding direction.
Copyright (C) 2004, 2005 Free Software Foundation, Inc.
Copyright (C) 2004-2012 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
@ -18,16 +18,13 @@
#include <fenv.h>
#include <fpu_control.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
int
fesetround (int round)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
fpu_control_t temp;

View File

@ -1,5 +1,5 @@
/* Install given floating-point environment and raise exceptions.
Copyright (C) 1997, 1999, 2000, 2008, 2010 Free Software Foundation, Inc.
Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -19,16 +19,13 @@
#include <fenv.h>
#include <fpu_control.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
int
__feupdateenv (const fenv_t *envp)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
unsigned int temp;

View File

@ -1,5 +1,5 @@
/* Store current representation for exceptions.
Copyright (C) 1997, 1999, 2000, 2008 Free Software Foundation, Inc.
Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -19,16 +19,13 @@
#include <fenv.h>
#include <fpu_control.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
int
__fegetexceptflag (fexcept_t *flagp, int excepts)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
unsigned long temp;

View File

@ -1,5 +1,5 @@
/* Raise given exceptions.
Copyright (C) 2004, 2005, 2011 Free Software Foundation, Inc.
Copyright (C) 2004-2012 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
@ -19,16 +19,13 @@
#include <fpu_control.h>
#include <fenv.h>
#include <float.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
int
feraiseexcept (int excepts)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
int fpscr;
const float fp_zero = 0.0, fp_one = 1.0, fp_max = FLT_MAX,

View File

@ -1,5 +1,5 @@
/* Set floating-point environment exception handling.
Copyright (C) 1997,98,99,2000,01,05,08,11 Free Software Foundation, Inc.
Copyright (C) 1997-2012 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
@ -19,16 +19,13 @@
#include <fenv.h>
#include <math.h>
#include <fpu_control.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
int
__fesetexceptflag (const fexcept_t *flagp, int excepts)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
fexcept_t temp;

View File

@ -1,5 +1,5 @@
/* Test exception in current environment.
Copyright (C) 1997, 1998, 2005, 2010 Free Software Foundation, Inc.
Copyright (C) 1997-2012 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
@ -18,16 +18,13 @@
#include <fenv.h>
#include <fpu_control.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
int
fetestexcept (int excepts)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
fexcept_t temp;

View File

@ -1,5 +1,5 @@
/* Set the FPU control word.
Copyright (C) 1996, 1997, 1999, 2005 Free Software Foundation, Inc.
Copyright (C) 1996-2012 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
@ -18,16 +18,13 @@
#include <math.h>
#include <fpu_control.h>
#include <arm-features.h>
#include <unistd.h>
#include <ldsodefs.h>
#include <dl-procinfo.h>
#include <sysdep.h>
void
__setfpucw (fpu_control_t set)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
if (ARM_HAVE_VFP)
{
fpu_control_t cw;

View File

@ -0,0 +1,30 @@
/* Macros to test for CPU features on ARM. Linux version.
Copyright (C) 2012 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, see
<http://www.gnu.org/licenses/>. */
#ifndef _LINUX_ARM_FEATURES_H
#define _LINUX_ARM_FEATURES_H 1
#ifndef __ASSEMBLER__
# include <ldsodefs.h>
# define ARM_HAVE_VFP (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
#endif
#include_next <arm-features.h>
#endif /* arm-features.h */