about summary refs log tree commit diff
path: root/math
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-06-24 23:27:18 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-06-24 23:27:18 +0000
commitf9536db79065ad00efd877b4d80a1dd06938bd0a (patch)
tree891cf31b2b8c4c8ebc5a7de2d618ec3e1369f57c /math
parent5ba4a6eb9f938872bffb6fc2f2a49437fa943135 (diff)
downloadglibc-f9536db79065ad00efd877b4d80a1dd06938bd0a.tar.gz
glibc-f9536db79065ad00efd877b4d80a1dd06938bd0a.tar.xz
glibc-f9536db79065ad00efd877b4d80a1dd06938bd0a.zip
Refactor libm tests.
This patch refactors the libm tests using libm-test.inc to reduce the
level of duplicate definitions.  New headers are created for the
definitions shared by tests for a particular type; by tests of inline
functions; by tests of non-inline functions; by scalar tests; and by
vector tests.  The unused MATHCONST macro is removed.  A new macro
VEC_LEN is added to the vector headers to allow the macros defining
wrappers for vector functions to be defined once, instead of six times
each (differing only in vector length) as before.  There is still
scope for further refactoring, but this seems a useful start.

Tested for x86_64.

	* math/test-double.h: New file.
	* math/test-float.h: Likewise.
	* math/test-ldouble.h: Likewise.
	* math/test-math-inline.h: Likewise.
	* math/test-math-no-inline.h: Likewise.
	* math/test-math-scalar.h: Likewise.
	* math/test-math-vector.h: Likewise.
	* math/test-vec-loop.h: Remove file.  Contents moved into
	test-math-vector.h.
	* math/libm-test.inc (MATHCONST): Do not document macro.
	* math/test-double.c: Include test-double.h, test-math-no-inline.h
	and test-math-scalar.h.
	(FUNC): Remove macro.
	(FUNC_TEST): Likewise.
	(FLOAT): Likewise.
	(MATHCONST): Likewise.
	(PRINTF_EXPR): Likewise.
	(PRINTF_XEXPR): Likewise.
	(PRINTF_NEXPR): Likewise.
	(TEST_DOUBLE): Likewise.
	(TEST_MATHVEC): Likewise.
	(__NO_MATH_INLINES): Likewise.
	* math/test-float.c: Include test-float.h, test-math-no-inline.h
	and test-math-scalar.h.
	(FUNC): Remove macro.
	(FUNC_TEST): Likewise.
	(FLOAT): Likewise.
	(MATHCONST): Likewise.
	(PRINTF_EXPR): Likewise.
	(PRINTF_XEXPR): Likewise.
	(PRINTF_NEXPR): Likewise.
	(TEST_FLOAT): Likewise.
	(TEST_MATHVEC): Likewise.
	(__NO_MATH_INLINES): Likewise.
	* math/test-idouble.c: Include test-double.h, test-math-inline.h
	and test-math-scalar.h.
	(FUNC): Remove macro.
	(FUNC_TEST): Likewise.
	(FLOAT): Likewise.
	(MATHCONST): Likewise.
	(PRINTF_EXPR): Likewise.
	(PRINTF_XEXPR): Likewise.
	(PRINTF_NEXPR): Likewise.
	(TEST_DOUBLE): Likewise.
	(TEST_MATHVEC): Likewise.
	(TEST_INLINE): Likewise.
	(__NO_MATH_INLINES): Likewise.
	* math/test-ifloat.c: Include test-float.h, test-math-inline.h and
	test-math-scalar.h.
	(FUNC): Remove macro.
	(FUNC_TEST): Likewise.
	(FLOAT): Likewise.
	(MATHCONST): Likewise.
	(PRINTF_EXPR): Likewise.
	(PRINTF_XEXPR): Likewise.
	(PRINTF_NEXPR): Likewise.
	(TEST_FLOAT): Likewise.
	(TEST_MATHVEC): Likewise.
	(TEST_INLINE): Likewise.
	(__NO_MATH_INLINES): Likewise.
	* math/test-ildoubl.c: Include test-ldouble.h, test-math-inline.h
	and test-math-scalar.h.
	(FUNC): Remove macro.
	(FUNC_TEST): Likewise.
	(FLOAT): Likewise.
	(MATHCONST): Likewise.
	(PRINTF_EXPR): Likewise.
	(PRINTF_XEXPR): Likewise.
	(PRINTF_NEXPR): Likewise.
	(TEST_LDOUBLE): Likewise.
	(TEST_MATHVEC): Likewise.
	(TEST_INLINE): Likewise.
	(__NO_MATH_INLINES): Likewise.
	* math/test-ldouble.c: Include test-ldouble.h,
	test-math-no-inline.h and test-math-scalar.h.
	(FUNC): Remove macro.
	(FUNC_TEST): Likewise.
	(FLOAT): Likewise.
	(MATHCONST): Likewise.
	(PRINTF_EXPR): Likewise.
	(PRINTF_XEXPR): Likewise.
	(PRINTF_NEXPR): Likewise.
	(TEST_LDOUBLE): Likewise.
	(TEST_MATHVEC): Likewise.
	(__NO_MATH_INLINES): Likewise.
	* math/test-double-vlen2.h: Include test-double.h,
	test-math-no-inline.h and test-math-vector.h.
	(FLOAT): Remove macro.
	(FUNC): Likewise.
	(MATHCONST): Likewise.
	(PRINTF_EXPR): Likewise.
	(PRINTF_XEXPR): Likewise.
	(PRINTF_NEXPR): Likewise.
	(TEST_DOUBLE): Likewise.
	(TEST_MATHVEC): Likewise.
	(__NO_MATH_INLINES): Likewise.
	(CNCT): Likewise.
	(CONCAT): Likewise.
	(WRAPPER_NAME): Likewise.
	(WRAPPER_DECL): Likewise.
	(WRAPPER_DECL_ff): Likewise.
	(WRAPPER_DECL_fFF): Likewise.
	(VECTOR_WRAPPER): Likewise.
	(VECTOR_WRAPPER_ff): Likewise.
	(VECTOR_WRAPPER_fFF): Likewise.
	(VEC_LEN): New macro.
	* math/test-double-vlen4.h: Include test-double.h,
	test-math-no-inline.h and test-math-vector.h.
	(FLOAT): Remove macro.
	(FUNC): Likewise.
	(MATHCONST): Likewise.
	(PRINTF_EXPR): Likewise.
	(PRINTF_XEXPR): Likewise.
	(PRINTF_NEXPR): Likewise.
	(TEST_DOUBLE): Likewise.
	(TEST_MATHVEC): Likewise.
	(__NO_MATH_INLINES): Likewise.
	(CNCT): Likewise.
	(CONCAT): Likewise.
	(WRAPPER_NAME): Likewise.
	(WRAPPER_DECL): Likewise.
	(WRAPPER_DECL_ff): Likewise.
	(WRAPPER_DECL_fFF): Likewise.
	(VECTOR_WRAPPER): Likewise.
	(VECTOR_WRAPPER_ff): Likewise.
	(VECTOR_WRAPPER_fFF): Likewise.
	(VEC_LEN): New macro.
	* math/test-double-vlen8.h: Include test-double.h,
	test-math-no-inline.h and test-math-vector.h.
	(FLOAT): Remove macro.
	(FUNC): Likewise.
	(MATHCONST): Likewise.
	(PRINTF_EXPR): Likewise.
	(PRINTF_XEXPR): Likewise.
	(PRINTF_NEXPR): Likewise.
	(TEST_DOUBLE): Likewise.
	(TEST_MATHVEC): Likewise.
	(__NO_MATH_INLINES): Likewise.
	(CNCT): Likewise.
	(CONCAT): Likewise.
	(WRAPPER_NAME): Likewise.
	(WRAPPER_DECL): Likewise.
	(WRAPPER_DECL_ff): Likewise.
	(WRAPPER_DECL_fFF): Likewise.
	(VECTOR_WRAPPER): Likewise.
	(VECTOR_WRAPPER_ff): Likewise.
	(VECTOR_WRAPPER_fFF): Likewise.
	(VEC_LEN): New macro.
	* math/test-float-vlen4.h: Include test-float.h,
	test-math-no-inline.h and test-math-vector.h.
	(FLOAT): Remove macro.
	(FUNC): Likewise.
	(MATHCONST): Likewise.
	(PRINTF_EXPR): Likewise.
	(PRINTF_XEXPR): Likewise.
	(PRINTF_NEXPR): Likewise.
	(TEST_FLOAT): Likewise.
	(TEST_MATHVEC): Likewise.
	(__NO_MATH_INLINES): Likewise.
	(CNCT): Likewise.
	(CONCAT): Likewise.
	(WRAPPER_NAME): Likewise.
	(WRAPPER_DECL): Likewise.
	(WRAPPER_DECL_ff): Likewise.
	(WRAPPER_DECL_fFF): Likewise.
	(VECTOR_WRAPPER): Likewise.
	(VECTOR_WRAPPER_ff): Likewise.
	(VECTOR_WRAPPER_fFF): Likewise.
	(VEC_LEN): New macro.
	* math/test-float-vlen8.h: Include test-float.h,
	test-math-no-inline.h and test-math-vector.h.
	(FLOAT): Remove macro.
	(FUNC): Likewise.
	(MATHCONST): Likewise.
	(PRINTF_EXPR): Likewise.
	(PRINTF_XEXPR): Likewise.
	(PRINTF_NEXPR): Likewise.
	(TEST_FLOAT): Likewise.
	(TEST_MATHVEC): Likewise.
	(__NO_MATH_INLINES): Likewise.
	(CNCT): Likewise.
	(CONCAT): Likewise.
	(WRAPPER_NAME): Likewise.
	(WRAPPER_DECL): Likewise.
	(WRAPPER_DECL_ff): Likewise.
	(WRAPPER_DECL_fFF): Likewise.
	(VECTOR_WRAPPER): Likewise.
	(VECTOR_WRAPPER_ff): Likewise.
	(VECTOR_WRAPPER_fFF): Likewise.
	(VEC_LEN): New macro.
	* math/test-float-vlen16.h: Include test-float.h,
	test-math-no-inline.h and test-math-vector.h.
	(FLOAT): Remove macro.
	(FUNC): Likewise.
	(MATHCONST): Likewise.
	(PRINTF_EXPR): Likewise.
	(PRINTF_XEXPR): Likewise.
	(PRINTF_NEXPR): Likewise.
	(TEST_FLOAT): Likewise.
	(TEST_MATHVEC): Likewise.
	(__NO_MATH_INLINES): Likewise.
	(CNCT): Likewise.
	(CONCAT): Likewise.
	(WRAPPER_NAME): Likewise.
	(WRAPPER_DECL): Likewise.
	(WRAPPER_DECL_ff): Likewise.
	(WRAPPER_DECL_fFF): Likewise.
	(VECTOR_WRAPPER): Likewise.
	(VECTOR_WRAPPER_ff): Likewise.
	(VECTOR_WRAPPER_fFF): Likewise.
	(VEC_LEN): New macro.
	* sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c: Do not include
	test-vec-loop.h.
	* sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c: Likewise.
	* sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c: Likewise.
	* sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c: Likewise.
	* sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c: Likewise.
	* sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c: Likewise.
	* sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c: Likewise.
	* sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c: Likewise.
Diffstat (limited to 'math')
-rw-r--r--math/libm-test.inc1
-rw-r--r--math/test-double-vlen2.h68
-rw-r--r--math/test-double-vlen4.h68
-rw-r--r--math/test-double-vlen8.h68
-rw-r--r--math/test-double.c17
-rw-r--r--math/test-double.h24
-rw-r--r--math/test-float-vlen16.h68
-rw-r--r--math/test-float-vlen4.h68
-rw-r--r--math/test-float-vlen8.h68
-rw-r--r--math/test-float.c17
-rw-r--r--math/test-float.h24
-rw-r--r--math/test-idouble.c18
-rw-r--r--math/test-ifloat.c18
-rw-r--r--math/test-ildoubl.c18
-rw-r--r--math/test-ldouble.c17
-rw-r--r--math/test-ldouble.h24
-rw-r--r--math/test-math-inline.h (renamed from math/test-vec-loop.h)31
-rw-r--r--math/test-math-no-inline.h21
-rw-r--r--math/test-math-scalar.h20
-rw-r--r--math/test-math-vector.h96
20 files changed, 269 insertions, 485 deletions
diff --git a/math/libm-test.inc b/math/libm-test.inc
index 49871618f0..da8f8caec4 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -24,7 +24,6 @@
    Macros:
    FUNC(function): converts general function name (like cos) to
    name with correct suffix (e.g. cosl or cosf)
-   MATHCONST(x):   like FUNC but for constants (e.g convert 0.0 to 0.0L)
    FLOAT:	   floating point type to test
    - TEST_MSG:	   informal message to be displayed
    CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat):
diff --git a/math/test-double-vlen2.h b/math/test-double-vlen2.h
index 3f117e510f..47d1fddc57 100644
--- a/math/test-double-vlen2.h
+++ b/math/test-double-vlen2.h
@@ -16,75 +16,17 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define FLOAT double
-#define FUNC(function) function
+#include "test-double.h"
+#include "test-math-no-inline.h"
+#include "test-math-vector.h"
+
 #define TEST_MSG "testing double vector math (without inline functions)\n"
-#define MATHCONST(x) x
 #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble
-#define PRINTF_EXPR "e"
-#define PRINTF_XEXPR "a"
-#define PRINTF_NEXPR "f"
-#define TEST_DOUBLE 1
-#define TEST_MATHVEC 1
-
-#ifndef __NO_MATH_INLINES
-# define __NO_MATH_INLINES
-#endif
 
 #define EXCEPTION_TESTS_double 0
 #define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)
 
-#define CNCT(x, y) x ## y
-#define CONCAT(a, b) CNCT (a, b)
-
 #define VEC_SUFF _vlen2
-#define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF)
+#define VEC_LEN 2
 
 #define FUNC_TEST(function) function ## _VEC_SUFF
-
-#define WRAPPER_DECL(function) extern FLOAT function (FLOAT);
-#define WRAPPER_DECL_ff(function) extern FLOAT function (FLOAT, FLOAT);
-#define WRAPPER_DECL_fFF(function) extern void function (FLOAT, FLOAT *, FLOAT *);
-
-// Wrapper from scalar to vector function with vector length 2.
-#define VECTOR_WRAPPER(scalar_func, vector_func) \
-extern VEC_TYPE vector_func (VEC_TYPE);		\
-FLOAT scalar_func (FLOAT x)			\
-{						\
-  int i;					\
-  VEC_TYPE mx;					\
-  INIT_VEC_LOOP (mx, x, 2);			\
-  VEC_TYPE mr = vector_func (mx);		\
-  TEST_VEC_LOOP (mr, 2);			\
-  return ((FLOAT) mr[0]);			\
-}
-
-// Wrapper from scalar 2 argument function to vector one.
-#define VECTOR_WRAPPER_ff(scalar_func, vector_func) 	\
-extern VEC_TYPE vector_func (VEC_TYPE, VEC_TYPE);	\
-FLOAT scalar_func (FLOAT x, FLOAT y)		\
-{						\
-  int i;					\
-  VEC_TYPE mx, my;				\
-  INIT_VEC_LOOP (mx, x, 2);			\
-  INIT_VEC_LOOP (my, y, 2);			\
-  VEC_TYPE mr = vector_func (mx, my);		\
-  TEST_VEC_LOOP (mr, 2);			\
-  return ((FLOAT) mr[0]);			\
-}
-
-// Wrapper from scalar 3 argument function to vector one.
-#define VECTOR_WRAPPER_fFF(scalar_func, vector_func) 	\
-extern void vector_func (VEC_TYPE, VEC_TYPE *, VEC_TYPE *);	\
-void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1)		\
-{						\
-  int i;					\
-  VEC_TYPE mx, mr, mr1;				\
-  INIT_VEC_LOOP (mx, x, 2);			\
-  vector_func (mx, &mr, &mr1);			\
-  TEST_VEC_LOOP (mr, 2);			\
-  TEST_VEC_LOOP (mr1, 2);			\
-  *r = (FLOAT) mr[0];				\
-  *r1 = (FLOAT) mr1[0];				\
-  return;					\
-}
diff --git a/math/test-double-vlen4.h b/math/test-double-vlen4.h
index ffaba6916e..59a374c0ae 100644
--- a/math/test-double-vlen4.h
+++ b/math/test-double-vlen4.h
@@ -16,75 +16,17 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define FLOAT double
-#define FUNC(function) function
+#include "test-double.h"
+#include "test-math-no-inline.h"
+#include "test-math-vector.h"
+
 #define TEST_MSG "testing double vector math (without inline functions)\n"
-#define MATHCONST(x) x
 #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble
-#define PRINTF_EXPR "e"
-#define PRINTF_XEXPR "a"
-#define PRINTF_NEXPR "f"
-#define TEST_DOUBLE 1
-#define TEST_MATHVEC 1
-
-#ifndef __NO_MATH_INLINES
-# define __NO_MATH_INLINES
-#endif
 
 #define EXCEPTION_TESTS_double 0
 #define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)
 
-#define CNCT(x, y) x ## y
-#define CONCAT(a, b) CNCT (a, b)
-
 #define VEC_SUFF _vlen4
-#define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF)
+#define VEC_LEN 4
 
 #define FUNC_TEST(function) function ## _VEC_SUFF
-
-#define WRAPPER_DECL(function) extern FLOAT function (FLOAT);
-#define WRAPPER_DECL_ff(function) extern FLOAT function (FLOAT, FLOAT);
-#define WRAPPER_DECL_fFF(function) extern void function (FLOAT, FLOAT *, FLOAT *);
-
-// Wrapper from scalar to vector function with vector length 4.
-#define VECTOR_WRAPPER(scalar_func, vector_func) \
-extern VEC_TYPE vector_func (VEC_TYPE);		\
-FLOAT scalar_func (FLOAT x)			\
-{						\
-  int i;					\
-  VEC_TYPE mx;					\
-  INIT_VEC_LOOP (mx, x, 4);			\
-  VEC_TYPE mr = vector_func (mx);		\
-  TEST_VEC_LOOP (mr, 4);			\
-  return ((FLOAT) mr[0]);			\
-}
-
-// Wrapper from scalar 2 argument function to vector one.
-#define VECTOR_WRAPPER_ff(scalar_func, vector_func) 	\
-extern VEC_TYPE vector_func (VEC_TYPE, VEC_TYPE);	\
-FLOAT scalar_func (FLOAT x, FLOAT y)		\
-{						\
-  int i;					\
-  VEC_TYPE mx, my;				\
-  INIT_VEC_LOOP (mx, x, 4);			\
-  INIT_VEC_LOOP (my, y, 4);			\
-  VEC_TYPE mr = vector_func (mx, my);		\
-  TEST_VEC_LOOP (mr, 4);			\
-  return ((FLOAT) mr[0]);			\
-}
-
-// Wrapper from scalar 3 argument function to vector one.
-#define VECTOR_WRAPPER_fFF(scalar_func, vector_func) 	\
-extern void vector_func (VEC_TYPE, VEC_TYPE *, VEC_TYPE *);	\
-void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1)		\
-{						\
-  int i;					\
-  VEC_TYPE mx, mr, mr1;				\
-  INIT_VEC_LOOP (mx, x, 4);			\
-  vector_func (mx, &mr, &mr1);			\
-  TEST_VEC_LOOP (mr, 4);			\
-  TEST_VEC_LOOP (mr1, 4);			\
-  *r = (FLOAT) mr[0];				\
-  *r1 = (FLOAT) mr1[0];				\
-  return;					\
-}
diff --git a/math/test-double-vlen8.h b/math/test-double-vlen8.h
index bdfccbb4ff..a780aa6658 100644
--- a/math/test-double-vlen8.h
+++ b/math/test-double-vlen8.h
@@ -16,75 +16,17 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define FLOAT double
-#define FUNC(function) function
+#include "test-double.h"
+#include "test-math-no-inline.h"
+#include "test-math-vector.h"
+
 #define TEST_MSG "testing double vector math (without inline functions)\n"
-#define MATHCONST(x) x
 #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble
-#define PRINTF_EXPR "e"
-#define PRINTF_XEXPR "a"
-#define PRINTF_NEXPR "f"
-#define TEST_DOUBLE 1
-#define TEST_MATHVEC 1
-
-#ifndef __NO_MATH_INLINES
-# define __NO_MATH_INLINES
-#endif
 
 #define EXCEPTION_TESTS_double 0
 #define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)
 
-#define CNCT(x, y) x ## y
-#define CONCAT(a, b) CNCT (a, b)
-
 #define VEC_SUFF _vlen8
-#define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF)
+#define VEC_LEN 8
 
 #define FUNC_TEST(function) function ## _VEC_SUFF
-
-#define WRAPPER_DECL(function) extern FLOAT function (FLOAT);
-#define WRAPPER_DECL_ff(function) extern FLOAT function (FLOAT, FLOAT);
-#define WRAPPER_DECL_fFF(function) extern void function (FLOAT, FLOAT *, FLOAT *);
-
-// Wrapper from scalar to vector function with vector length 8.
-#define VECTOR_WRAPPER(scalar_func, vector_func) \
-extern VEC_TYPE vector_func (VEC_TYPE);		\
-FLOAT scalar_func (FLOAT x)			\
-{						\
-  int i;					\
-  VEC_TYPE mx;					\
-  INIT_VEC_LOOP (mx, x, 8);			\
-  VEC_TYPE mr = vector_func (mx);		\
-  TEST_VEC_LOOP (mr, 8);			\
-  return ((FLOAT) mr[0]);                       \
-}
-
-// Wrapper from scalar 2 argument function to vector one.
-#define VECTOR_WRAPPER_ff(scalar_func, vector_func) 	\
-extern VEC_TYPE vector_func (VEC_TYPE, VEC_TYPE);	\
-FLOAT scalar_func (FLOAT x, FLOAT y)		\
-{						\
-  int i;					\
-  VEC_TYPE mx, my;				\
-  INIT_VEC_LOOP (mx, x, 8);			\
-  INIT_VEC_LOOP (my, y, 8);			\
-  VEC_TYPE mr = vector_func (mx, my);		\
-  TEST_VEC_LOOP (mr, 8);			\
-  return ((FLOAT) mr[0]);                       \
-}
-
-// Wrapper from scalar 3 argument function to vector one.
-#define VECTOR_WRAPPER_fFF(scalar_func, vector_func) 	\
-extern void vector_func (VEC_TYPE, VEC_TYPE *, VEC_TYPE *);	\
-void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1)		\
-{						\
-  int i;					\
-  VEC_TYPE mx, mr, mr1;				\
-  INIT_VEC_LOOP (mx, x, 8);			\
-  vector_func (mx, &mr, &mr1);			\
-  TEST_VEC_LOOP (mr, 8);			\
-  TEST_VEC_LOOP (mr1, 8);			\
-  *r = (FLOAT) mr[0];				\
-  *r1 = (FLOAT) mr1[0];				\
-  return;					\
-}
diff --git a/math/test-double.c b/math/test-double.c
index 6c1c11c923..b62e433f17 100644
--- a/math/test-double.c
+++ b/math/test-double.c
@@ -16,20 +16,11 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define FUNC(function) function
-#define FUNC_TEST(function) FUNC (function)
-#define FLOAT double
+#include "test-double.h"
+#include "test-math-no-inline.h"
+#include "test-math-scalar.h"
+
 #define TEST_MSG "testing double (without inline functions)\n"
-#define MATHCONST(x) x
 #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cdouble
-#define PRINTF_EXPR "e"
-#define PRINTF_XEXPR "a"
-#define PRINTF_NEXPR "f"
-#define TEST_DOUBLE 1
-#define TEST_MATHVEC 0
-
-#ifndef __NO_MATH_INLINES
-# define __NO_MATH_INLINES
-#endif
 
 #include "libm-test.c"
diff --git a/math/test-double.h b/math/test-double.h
new file mode 100644
index 0000000000..3f2c0082a2
--- /dev/null
+++ b/math/test-double.h
@@ -0,0 +1,24 @@
+/* Common definitions for libm tests for double.
+   Copyright (C) 1997-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/>.  */
+
+#define FUNC(function) function
+#define FLOAT double
+#define PRINTF_EXPR "e"
+#define PRINTF_XEXPR "a"
+#define PRINTF_NEXPR "f"
+#define TEST_DOUBLE 1
diff --git a/math/test-float-vlen16.h b/math/test-float-vlen16.h
index b1890f3740..c9c7770315 100644
--- a/math/test-float-vlen16.h
+++ b/math/test-float-vlen16.h
@@ -16,75 +16,17 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define FLOAT float
-#define FUNC(function) function ## f
+#include "test-float.h"
+#include "test-math-no-inline.h"
+#include "test-math-vector.h"
+
 #define TEST_MSG "testing float vector math (without inline functions)\n"
-#define MATHCONST(x) x
 #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat
-#define PRINTF_EXPR "e"
-#define PRINTF_XEXPR "a"
-#define PRINTF_NEXPR "f"
-#define TEST_FLOAT 1
-#define TEST_MATHVEC 1
-
-#ifndef __NO_MATH_INLINES
-# define __NO_MATH_INLINES
-#endif
 
 #define EXCEPTION_TESTS_float 0
 #define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)
 
-#define CNCT(x, y) x ## y
-#define CONCAT(a, b) CNCT (a, b)
-
 #define VEC_SUFF _vlen16
-#define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF)
+#define VEC_LEN 16
 
 #define FUNC_TEST(function) function ## f ## _VEC_SUFF
-
-#define WRAPPER_DECL(func) extern FLOAT func (FLOAT x);
-#define WRAPPER_DECL_ff(func) extern FLOAT func (FLOAT x, FLOAT y);
-#define WRAPPER_DECL_fFF(function) extern void function (FLOAT, FLOAT *, FLOAT *);
-
-// Wrapper from scalar to vector function with vector length 16.
-#define VECTOR_WRAPPER(scalar_func, vector_func) \
-extern VEC_TYPE vector_func (VEC_TYPE);		\
-FLOAT scalar_func (FLOAT x)			\
-{						\
-  int i;					\
-  VEC_TYPE mx;					\
-  INIT_VEC_LOOP (mx, x, 16);			\
-  VEC_TYPE mr = vector_func (mx);		\
-  TEST_VEC_LOOP (mr, 16);			\
-  return ((FLOAT) mr[0]);			\
-}
-
-// Wrapper from scalar 2 argument function to vector one.
-#define VECTOR_WRAPPER_ff(scalar_func, vector_func) 	\
-extern VEC_TYPE vector_func (VEC_TYPE, VEC_TYPE);	\
-FLOAT scalar_func (FLOAT x, FLOAT y)		\
-{						\
-  int i;					\
-  VEC_TYPE mx, my;				\
-  INIT_VEC_LOOP (mx, x, 16);			\
-  INIT_VEC_LOOP (my, y, 16);			\
-  VEC_TYPE mr = vector_func (mx, my);		\
-  TEST_VEC_LOOP (mr, 16);			\
-  return ((FLOAT) mr[0]);			\
-}
-
-// Wrapper from scalar 3 argument function to vector one.
-#define VECTOR_WRAPPER_fFF(scalar_func, vector_func) 	\
-extern void vector_func (VEC_TYPE, VEC_TYPE *, VEC_TYPE *);	\
-void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1)		\
-{						\
-  int i;					\
-  VEC_TYPE mx, mr, mr1;				\
-  INIT_VEC_LOOP (mx, x, 16);			\
-  vector_func (mx, &mr, &mr1);			\
-  TEST_VEC_LOOP (mr, 16);			\
-  TEST_VEC_LOOP (mr1, 16);			\
-  *r = (FLOAT) mr[0];				\
-  *r1 = (FLOAT) mr1[0];				\
-  return;					\
-}
diff --git a/math/test-float-vlen4.h b/math/test-float-vlen4.h
index 213ae78e71..463e277d36 100644
--- a/math/test-float-vlen4.h
+++ b/math/test-float-vlen4.h
@@ -16,75 +16,17 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define FLOAT float
-#define FUNC(function) function ## f
+#include "test-float.h"
+#include "test-math-no-inline.h"
+#include "test-math-vector.h"
+
 #define TEST_MSG "testing float vector math (without inline functions)\n"
-#define MATHCONST(x) x
 #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat
-#define PRINTF_EXPR "e"
-#define PRINTF_XEXPR "a"
-#define PRINTF_NEXPR "f"
-#define TEST_FLOAT 1
-#define TEST_MATHVEC 1
-
-#ifndef __NO_MATH_INLINES
-# define __NO_MATH_INLINES
-#endif
 
 #define EXCEPTION_TESTS_float 0
 #define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)
 
-#define CNCT(x, y) x ## y
-#define CONCAT(a, b) CNCT (a, b)
-
 #define VEC_SUFF _vlen4
-#define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF)
+#define VEC_LEN 4
 
 #define FUNC_TEST(function) function ## f ## _VEC_SUFF
-
-#define WRAPPER_DECL(function) extern FLOAT function (FLOAT);
-#define WRAPPER_DECL_ff(function) extern FLOAT function (FLOAT, FLOAT);
-#define WRAPPER_DECL_fFF(function) extern void function (FLOAT, FLOAT *, FLOAT *);
-
-// Wrapper from scalar to vector function with vector length 4.
-#define VECTOR_WRAPPER(scalar_func, vector_func) \
-extern VEC_TYPE vector_func (VEC_TYPE);		\
-FLOAT scalar_func (FLOAT x)			\
-{						\
-  int i;					\
-  VEC_TYPE mx;					\
-  INIT_VEC_LOOP (mx, x, 4);			\
-  VEC_TYPE mr = vector_func (mx);		\
-  TEST_VEC_LOOP (mr, 4);			\
-  return ((FLOAT) mr[0]);			\
-}
-
-// Wrapper from scalar 2 argument function to vector one.
-#define VECTOR_WRAPPER_ff(scalar_func, vector_func) 	\
-extern VEC_TYPE vector_func (VEC_TYPE, VEC_TYPE);	\
-FLOAT scalar_func (FLOAT x, FLOAT y)		\
-{						\
-  int i;					\
-  VEC_TYPE mx, my;				\
-  INIT_VEC_LOOP (mx, x, 4);			\
-  INIT_VEC_LOOP (my, y, 4);			\
-  VEC_TYPE mr = vector_func (mx, my);		\
-  TEST_VEC_LOOP (mr, 4);			\
-  return ((FLOAT) mr[0]);			\
-}
-
-// Wrapper from scalar 3 argument function to vector one.
-#define VECTOR_WRAPPER_fFF(scalar_func, vector_func) 	\
-extern void vector_func (VEC_TYPE, VEC_TYPE *, VEC_TYPE *);	\
-void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1)		\
-{						\
-  int i;					\
-  VEC_TYPE mx, mr, mr1;				\
-  INIT_VEC_LOOP (mx, x, 4);			\
-  vector_func (mx, &mr, &mr1);			\
-  TEST_VEC_LOOP (mr, 4);			\
-  TEST_VEC_LOOP (mr1, 4);			\
-  *r = (FLOAT) mr[0];				\
-  *r1 = (FLOAT) mr1[0];				\
-  return;					\
-}
diff --git a/math/test-float-vlen8.h b/math/test-float-vlen8.h
index dd2fb287ad..6dd6a9f5e0 100644
--- a/math/test-float-vlen8.h
+++ b/math/test-float-vlen8.h
@@ -16,75 +16,17 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define FLOAT float
-#define FUNC(function) function ## f
+#include "test-float.h"
+#include "test-math-no-inline.h"
+#include "test-math-vector.h"
+
 #define TEST_MSG "testing float vector math (without inline functions)\n"
-#define MATHCONST(x) x
 #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat
-#define PRINTF_EXPR "e"
-#define PRINTF_XEXPR "a"
-#define PRINTF_NEXPR "f"
-#define TEST_FLOAT 1
-#define TEST_MATHVEC 1
-
-#ifndef __NO_MATH_INLINES
-# define __NO_MATH_INLINES
-#endif
 
 #define EXCEPTION_TESTS_float 0
 #define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)
 
-#define CNCT(x, y) x ## y
-#define CONCAT(a, b) CNCT (a, b)
-
 #define VEC_SUFF _vlen8
-#define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF)
+#define VEC_LEN 8
 
 #define FUNC_TEST(function) function ## f ## _VEC_SUFF
-
-#define WRAPPER_DECL(function) extern FLOAT function (FLOAT);
-#define WRAPPER_DECL_ff(function) extern FLOAT function (FLOAT, FLOAT);
-#define WRAPPER_DECL_fFF(function) extern void function (FLOAT, FLOAT *, FLOAT *);
-
-// Wrapper from scalar to vector function with vector length 8.
-#define VECTOR_WRAPPER(scalar_func, vector_func) \
-extern VEC_TYPE vector_func (VEC_TYPE);		\
-FLOAT scalar_func (FLOAT x)			\
-{						\
-  int i;					\
-  VEC_TYPE mx;					\
-  INIT_VEC_LOOP (mx, x, 8);			\
-  VEC_TYPE mr = vector_func (mx);		\
-  TEST_VEC_LOOP (mr, 8);			\
-  return ((FLOAT) mr[0]);			\
-}
-
-// Wrapper from scalar 2 argument function to vector one.
-#define VECTOR_WRAPPER_ff(scalar_func, vector_func) 	\
-extern VEC_TYPE vector_func (VEC_TYPE, VEC_TYPE);	\
-FLOAT scalar_func (FLOAT x, FLOAT y)		\
-{						\
-  int i;					\
-  VEC_TYPE mx, my;				\
-  INIT_VEC_LOOP (mx, x, 8);			\
-  INIT_VEC_LOOP (my, y, 8);			\
-  VEC_TYPE mr = vector_func (mx, my);		\
-  TEST_VEC_LOOP (mr, 8);			\
-  return ((FLOAT) mr[0]);			\
-}
-
-// Wrapper from scalar 3 argument function to vector one.
-#define VECTOR_WRAPPER_fFF(scalar_func, vector_func) 	\
-extern void vector_func (VEC_TYPE, VEC_TYPE *, VEC_TYPE *);	\
-void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1)		\
-{						\
-  int i;					\
-  VEC_TYPE mx, mr, mr1;				\
-  INIT_VEC_LOOP (mx, x, 8);			\
-  vector_func (mx, &mr, &mr1);			\
-  TEST_VEC_LOOP (mr, 8);			\
-  TEST_VEC_LOOP (mr1, 8);			\
-  *r = (FLOAT) mr[0];				\
-  *r1 = (FLOAT) mr1[0];				\
-  return;					\
-}
diff --git a/math/test-float.c b/math/test-float.c
index 07dc8eacd6..b6a41c0e93 100644
--- a/math/test-float.c
+++ b/math/test-float.c
@@ -16,20 +16,11 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define FUNC(function) function ## f
-#define FUNC_TEST(function) FUNC (function)
-#define FLOAT float
+#include "test-float.h"
+#include "test-math-no-inline.h"
+#include "test-math-scalar.h"
+
 #define TEST_MSG "testing float (without inline functions)\n"
-#define MATHCONST(x) x
 #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cfloat
-#define PRINTF_EXPR "e"
-#define PRINTF_XEXPR "a"
-#define PRINTF_NEXPR "f"
-#define TEST_FLOAT 1
-#define TEST_MATHVEC 0
-
-#ifndef __NO_MATH_INLINES
-# define __NO_MATH_INLINES
-#endif
 
 #include "libm-test.c"
diff --git a/math/test-float.h b/math/test-float.h
new file mode 100644
index 0000000000..7b00cb1216
--- /dev/null
+++ b/math/test-float.h
@@ -0,0 +1,24 @@
+/* Common definitions for libm tests for float.
+   Copyright (C) 1997-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/>.  */
+
+#define FUNC(function) function ## f
+#define FLOAT float
+#define PRINTF_EXPR "e"
+#define PRINTF_XEXPR "a"
+#define PRINTF_NEXPR "f"
+#define TEST_FLOAT 1
diff --git a/math/test-idouble.c b/math/test-idouble.c
index bb73f9c7c2..48e6965ba3 100644
--- a/math/test-idouble.c
+++ b/math/test-idouble.c
@@ -16,21 +16,11 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define FUNC(function) function
-#define FUNC_TEST(function) FUNC (function)
-#define FLOAT double
+#include "test-double.h"
+#include "test-math-inline.h"
+#include "test-math-scalar.h"
+
 #define TEST_MSG "testing double (inline functions)\n"
-#define MATHCONST(x) x
 #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cinlinedouble
-#define PRINTF_EXPR "e"
-#define PRINTF_XEXPR "a"
-#define PRINTF_NEXPR "f"
-#define TEST_DOUBLE 1
-#define TEST_MATHVEC 0
-#define TEST_INLINE
-
-#ifdef __NO_MATH_INLINES
-# undef __NO_MATH_INLINES
-#endif
 
 #include "libm-test.c"
diff --git a/math/test-ifloat.c b/math/test-ifloat.c
index 74e8e4b1b8..4b1bc405b8 100644
--- a/math/test-ifloat.c
+++ b/math/test-ifloat.c
@@ -16,21 +16,11 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define FUNC(function) function ## f
-#define FUNC_TEST(function) FUNC (function)
-#define FLOAT float
+#include "test-float.h"
+#include "test-math-inline.h"
+#include "test-math-scalar.h"
+
 #define TEST_MSG "testing float (inline functions)\n"
-#define MATHCONST(x) x
 #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cinlinefloat
-#define PRINTF_EXPR "e"
-#define PRINTF_XEXPR "a"
-#define PRINTF_NEXPR "f"
-#define TEST_FLOAT 1
-#define TEST_MATHVEC 0
-#define TEST_INLINE 1
-
-#ifdef __NO_MATH_INLINES
-# undef __NO_MATH_INLINES
-#endif
 
 #include "libm-test.c"
diff --git a/math/test-ildoubl.c b/math/test-ildoubl.c
index f90a9baff0..847d8abfaf 100644
--- a/math/test-ildoubl.c
+++ b/math/test-ildoubl.c
@@ -16,21 +16,11 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define FUNC(function) function##l
-#define FUNC_TEST(function) FUNC (function)
-#define FLOAT long double
+#include "test-ldouble.h"
+#include "test-math-inline.h"
+#include "test-math-scalar.h"
+
 #define TEST_MSG "testing long double (inline functions)\n"
-#define MATHCONST(x) x##L
 #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Cinlinelongdouble
-#define PRINTF_EXPR "Le"
-#define PRINTF_XEXPR "La"
-#define PRINTF_NEXPR "Lf"
-#define TEST_INLINE
-#define TEST_LDOUBLE 1
-#define TEST_MATHVEC 0
-
-#ifdef __NO_MATH_INLINES
-# undef __NO_MATH_INLINES
-#endif
 
 #include "libm-test.c"
diff --git a/math/test-ldouble.c b/math/test-ldouble.c
index 97effb69e1..6820c5d1fe 100644
--- a/math/test-ldouble.c
+++ b/math/test-ldouble.c
@@ -16,20 +16,11 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define FUNC(function) function##l
-#define FUNC_TEST(function) FUNC (function)
-#define FLOAT long double
+#include "test-ldouble.h"
+#include "test-math-no-inline.h"
+#include "test-math-scalar.h"
+
 #define TEST_MSG "testing long double (without inline functions)\n"
-#define MATHCONST(x) x##L
 #define CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat) Clongdouble
-#define PRINTF_EXPR "Le"
-#define PRINTF_XEXPR "La"
-#define PRINTF_NEXPR "Lf"
-#define TEST_LDOUBLE 1
-#define TEST_MATHVEC 0
-
-#ifndef __NO_MATH_INLINES
-# define __NO_MATH_INLINES
-#endif
 
 #include "libm-test.c"
diff --git a/math/test-ldouble.h b/math/test-ldouble.h
new file mode 100644
index 0000000000..e42b2bd2f2
--- /dev/null
+++ b/math/test-ldouble.h
@@ -0,0 +1,24 @@
+/* Common definitions for libm tests for long double.
+   Copyright (C) 1997-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/>.  */
+
+#define FUNC(function) function##l
+#define FLOAT long double
+#define PRINTF_EXPR "Le"
+#define PRINTF_XEXPR "La"
+#define PRINTF_NEXPR "Lf"
+#define TEST_LDOUBLE 1
diff --git a/math/test-vec-loop.h b/math/test-math-inline.h
index 66d7692c22..d778cc74d9 100644
--- a/math/test-vec-loop.h
+++ b/math/test-math-inline.h
@@ -1,5 +1,5 @@
-/* Loop macro used in vector math functions tests.
-   Copyright (C) 2014-2015 Free Software Foundation, Inc.
+/* Common definitions for libm tests for inline functions.
+   Copyright (C) 1997-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
@@ -16,27 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-/* This macro is used in VECTOR_WRAPPER macros for vector tests.  */
-#define TEST_VEC_LOOP(vec, len) 				\
-  do								\
-    {								\
-      for (i = 1; i < len; i++)					\
-        {							\
-          if ((FLOAT) vec[0] != (FLOAT) vec[i])			\
-            {							\
-              vec[0] = (FLOAT) vec[0] + 0.1;			\
-	      break;						\
-            }							\
-        }							\
-    }								\
-  while (0)
+#define TEST_INLINE
 
-#define INIT_VEC_LOOP(vec, val, len)				\
-  do								\
-    {								\
-      for (i = 0; i < len; i++)					\
-        {							\
-          vec[i] = val;						\
-        }							\
-    }								\
-  while (0)
+#ifdef __NO_MATH_INLINES
+# undef __NO_MATH_INLINES
+#endif
diff --git a/math/test-math-no-inline.h b/math/test-math-no-inline.h
new file mode 100644
index 0000000000..ad765da0ae
--- /dev/null
+++ b/math/test-math-no-inline.h
@@ -0,0 +1,21 @@
+/* Common definitions for libm tests for non-inline functions.
+   Copyright (C) 1997-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/>.  */
+
+#ifndef __NO_MATH_INLINES
+# define __NO_MATH_INLINES
+#endif
diff --git a/math/test-math-scalar.h b/math/test-math-scalar.h
new file mode 100644
index 0000000000..1e4805aad5
--- /dev/null
+++ b/math/test-math-scalar.h
@@ -0,0 +1,20 @@
+/* Common definitions for libm tests for scalar functions.
+   Copyright (C) 1997-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/>.  */
+
+#define FUNC_TEST(function) FUNC (function)
+#define TEST_MATHVEC 0
diff --git a/math/test-math-vector.h b/math/test-math-vector.h
new file mode 100644
index 0000000000..1b74841fe4
--- /dev/null
+++ b/math/test-math-vector.h
@@ -0,0 +1,96 @@
+/* Common definitions for libm tests for vector functions.
+   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/>.  */
+
+#define TEST_MATHVEC 1
+
+#define CNCT(x, y) x ## y
+#define CONCAT(a, b) CNCT (a, b)
+
+#define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF)
+
+/* This macro is used in VECTOR_WRAPPER macros for vector tests.  */
+#define TEST_VEC_LOOP(vec, len) 				\
+  do								\
+    {								\
+      for (i = 1; i < len; i++)					\
+        {							\
+          if ((FLOAT) vec[0] != (FLOAT) vec[i])			\
+            {							\
+              vec[0] = (FLOAT) vec[0] + 0.1;			\
+	      break;						\
+            }							\
+        }							\
+    }								\
+  while (0)
+
+#define INIT_VEC_LOOP(vec, val, len)				\
+  do								\
+    {								\
+      for (i = 0; i < len; i++)					\
+        {							\
+          vec[i] = val;						\
+        }							\
+    }								\
+  while (0)
+
+#define WRAPPER_DECL(function) extern FLOAT function (FLOAT);
+#define WRAPPER_DECL_ff(function) extern FLOAT function (FLOAT, FLOAT);
+#define WRAPPER_DECL_fFF(function) extern void function (FLOAT, FLOAT *, FLOAT *);
+
+/* Wrapper from scalar to vector function.  */
+#define VECTOR_WRAPPER(scalar_func, vector_func) \
+extern VEC_TYPE vector_func (VEC_TYPE);		\
+FLOAT scalar_func (FLOAT x)			\
+{						\
+  int i;					\
+  VEC_TYPE mx;					\
+  INIT_VEC_LOOP (mx, x, VEC_LEN);		\
+  VEC_TYPE mr = vector_func (mx);		\
+  TEST_VEC_LOOP (mr, VEC_LEN);			\
+  return ((FLOAT) mr[0]);			\
+}
+
+/* Wrapper from scalar 2 argument function to vector one.  */
+#define VECTOR_WRAPPER_ff(scalar_func, vector_func) 	\
+extern VEC_TYPE vector_func (VEC_TYPE, VEC_TYPE);	\
+FLOAT scalar_func (FLOAT x, FLOAT y)		\
+{						\
+  int i;					\
+  VEC_TYPE mx, my;				\
+  INIT_VEC_LOOP (mx, x, VEC_LEN);		\
+  INIT_VEC_LOOP (my, y, VEC_LEN);		\
+  VEC_TYPE mr = vector_func (mx, my);		\
+  TEST_VEC_LOOP (mr, VEC_LEN);			\
+  return ((FLOAT) mr[0]);			\
+}
+
+/* Wrapper from scalar 3 argument function to vector one.  */
+#define VECTOR_WRAPPER_fFF(scalar_func, vector_func) 	\
+extern void vector_func (VEC_TYPE, VEC_TYPE *, VEC_TYPE *);	\
+void scalar_func (FLOAT x, FLOAT * r, FLOAT * r1)		\
+{						\
+  int i;					\
+  VEC_TYPE mx, mr, mr1;				\
+  INIT_VEC_LOOP (mx, x, VEC_LEN);		\
+  vector_func (mx, &mr, &mr1);			\
+  TEST_VEC_LOOP (mr, VEC_LEN);			\
+  TEST_VEC_LOOP (mr1, VEC_LEN);			\
+  *r = (FLOAT) mr[0];				\
+  *r1 = (FLOAT) mr1[0];				\
+  return;					\
+}