[3/N,x86_64] Vectorized math functions

Message ID CAMXFM3vbyrZ-iUR5Kd7L8CMakpn+ObdTeKTYkfLj+Uzt3v5GEQ@mail.gmail.com
State Superseded
Headers

Commit Message

Andrew Senkevich Nov. 24, 2014, 6:16 p.m. UTC
  2014-11-21 20:58 GMT+03:00 Joseph Myers <joseph@codesourcery.com>:
> On Thu, 20 Nov 2014, Andrew Senkevich wrote:
>
>> +print_defs jn
>> +print_defs jnf
>> +print_defs jnl
>> +
>> +print_defs cexp
>> +print_defs cexpf
>> +print_defs cexpl
>> +
>> +print_defs tgamma
>> +print_defs tgammaf
>> +print_defs tgammal
>
> Rather than hardcoding this, I think it would be better to base it on the
> output of "grep 'START.*;$' libm-test.inc" (with a comment that once all
> functions use ALL_RM_TEST instead of using START directly, this code can
> be removed).
>
>> +/* This generated header defines series of macros started with HAVE_VECTOR_ */
>
> Comments need to end with ".  ".

Also fixed.



--
WBR,
Andrew
  

Comments

Joseph Myers Nov. 26, 2014, 4:53 p.m. UTC | #1
On Mon, 24 Nov 2014, Andrew Senkevich wrote:

> @@ -113,9 +113,10 @@ ulps-file = $(firstword $(wildcard
> $(sysdirs:%=%/libm-test-ulps)))
>  $(addprefix $(objpfx), $(libm-tests-generated)): $(objpfx)libm-test.stmp
> 
>  $(objpfx)libm-test.stmp: $(ulps-file) libm-test.inc gen-libm-test.pl \
> - auto-libm-test-out
> + gen-libm-have-vector-test.sh auto-libm-test-out
>   $(make-target-directory)
>   $(PERL) gen-libm-test.pl -u $< -o "$(objpfx)"
> + $(BASH) gen-libm-have-vector-test.sh > $(objpfx)libm-have-vector-test.h

I don't see anything bash-specific in this script, so $(SHELL) seems more 
appropriate.

> +# Generate series of definitions used for vector math functions tests.
> +print_defs()
> +{
> +  echo "#if defined TEST_VECTOR_$1 && TEST_VECTOR_$1"
> +  echo "# define HAVE_VECTOR_$1 1"
> +  echo "# define ${1}_VEC_SUFF WRAPPER_NAME($1)"

Space before '(' in call to WRAPPER_NAME.

> +  echo "#else"
> +  echo "# define HAVE_VECTOR_$1 0"
> +  echo "# define ${1}_VEC_SUFF $1"
> +  echo "#endif"
> +  echo

I think more explanation is needed in a comment about where the 
TEST_VECTOR_* macros, and WRAPPER_NAME, come from.

Also, where is the ${1}_VEC_SUFF macro used?

Again, it would be helpful if you had a git branch with the latest rebased 
version of this patch series, updated each time a patch changed, so we 
could see where this is heading.  See 
<https://sourceware.org/glibc/wiki/GlibcGit>: branches under the 
<username>/ namespace can be freely created and deleted.
  
Andrew Senkevich Nov. 26, 2014, 5:26 p.m. UTC | #2
2014-11-26 19:53 GMT+03:00 Joseph Myers <joseph@codesourcery.com>:
> Also, where is the ${1}_VEC_SUFF macro used?

In individual tests, as result of FUNC_TEST unfolding to avoid
warnings / errors about undeclared functions.


--
WBR,
Andrew
  
Joseph Myers Nov. 26, 2014, 5:30 p.m. UTC | #3
On Wed, 26 Nov 2014, Andrew Senkevich wrote:

> 2014-11-26 19:53 GMT+03:00 Joseph Myers <joseph@codesourcery.com>:
> > Also, where is the ${1}_VEC_SUFF macro used?
> 
> In individual tests, as result of FUNC_TEST unfolding to avoid
> warnings / errors about undeclared functions.

Where *in this patch series* is the relevant definition making use of 
${1}_VEC_SUFF?
  
Andrew Senkevich Nov. 26, 2014, 5:37 p.m. UTC | #4
2014-11-26 20:30 GMT+03:00 Joseph Myers <joseph@codesourcery.com>:
> Where *in this patch series* is the relevant definition making use of
> ${1}_VEC_SUFF?

In patch 6 which adds tests -
https://sourceware.org/ml/libc-alpha/2014-11/msg00713.html (now
contains inaccuracies).


--
WBR,
Andrew
  
Andrew Senkevich Nov. 27, 2014, 12:19 p.m. UTC | #5
2014-11-26 19:53 GMT+03:00 Joseph Myers <joseph@codesourcery.com>:
> Again, it would be helpful if you had a git branch with the latest rebased
> version of this patch series, updated each time a patch changed, so we
> could see where this is heading.  See
> <https://sourceware.org/glibc/wiki/GlibcGit>: branches under the
> <username>/ namespace can be freely created and deleted.

Ok, I have applied for sourceware.org account and point you as person
who approved request (in this form -
https://sourceware.org/cgi-bin/pdw/ps_form.cgi).
Will wait for account.


--
WBR,
Andrew
  
Joseph Myers Nov. 27, 2014, 2:20 p.m. UTC | #6
On Thu, 27 Nov 2014, Andrew Senkevich wrote:

> 2014-11-26 19:53 GMT+03:00 Joseph Myers <joseph@codesourcery.com>:
> > Again, it would be helpful if you had a git branch with the latest rebased
> > version of this patch series, updated each time a patch changed, so we
> > could see where this is heading.  See
> > <https://sourceware.org/glibc/wiki/GlibcGit>: branches under the
> > <username>/ namespace can be freely created and deleted.
> 
> Ok, I have applied for sourceware.org account and point you as person
> who approved request (in this form -
> https://sourceware.org/cgi-bin/pdw/ps_form.cgi).
> Will wait for account.

The copyright assignment paperwork still needs to be completed before you 
can get write access.  I don't see you in copyright.list.
  
Christopher Faylor Nov. 27, 2014, 4:35 p.m. UTC | #7
On Thu, Nov 27, 2014 at 02:20:47PM +0000, Joseph Myers wrote:
>On Thu, 27 Nov 2014, Andrew Senkevich wrote:
>
>> 2014-11-26 19:53 GMT+03:00 Joseph Myers <joseph@codesourcery.com>:
>> > Again, it would be helpful if you had a git branch with the latest rebased
>> > version of this patch series, updated each time a patch changed, so we
>> > could see where this is heading.  See
>> > <https://sourceware.org/glibc/wiki/GlibcGit>: branches under the
>> > <username>/ namespace can be freely created and deleted.
>> 
>> Ok, I have applied for sourceware.org account and point you as person
>> who approved request (in this form -
>> https://sourceware.org/cgi-bin/pdw/ps_form.cgi).
>> Will wait for account.
>
>The copyright assignment paperwork still needs to be completed before you 
>can get write access.  I don't see you in copyright.list.

Ok.  I've cancelled this request for now.  Please reapply when the
copyright arrangements are all set.
  

Patch

diff --git a/math/Makefile b/math/Makefile
index 866bc0f..8a89308 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -102,7 +102,7 @@  libm-tests = test-float test-double
$(test-longdouble-$(long-double-fcts)) \
 libm-tests.o = $(addsuffix .o,$(libm-tests))

 tests += $(libm-tests)
-libm-tests-generated = libm-test-ulps.h libm-test.c
+libm-tests-generated = libm-test-ulps.h libm-have-vector-test.h libm-test.c
 generated += $(libm-tests-generated) libm-test.stmp

 # This is needed for dependencies
@@ -113,9 +113,10 @@  ulps-file = $(firstword $(wildcard
$(sysdirs:%=%/libm-test-ulps)))
 $(addprefix $(objpfx), $(libm-tests-generated)): $(objpfx)libm-test.stmp

 $(objpfx)libm-test.stmp: $(ulps-file) libm-test.inc gen-libm-test.pl \
- auto-libm-test-out
+ gen-libm-have-vector-test.sh auto-libm-test-out
  $(make-target-directory)
  $(PERL) gen-libm-test.pl -u $< -o "$(objpfx)"
+ $(BASH) gen-libm-have-vector-test.sh > $(objpfx)libm-have-vector-test.h
  @echo > $@

 $(objpfx)test-float.o: $(objpfx)libm-test.stmp
diff --git a/math/gen-libm-have-vector-test.sh
b/math/gen-libm-have-vector-test.sh
new file mode 100644
index 0000000..aa88f10
--- /dev/null
+++ b/math/gen-libm-have-vector-test.sh
@@ -0,0 +1,44 @@ 
+#!/bin/sh
+# Copyright (C) 1999-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/>.
+
+# Generate series of definitions used for vector math functions tests.
+print_defs()
+{
+  echo "#if defined TEST_VECTOR_$1 && TEST_VECTOR_$1"
+  echo "# define HAVE_VECTOR_$1 1"
+  echo "# define ${1}_VEC_SUFF WRAPPER_NAME($1)"
+  echo "#else"
+  echo "# define HAVE_VECTOR_$1 0"
+  echo "# define ${1}_VEC_SUFF $1"
+  echo "#endif"
+  echo
+}
+
+for func in $(grep ALL_RM_TEST libm-test.inc | grep -v define | sed
-r "s/.*\(//; s/,.*//"); do
+  print_defs ${func}
+  print_defs ${func}f
+  print_defs ${func}l
+done
+
+# When all functions will use ALL_RM_TEST instead of using START directly,
+# this code can be removed.
+for func in $(grep 'START.*;$' libm-test.inc | sed -r "s/.*\(//; s/,.*//"); do
+  print_defs ${func}
+  print_defs ${func}f
+  print_defs ${func}l
+done
diff --git a/math/libm-test.inc b/math/libm-test.inc
index 4958385..7a91a2b 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -1698,11 +1698,16 @@  struct test_fFF_11_data
 #define STR_CONCAT(a, b, c) __STRING (a##b##c)
 #define STR_CON3(a, b, c) STR_CONCAT (a, b, c)

+/* This generated header defines series of macros started with HAVE_VECTOR_. */
+#include "libm-have-vector-test.h"
+
+#define HAVE_VECTOR(func) __CONCAT (HAVE_VECTOR_, func)
+
 /* Start and end the tests for a given function.  */
-#define START(FUNC, SUFF, EXACT) \
+#define START(FUN, SUFF, EXACT) \
   CHECK_ARCH_EXT \
-  if (TEST_MATHVEC) return; \
-  const char *this_func = STR_CON3 (FUNC, SUFF, VEC_SUFF); \
+  if (TEST_MATHVEC && !HAVE_VECTOR (FUNC (FUN))) return; \
+  const char *this_func = STR_CON3 (FUN, SUFF, VEC_SUFF); \
   init_max_error (this_func, EXACT)
 #define END \
   print_max_error (this_func)