Last part of changes regarding to libm-test.inc: addition
authorAndrew Senkevich <andrew.n.senkevich@gmail.com>
Thu, 14 May 2015 14:14:45 +0000 (17:14 +0300)
committerAndrew Senkevich <andrew.n.senkevich@gmail.com>
Thu, 14 May 2015 15:07:06 +0000 (18:07 +0300)
of method for separation which exactly testing function needed to run with
help of generated during make check header with series of conditional
definitions.

2015-05-14  Andrew Senkevich  <andrew.senkevich@intel.com>

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

ChangeLog
math/Makefile
math/gen-libm-have-vector-test.sh [new file with mode: 0644]
math/libm-test.inc

index 5262e57..acf630e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2015-05-14  Andrew Senkevich  <andrew.senkevich@intel.com>
 
+       * math/gen-libm-have-vector-test.sh: Script generates series of macros
+       for conditions in testing functions.
+       * math/Makefile: Added call of libm-have-vector-test.sh.
+       * math/libm-test.inc (HAVE_VECTOR): New macros.
+
        * math/libm-test.inc: START refactored.
        * math/test-double.c (TEST_MATHVEC): Add define.
        * math/test-float.c: Likewise.
index 1537b5a..fdfeb4a 100644 (file)
@@ -103,7 +103,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
@@ -114,9 +114,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)"
+       $(SHELL) 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 (file)
index 0000000..eeddf76
--- /dev/null
@@ -0,0 +1,47 @@
+#!/bin/sh
+# Copyright (C) 2014-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
+# <http://www.gnu.org/licenses/>.
+
+# Generate series of definitions used for vector math functions tests.
+# TEST_VECTOR_* and WRAPPER_NAME are defined in vector math functions tests.
+# *_VEC_SUFF is used in individual tests, as result of FUNC_TEST unfolding
+# to avoid warnings / errors about undeclared functions.
+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
index 82f1b75..a6cf771 100644 (file)
@@ -1699,11 +1699,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)