PATCH [3/5] Vector math functions infrastructure

Message ID CAMXFM3u0kmAMwAuTgjypp2hmVgqjia=dQSOTAjS-PgieqrN-Cg@mail.gmail.com
State Committed
Headers

Commit Message

Andrew Senkevich April 27, 2015, 1:38 p.m. UTC
  Here is the last part of changes 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.
End of previous discussion is
https://sourceware.org/ml/libc-alpha/2014-12/msg00062.html

Ok for trunk?

2015-04-27  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.

From be046dfec809a3777a3b52ef22926b7b2016e542 Mon Sep 17 00:00:00 2001
From: Andrew Senkevich <andrew.senkevich@intel.com>
Date: Mon, 27 Apr 2015 15:36:37 +0300
Subject: [PATCH 3/5]

Last part of changes 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.

2015-04-27  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/Makefile                     |  5 +++--
 math/gen-libm-have-vector-test.sh | 47 +++++++++++++++++++++++++++++++++++++++
 math/libm-test.inc                | 11 ++++++---
 3 files changed, 58 insertions(+), 5 deletions(-)
 create mode 100644 math/gen-libm-have-vector-test.sh
  

Patch

diff --git a/math/Makefile b/math/Makefile
index 3904e41..20315dc 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -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
index 0000000..531812e
--- /dev/null
+++ b/math/gen-libm-have-vector-test.sh
@@ -0,0 +1,47 @@ 
+#!/bin/sh
+# Copyright (C) 1999-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
diff --git a/math/libm-test.inc b/math/libm-test.inc
index c30ad11..7a37a56 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -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)