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 3/N] [x86_64] Vectorized math functions


Hi,

here is the last change regarding to libm-test.inc: addition of method
for separation which exactly testing function needed to run with help
of generated during make check header with series of conditional
definitions.

ChangeLog

2014-11-20  Andrew Senkevich  <andrew.n.senkevich@gmail.com>

        * math/libm-test.inc (HAVE_VECTOR): New macros.
        * math/Makefile b/math/Makefile: Added generation of
libm-have-vector-test.h.
        * math/gen-libm-have-vector-test.sh: Script generates series
of macros for condition in testing functions.

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 100755
index 0000000..95c7bef
--- /dev/null
+++ b/math/gen-libm-have-vector-test.sh
@@ -0,0 +1,48 @@
+#!/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 VEC_PREFIX_$1 WRAPPER_NAME($1)"
+  echo "#else"
+  echo "# define HAVE_VECTOR_$1 0"
+  echo "# define VEC_PREFIX_$1 $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
+
+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
diff --git a/math/libm-test.inc b/math/libm-test.inc
index 94931e2..d106c0b 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -1707,14 +1707,19 @@ struct test_fFF_11_data
 # define FUNC_TEST FUNC
 #endif

+/* 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)
+
 #define STR_CONCAT(a, b, c) __STRING (a##b##c)
 #define STR_CON3(a, b, c) STR_CONCAT (a, b, c)

 /* 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 (VEC_PREFIX, FUNC, SUFF); \
+  if (TEST_MATHVEC && !HAVE_VECTOR (FUNC (FUN))) return; \
+  const char *this_func = STR_CON3 (VEC_PREFIX, FUN, SUFF); \
   init_max_error (this_func, EXACT)
 #define END \
   print_max_error (this_func)


Attached the same.


--
WBR,
Andrew

Attachment: libmvec_3_of_N.patch
Description: Binary data


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