From patchwork Tue Nov 25 17:28:39 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Senkevich X-Patchwork-Id: 3905 Received: (qmail 28985 invoked by alias); 25 Nov 2014 17:29:14 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 28975 invoked by uid 89); 25 Nov 2014 17:29:14 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.6 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-lb0-f182.google.com X-Received: by 10.112.198.1 with SMTP id iy1mr5596084lbc.13.1416936549457; Tue, 25 Nov 2014 09:29:09 -0800 (PST) MIME-Version: 1.0 From: Andrew Senkevich Date: Tue, 25 Nov 2014 20:28:39 +0300 Message-ID: Subject: [PATCH 9/N] [x86_64] Vectorized math functions To: libc-alpha This is addition of platform-specific header math-vector.h with x86_64 SIMD declarations of math functions and declaration of cos as SIMD function. Only OpenMP case for now and patch will be updated when according document about exact meaning of pragma will be ready. ChangeLog 2014-11-25 Andrew Senkevich * math/bits/mathcalls.h: Use __MATHCALL_VEC for cos. * sysdeps/x86/fpu/bits/math-vector.h: SIMD declarations of math functions for x86_64. +# define __DECL_SIMD_cos __DECL_SIMD_VLEN2_SSE4 __DECL_SIMD_VLEN4_AVX2 +# endif +#endif --- WBR, Andrew diff --git a/math/bits/mathcalls.h b/math/bits/mathcalls.h index 8a94a7e..82928a1 100644 --- a/math/bits/mathcalls.h +++ b/math/bits/mathcalls.h @@ -60,7 +60,7 @@ __MATHCALL (atan,, (_Mdouble_ __x)); __MATHCALL (atan2,, (_Mdouble_ __y, _Mdouble_ __x)); /* Cosine of X. */ -__MATHCALL (cos,, (_Mdouble_ __x)); +__MATHCALL_VEC (cos,, (_Mdouble_ __x)); /* Sine of X. */ __MATHCALL (sin,, (_Mdouble_ __x)); /* Tangent of X. */ diff --git a/sysdeps/x86/fpu/bits/math-vector.h b/sysdeps/x86/fpu/bits/math-vector.h new file mode 100644 index 0000000..3f419e9 --- /dev/null +++ b/sysdeps/x86/fpu/bits/math-vector.h @@ -0,0 +1,37 @@ +/* Platform-specific SIMD declarations of math functions. + Copyright (C) 2014 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 _MATH_H +# error "Never include directly; \ + include instead." +#endif + +/* Get default empty definitions for simd declarations. */ +#include + +#if defined __x86_64__ && defined __FAST_MATH__ +# if defined _OPENMP && _OPENMP >= 201307 +/* OpenMP case. */ +/* TODO Put here link to document about pragma meaning. */ +# define __DECL_SIMD_VLEN2_SSE4 _Pragma ("omp declare simd notinbranch simdlen(2)") +# define __DECL_SIMD_VLEN4_AVX _Pragma ("omp declare simd notinbranch simdlen(4)") +# define __DECL_SIMD_VLEN4_AVX2 _Pragma ("omp declare simd notinbranch simdlen(4)") +# undef __DECL_SIMD_cos