From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21147 invoked by alias); 9 Aug 2012 17:10:58 -0000 Received: (qmail 21015 invoked by uid 22791); 9 Aug 2012 17:10:53 -0000 X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,TW_HW X-Spam-Check-By: sourceware.org Received: from toast.topped-with-meat.com (HELO topped-with-meat.com) (204.197.218.159) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 09 Aug 2012 17:10:37 +0000 Received: by topped-with-meat.com (Postfix, from userid 5281) id CC7D32C0FD; Thu, 9 Aug 2012 10:10:33 -0700 (PDT) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit From: Roland McGrath To: "Joseph S. Myers" Cc: Subject: Re: [PATCH roland/arm-hwcap-vfp] don't use HWCAP_ARM_* in OS-independent code In-Reply-To: Joseph S. Myers's message of Thursday, 9 August 2012 11:16:27 +0000 References: <20120808235921.AA4292C075@topped-with-meat.com> Message-Id: <20120809171033.CC7D32C0FD@topped-with-meat.com> Date: Thu, 09 Aug 2012 17:10:00 -0000 X-CMAE-Score: 0 X-CMAE-Analysis: v=2.0 cv=LtfpOghc c=1 sm=1 a=phixoO_r9hUA:10 a=Z6MIti7PxpgA:10 a=kj9zAlcOel0A:10 a=hOe2yjtxAAAA:8 a=14OXPxybAAAA:8 a=mDV3o1hIAAAA:8 a=TkTTPzHaAAAA:8 a=k12XFSEGerSqCD26xb0A:9 a=CjuIK1q_8ugA:10 a=ii61gXl28gQA:10 a=CA1p0XgCalIA:10 a=WkljmVdYkabdwxfqvArNOQ==:117 X-IsSubscribed: yes Mailing-List: contact libc-ports-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: libc-ports-owner@sourceware.org X-SW-Source: 2012-08/txt/msg00076.txt.bz2 > __VFP_FP__ doesn't mean "generating VFP instructions", it means > "floating-point types have VFP layout" (i.e. normal IEEE floating-point > with the same byte ordering / endianness as integer types, as opposed to > FPA format), which is always true for EABI. The relevant test for > "generating VFP instructions" is defined __VFP_FP__ && !defined __SOFTFP__ > (which can be simplified to just !defined __SOFTFP__ given that EABI is > assumed). Thanks for the explanation. I've changed the conditionals. On further reflection I also decided that using ldsodefs.h was just too ugly and I've added an arm-features.h instead. How does this look now? Thanks, Roland ports/ChangeLog.arm 2012-08-09 Roland McGrath * 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. diff --git a/ports/sysdeps/arm/arm-features.h b/ports/sysdeps/arm/arm-features.h new file mode 100644 index 0000000..0f99b3a --- /dev/null +++ b/ports/sysdeps/arm/arm-features.h @@ -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 + . */ + +#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 */ diff --git a/ports/sysdeps/arm/fclrexcpt.c b/ports/sysdeps/arm/fclrexcpt.c index ddedc35..23435fb 100644 --- a/ports/sysdeps/arm/fclrexcpt.c +++ b/ports/sysdeps/arm/fclrexcpt.c @@ -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 #include +#include -#include -#include -#include -#include int __feclearexcept (int excepts) { - if (GLRO (dl_hwcap) & HWCAP_ARM_VFP) + if (ARM_HAVE_VFP) { unsigned long int temp; diff --git a/ports/sysdeps/arm/fedisblxcpt.c b/ports/sysdeps/arm/fedisblxcpt.c index c9c62a4..5b63d9a 100644 --- a/ports/sysdeps/arm/fedisblxcpt.c +++ b/ports/sysdeps/arm/fedisblxcpt.c @@ -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 , 2001. @@ -19,16 +19,13 @@ #include #include +#include -#include -#include -#include -#include int fedisableexcept (int excepts) { - if (GLRO (dl_hwcap) & HWCAP_ARM_VFP) + if (ARM_HAVE_VFP) { unsigned long int new_exc, old_exc; diff --git a/ports/sysdeps/arm/feenablxcpt.c b/ports/sysdeps/arm/feenablxcpt.c index 3b2b934..c5f0630 100644 --- a/ports/sysdeps/arm/feenablxcpt.c +++ b/ports/sysdeps/arm/feenablxcpt.c @@ -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 , 2001. @@ -19,16 +19,13 @@ #include #include +#include -#include -#include -#include -#include int feenableexcept (int excepts) { - if (GLRO (dl_hwcap) & HWCAP_ARM_VFP) + if (ARM_HAVE_VFP) { unsigned long int new_exc, old_exc; diff --git a/ports/sysdeps/arm/fegetenv.c b/ports/sysdeps/arm/fegetenv.c index c638635..1e8063c 100644 --- a/ports/sysdeps/arm/fegetenv.c +++ b/ports/sysdeps/arm/fegetenv.c @@ -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 #include +#include -#include -#include -#include -#include int __fegetenv (fenv_t *envp) { - if (GLRO (dl_hwcap) & HWCAP_ARM_VFP) + if (ARM_HAVE_VFP) { unsigned long int temp; _FPU_GETCW (temp); diff --git a/ports/sysdeps/arm/fegetexcept.c b/ports/sysdeps/arm/fegetexcept.c index 929d6c5..a71e7da 100644 --- a/ports/sysdeps/arm/fegetexcept.c +++ b/ports/sysdeps/arm/fegetexcept.c @@ -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 , 2001 @@ -19,16 +19,13 @@ #include #include +#include -#include -#include -#include -#include int fegetexcept (void) { - if (GLRO (dl_hwcap) & HWCAP_ARM_VFP) + if (ARM_HAVE_VFP) { unsigned long temp; diff --git a/ports/sysdeps/arm/fegetround.c b/ports/sysdeps/arm/fegetround.c index df10497..0ed3dc9 100644 --- a/ports/sysdeps/arm/fegetround.c +++ b/ports/sysdeps/arm/fegetround.c @@ -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 #include +#include -#include -#include -#include -#include int fegetround (void) { - if (GLRO (dl_hwcap) & HWCAP_ARM_VFP) + if (ARM_HAVE_VFP) { unsigned int temp; diff --git a/ports/sysdeps/arm/feholdexcpt.c b/ports/sysdeps/arm/feholdexcpt.c index 4aed48b..cfa11d7 100644 --- a/ports/sysdeps/arm/feholdexcpt.c +++ b/ports/sysdeps/arm/feholdexcpt.c @@ -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 #include +#include -#include -#include -#include -#include int feholdexcept (fenv_t *envp) { - if (GLRO (dl_hwcap) & HWCAP_ARM_VFP) + if (ARM_HAVE_VFP) { unsigned long int temp; diff --git a/ports/sysdeps/arm/fesetenv.c b/ports/sysdeps/arm/fesetenv.c index 6137032..2fad61d 100644 --- a/ports/sysdeps/arm/fesetenv.c +++ b/ports/sysdeps/arm/fesetenv.c @@ -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 #include +#include -#include -#include -#include -#include int __fesetenv (const fenv_t *envp) { - if (GLRO (dl_hwcap) & HWCAP_ARM_VFP) + if (ARM_HAVE_VFP) { unsigned int temp; diff --git a/ports/sysdeps/arm/fesetround.c b/ports/sysdeps/arm/fesetround.c index 997bd98..6de1644 100644 --- a/ports/sysdeps/arm/fesetround.c +++ b/ports/sysdeps/arm/fesetround.c @@ -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 #include +#include -#include -#include -#include -#include int fesetround (int round) { - if (GLRO (dl_hwcap) & HWCAP_ARM_VFP) + if (ARM_HAVE_VFP) { fpu_control_t temp; diff --git a/ports/sysdeps/arm/feupdateenv.c b/ports/sysdeps/arm/feupdateenv.c index 98f2654..c0ed06e 100644 --- a/ports/sysdeps/arm/feupdateenv.c +++ b/ports/sysdeps/arm/feupdateenv.c @@ -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 , 1997. @@ -19,16 +19,13 @@ #include #include +#include -#include -#include -#include -#include int __feupdateenv (const fenv_t *envp) { - if (GLRO (dl_hwcap) & HWCAP_ARM_VFP) + if (ARM_HAVE_VFP) { unsigned int temp; diff --git a/ports/sysdeps/arm/fgetexcptflg.c b/ports/sysdeps/arm/fgetexcptflg.c index 41661a2..7b6d669 100644 --- a/ports/sysdeps/arm/fgetexcptflg.c +++ b/ports/sysdeps/arm/fgetexcptflg.c @@ -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 , 1997. @@ -19,16 +19,13 @@ #include #include +#include -#include -#include -#include -#include int __fegetexceptflag (fexcept_t *flagp, int excepts) { - if (GLRO (dl_hwcap) & HWCAP_ARM_VFP) + if (ARM_HAVE_VFP) { unsigned long temp; diff --git a/ports/sysdeps/arm/fraiseexcpt.c b/ports/sysdeps/arm/fraiseexcpt.c index 0a43688..cb0f75c 100644 --- a/ports/sysdeps/arm/fraiseexcpt.c +++ b/ports/sysdeps/arm/fraiseexcpt.c @@ -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 #include #include +#include -#include -#include -#include -#include 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, diff --git a/ports/sysdeps/arm/fsetexcptflg.c b/ports/sysdeps/arm/fsetexcptflg.c index bee51a9..f26268d 100644 --- a/ports/sysdeps/arm/fsetexcptflg.c +++ b/ports/sysdeps/arm/fsetexcptflg.c @@ -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 #include #include +#include -#include -#include -#include -#include int __fesetexceptflag (const fexcept_t *flagp, int excepts) { - if (GLRO (dl_hwcap) & HWCAP_ARM_VFP) + if (ARM_HAVE_VFP) { fexcept_t temp; diff --git a/ports/sysdeps/arm/ftestexcept.c b/ports/sysdeps/arm/ftestexcept.c index 06817d2..8e37db1 100644 --- a/ports/sysdeps/arm/ftestexcept.c +++ b/ports/sysdeps/arm/ftestexcept.c @@ -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 #include +#include -#include -#include -#include -#include int fetestexcept (int excepts) { - if (GLRO (dl_hwcap) & HWCAP_ARM_VFP) + if (ARM_HAVE_VFP) { fexcept_t temp; diff --git a/ports/sysdeps/arm/setfpucw.c b/ports/sysdeps/arm/setfpucw.c index d0cea32..0947e27 100644 --- a/ports/sysdeps/arm/setfpucw.c +++ b/ports/sysdeps/arm/setfpucw.c @@ -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 #include +#include -#include -#include -#include -#include void __setfpucw (fpu_control_t set) { - if (GLRO (dl_hwcap) & HWCAP_ARM_VFP) + if (ARM_HAVE_VFP) { fpu_control_t cw; diff --git a/ports/sysdeps/unix/sysv/linux/arm/arm-features.h b/ports/sysdeps/unix/sysv/linux/arm/arm-features.h new file mode 100644 index 0000000..f20a705 --- /dev/null +++ b/ports/sysdeps/unix/sysv/linux/arm/arm-features.h @@ -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 + . */ + +#ifndef _LINUX_ARM_FEATURES_H +#define _LINUX_ARM_FEATURES_H 1 + +#ifndef __ASSEMBLER__ +# include + +# define ARM_HAVE_VFP (GLRO (dl_hwcap) & HWCAP_ARM_VFP) +#endif + +#include_next + +#endif /* arm-features.h */