This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 9/N] [x86_64] Vectorized math functions


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  <andrew.n.senkevich@gmail.com>

        * math/bits/mathcalls.h: Use __MATHCALL_VEC for cos.
        * sysdeps/x86/fpu/bits/math-vector.h: SIMD declarations of math
        functions for x86_64.

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
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MATH_H
+# error "Never include <bits/math-vector.h> directly; \
+       include <math.h> instead."
+#endif
+
+/* Get default empty definitions for simd declarations. */
+#include <libm-simd-decl-stubs.h>
+
+#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
+#  define __DECL_SIMD_cos      __DECL_SIMD_VLEN2_SSE4 __DECL_SIMD_VLEN4_AVX2
+# endif
+#endif


--
WBR,
Andrew


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]