From patchwork Mon Aug 30 14:40:16 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: PATCH: Enable TARGET_HAS_SINCOS if x87 FPU fsincos is available Date: Mon, 30 Aug 2010 04:40:16 -0000 From: H.J. Lu X-Patchwork-Id: 63044 Message-Id: <20100830144016.GA31228@intel.com> To: gcc-patches@gcc.gnu.org Cc: Uros Bizjak , Maxim Kuvyrkov Hi, On x86, sincos is always available if x87 FPU fsincos is available. This patch enables TARGET_HAS_SINCOS for -ffast-math and x87 FPU. Also x86 Bionic C library doesn't provide sincos and we shouldn't enable TARGET_HAS_SINCOS with OPTION_BIONIC on x86. OK for trunk? Thanks. H.J. --- 2010-08-30 H.J. Lu * config/linux.h (TARGET_HAS_SINCOS): Define only if not defined. * config/i386/i386.h (TARGET_HAS_SINCOS): New. Enabled if x87 FPU fsincos is available. * config/i386/x86-64.h (TARGET_HAS_SINCOS): Likewise. * config/i386/linux.h (TARGET_HAS_SINCOS): Likewise. * config/i386/linux64.h (TARGET_HAS_SINCOS): Likewise. diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 5bae99d..493b5d2 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -2492,6 +2492,12 @@ struct GTY(()) machine_function { #undef TARG_COND_NOT_TAKEN_BRANCH_COST #define TARG_COND_NOT_TAKEN_BRANCH_COST ix86_cost->cond_not_taken_branch_cost +/* Use x87 FPU fsincos if it is available. */ +#undef TARGET_HAS_SINCOS +#define TARGET_HAS_SINCOS \ + (flag_unsafe_math_optimizations \ + && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)) + /* Local variables: version-control: t diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h index 2a31880..f466d6d 100644 --- a/gcc/config/i386/linux.h +++ b/gcc/config/i386/linux.h @@ -35,6 +35,15 @@ along with GCC; see the file COPYING3. If not see #undef TARGET_TLS_DIRECT_SEG_REFS_DEFAULT #define TARGET_TLS_DIRECT_SEG_REFS_DEFAULT MASK_TLS_DIRECT_SEG_REFS +/* Whether we have sincos that follows the GNU extension. There is no + sincos in Bionic C library. We can only use x87 FPU fsincos if it + is available. */ +#undef TARGET_HAS_SINCOS +#define TARGET_HAS_SINCOS \ + (OPTION_GLIBC \ + || (flag_unsafe_math_optimizations \ + && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387))) + #undef ASM_COMMENT_START #define ASM_COMMENT_START "#" diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h index 867de59..9f38a57 100644 --- a/gcc/config/i386/linux64.h +++ b/gcc/config/i386/linux64.h @@ -50,6 +50,15 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #undef TARGET_TLS_DIRECT_SEG_REFS_DEFAULT #define TARGET_TLS_DIRECT_SEG_REFS_DEFAULT MASK_TLS_DIRECT_SEG_REFS +/* Whether we have sincos that follows the GNU extension. There is no + sincos in Bionic C library. We can only use x87 FPU fsincos if it + is available. */ +#undef TARGET_HAS_SINCOS +#define TARGET_HAS_SINCOS \ + (OPTION_GLIBC \ + || (flag_unsafe_math_optimizations \ + && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387))) + /* Provide a LINK_SPEC. Here we provide support for the special GCC options -static and -shared, which allow us to link things in one of these three modes by applying the appropriate combinations of diff --git a/gcc/config/i386/x86-64.h b/gcc/config/i386/x86-64.h index 1b64813..d18ec23 100644 --- a/gcc/config/i386/x86-64.h +++ b/gcc/config/i386/x86-64.h @@ -107,3 +107,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #undef TARGET_ASM_UNIQUE_SECTION #define TARGET_ASM_UNIQUE_SECTION x86_64_elf_unique_section + +/* Use x87 FPU fsincos if it is available. */ +#undef TARGET_HAS_SINCOS +#define TARGET_HAS_SINCOS \ + (flag_unsafe_math_optimizations \ + && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)) diff --git a/gcc/config/linux.h b/gcc/config/linux.h index e283a9a..576a2ac 100644 --- a/gcc/config/linux.h +++ b/gcc/config/linux.h @@ -159,7 +159,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see is present in the runtime library. */ #define TARGET_C99_FUNCTIONS (OPTION_GLIBC) +#ifndef TARGET_HAS_SINCOS /* Whether we have sincos that follows the GNU extension. */ #define TARGET_HAS_SINCOS (OPTION_GLIBC || OPTION_BIONIC) +#endif #define TARGET_POSIX_IO