From patchwork Mon Apr 27 13:38:29 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Senkevich X-Patchwork-Id: 6465 Received: (qmail 526 invoked by alias); 27 Apr 2015 13:39:06 -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 456 invoked by uid 89); 27 Apr 2015 13:39:05 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-la0-f51.google.com X-Received: by 10.152.182.167 with SMTP id ef7mr10199700lac.109.1430141939998; Mon, 27 Apr 2015 06:38:59 -0700 (PDT) MIME-Version: 1.0 From: Andrew Senkevich Date: Mon, 27 Apr 2015 16:38:29 +0300 Message-ID: Subject: PATCH [4/5] Vector math functions infrastructure To: libc-alpha This patch adds infrastructure for addition of SIMD declarations for math functions in math.h. Added new headers math-vector.h only generic version for now and libm-simd-decl-stubs.h with empty definitions required for proper unfolding of new macros __MATHCALL_VEC which will be used for declaration of vector math functions. End of previous discussion is https://sourceware.org/ml/libc-alpha/2014-12/msg00391.html Ok for trunk? 2015-04-27 Andrew Senkevich * bits/math-vector.h: New file. * bits/libm-simd-decl-stubs.h: New header. * math/Makefile (headers): Added new header libm-simd-decl-stubs.h. * math/math.h (__MATHCALL_VEC): New macro. From f25a38f55d5889edfcf6a5676e195c099b5464ab Mon Sep 17 00:00:00 2001 From: Andrew Senkevich Date: Mon, 27 Apr 2015 15:37:37 +0300 Subject: [PATCH 4/5] This patch adds infrastructure for addition of SIMD declarations for math functions in math.h. Added new headers math-vector.h only generic version for now and libm-simd-decl-stubs.h with empty definitions required for proper unfolding of new macros __MATHCALL_VEC which will be used for declaration of vector math functions. 2015-04-27 Andrew Senkevich * bits/math-vector.h: New file. * bits/libm-simd-decl-stubs.h: New header. * math/Makefile (headers): Added new header libm-simd-decl-stubs.h. * math/math.h (__MATHCALL_VEC): New macro. --- bits/libm-simd-decl-stubs.h | 40 ++++++++++++++++++++++++++++++++++++++++ bits/math-vector.h | 27 +++++++++++++++++++++++++++ math/Makefile | 3 ++- math/math.h | 9 +++++++++ 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 bits/libm-simd-decl-stubs.h create mode 100644 bits/math-vector.h diff --git a/bits/libm-simd-decl-stubs.h b/bits/libm-simd-decl-stubs.h new file mode 100644 index 0000000..21270ee --- /dev/null +++ b/bits/libm-simd-decl-stubs.h @@ -0,0 +1,40 @@ +/* Empty definitions required for __MATHCALL_VEC unfolding in mathcalls.h. + Copyright (C) 2015 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 + +/* Needed definitions could be generated with: + for func in $(grep __MATHCALL_VEC math/bits/mathcalls.h |\ + sed -r "s|__MATHCALL_VEC.?\(||; s|,.*||"); do + echo "#define __DECL_SIMD_${func}"; + echo "#define __DECL_SIMD_${func}f"; + echo "#define __DECL_SIMD_${func}l"; + done + */ + +#ifndef _BITS_LIBM_SIMD_DECL_STUBS_H +#define _BITS_LIBM_SIMD_DECL_STUBS_H 1 + +#define __DECL_SIMD_cos +#define __DECL_SIMD_cosf +#define __DECL_SIMD_cosl + +#endif diff --git a/bits/math-vector.h b/bits/math-vector.h new file mode 100644 index 0000000..2f2d31c --- /dev/null +++ b/bits/math-vector.h @@ -0,0 +1,27 @@ +/* Platform-specific SIMD declarations of math functions. + Copyright (C) 2015 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 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 required for __MATHCALL_VEC unfolding. + Plaform-specific analogue of this header should redefine them with specific + SIMD declarations. */ +#include diff --git a/math/Makefile b/math/Makefile index 20315dc..127aa9b 100644 --- a/math/Makefile +++ b/math/Makefile @@ -26,7 +26,8 @@ headers := math.h bits/mathcalls.h bits/mathinline.h bits/huge_val.h \ bits/huge_valf.h bits/huge_vall.h bits/inf.h bits/nan.h \ fpu_control.h complex.h bits/cmathcalls.h fenv.h \ bits/fenv.h bits/fenvinline.h bits/mathdef.h tgmath.h \ - bits/math-finite.h + bits/math-finite.h bits/math-vector.h \ + bits/libm-simd-decl-stubs.h # FPU support code. aux := setfpucw fpu_control diff --git a/math/math.h b/math/math.h index c7ff169..7e959fc 100644 --- a/math/math.h +++ b/math/math.h @@ -27,6 +27,9 @@ __BEGIN_DECLS +/* Get machine-dependent vector math functions declarations. */ +#include + /* Get machine-dependent HUGE_VAL value (returned on overflow). On all IEEE754 machines, this is +Infinity. */ #include @@ -49,6 +52,12 @@ __BEGIN_DECLS so we can easily declare each function as both `name' and `__name', and can declare the float versions `namef' and `__namef'. */ +#define __SIMD_DECL(function) __CONCAT (__DECL_SIMD_, function) + +#define __MATHCALL_VEC(function, suffix, args) \ + __SIMD_DECL (__MATH_PRECNAME (function, suffix)) \ + __MATHCALL (function, suffix, args) + #define __MATHCALL(function,suffix, args) \ __MATHDECL (_Mdouble_,function,suffix, args) #define __MATHDECL(type, function,suffix, args) \