about summary refs log tree commit diff
path: root/math
diff options
context:
space:
mode:
Diffstat (limited to 'math')
-rw-r--r--math/Makefile192
-rw-r--r--math/README.libm-test23
-rw-r--r--math/gen-libm-have-vector-test.sh52
-rw-r--r--math/libm-test-acos.inc8
-rw-r--r--math/libm-test-acosh.inc8
-rw-r--r--math/libm-test-asin.inc8
-rw-r--r--math/libm-test-asinh.inc8
-rw-r--r--math/libm-test-atan.inc8
-rw-r--r--math/libm-test-atan2.inc8
-rw-r--r--math/libm-test-atanh.inc8
-rw-r--r--math/libm-test-cabs.inc8
-rw-r--r--math/libm-test-cacos.inc8
-rw-r--r--math/libm-test-cacosh.inc8
-rw-r--r--math/libm-test-canonicalize.inc8
-rw-r--r--math/libm-test-carg.inc8
-rw-r--r--math/libm-test-casin.inc8
-rw-r--r--math/libm-test-casinh.inc8
-rw-r--r--math/libm-test-catan.inc8
-rw-r--r--math/libm-test-catanh.inc8
-rw-r--r--math/libm-test-cbrt.inc8
-rw-r--r--math/libm-test-ccos.inc8
-rw-r--r--math/libm-test-ccosh.inc8
-rw-r--r--math/libm-test-ceil.inc8
-rw-r--r--math/libm-test-cexp.inc8
-rw-r--r--math/libm-test-cimag.inc8
-rw-r--r--math/libm-test-clog.inc8
-rw-r--r--math/libm-test-clog10.inc8
-rw-r--r--math/libm-test-conj.inc8
-rw-r--r--math/libm-test-copysign.inc8
-rw-r--r--math/libm-test-cos.inc8
-rw-r--r--math/libm-test-cosh.inc8
-rw-r--r--math/libm-test-cpow.inc8
-rw-r--r--math/libm-test-cproj.inc8
-rw-r--r--math/libm-test-creal.inc8
-rw-r--r--math/libm-test-csin.inc8
-rw-r--r--math/libm-test-csinh.inc8
-rw-r--r--math/libm-test-csqrt.inc8
-rw-r--r--math/libm-test-ctan.inc8
-rw-r--r--math/libm-test-ctanh.inc8
-rw-r--r--math/libm-test-driver.c6
-rw-r--r--math/libm-test-erf.inc8
-rw-r--r--math/libm-test-erfc.inc8
-rw-r--r--math/libm-test-exp.inc8
-rw-r--r--math/libm-test-exp10.inc9
-rw-r--r--math/libm-test-exp2.inc8
-rw-r--r--math/libm-test-expm1.inc8
-rw-r--r--math/libm-test-fabs.inc8
-rw-r--r--math/libm-test-fdim.inc8
-rw-r--r--math/libm-test-floor.inc8
-rw-r--r--math/libm-test-fma.inc8
-rw-r--r--math/libm-test-fmax.inc8
-rw-r--r--math/libm-test-fmaxmag.inc8
-rw-r--r--math/libm-test-fmin.inc8
-rw-r--r--math/libm-test-fminmag.inc8
-rw-r--r--math/libm-test-fmod.inc8
-rw-r--r--math/libm-test-fpclassify.inc8
-rw-r--r--math/libm-test-frexp.inc8
-rw-r--r--math/libm-test-fromfp.inc8
-rw-r--r--math/libm-test-fromfpx.inc8
-rw-r--r--math/libm-test-getpayload.inc8
-rw-r--r--math/libm-test-hypot.inc8
-rw-r--r--math/libm-test-ilogb.inc8
-rw-r--r--math/libm-test-iscanonical.inc8
-rw-r--r--math/libm-test-iseqsig.inc8
-rw-r--r--math/libm-test-isfinite.inc9
-rw-r--r--math/libm-test-isgreater.inc8
-rw-r--r--math/libm-test-isgreaterequal.inc8
-rw-r--r--math/libm-test-isinf.inc8
-rw-r--r--math/libm-test-isless.inc8
-rw-r--r--math/libm-test-islessequal.inc8
-rw-r--r--math/libm-test-islessgreater.inc8
-rw-r--r--math/libm-test-isnan.inc8
-rw-r--r--math/libm-test-isnormal.inc8
-rw-r--r--math/libm-test-issignaling.inc8
-rw-r--r--math/libm-test-issubnormal.inc8
-rw-r--r--math/libm-test-isunordered.inc8
-rw-r--r--math/libm-test-iszero.inc8
-rw-r--r--math/libm-test-j0.inc8
-rw-r--r--math/libm-test-j1.inc8
-rw-r--r--math/libm-test-jn.inc8
-rw-r--r--math/libm-test-lgamma.inc9
-rw-r--r--math/libm-test-llogb.inc8
-rw-r--r--math/libm-test-llrint.inc8
-rw-r--r--math/libm-test-llround.inc8
-rw-r--r--math/libm-test-log.inc8
-rw-r--r--math/libm-test-log10.inc8
-rw-r--r--math/libm-test-log1p.inc8
-rw-r--r--math/libm-test-log2.inc8
-rw-r--r--math/libm-test-logb.inc8
-rw-r--r--math/libm-test-lrint.inc8
-rw-r--r--math/libm-test-lround.inc8
-rw-r--r--math/libm-test-modf.inc8
-rw-r--r--math/libm-test-nearbyint.inc8
-rw-r--r--math/libm-test-nextafter.inc8
-rw-r--r--math/libm-test-nextdown.inc8
-rw-r--r--math/libm-test-nexttoward.inc8
-rw-r--r--math/libm-test-nextup.inc8
-rw-r--r--math/libm-test-pow.inc8
-rw-r--r--math/libm-test-remainder.inc9
-rw-r--r--math/libm-test-remquo.inc8
-rw-r--r--math/libm-test-rint.inc8
-rw-r--r--math/libm-test-round.inc8
-rw-r--r--math/libm-test-roundeven.inc8
-rw-r--r--math/libm-test-scalb.inc8
-rw-r--r--math/libm-test-scalbln.inc8
-rw-r--r--math/libm-test-scalbn.inc9
-rw-r--r--math/libm-test-setpayload.inc8
-rw-r--r--math/libm-test-setpayloadsig.inc8
-rw-r--r--math/libm-test-signbit.inc8
-rw-r--r--math/libm-test-significand.inc8
-rw-r--r--math/libm-test-sin.inc8
-rw-r--r--math/libm-test-sincos.inc8
-rw-r--r--math/libm-test-sinh.inc8
-rw-r--r--math/libm-test-sqrt.inc8
-rw-r--r--math/libm-test-support-double.c20
-rw-r--r--math/libm-test-support-float.c20
-rw-r--r--math/libm-test-support-ldouble.c20
-rw-r--r--math/libm-test-tan.inc8
-rw-r--r--math/libm-test-tanh.inc8
-rw-r--r--math/libm-test-tgamma.inc8
-rw-r--r--math/libm-test-totalorder.inc8
-rw-r--r--math/libm-test-totalordermag.inc8
-rw-r--r--math/libm-test-trunc.inc8
-rw-r--r--math/libm-test-ufromfp.inc8
-rw-r--r--math/libm-test-ufromfpx.inc8
-rw-r--r--math/libm-test-y0.inc8
-rw-r--r--math/libm-test-y1.inc8
-rw-r--r--math/libm-test-yn.inc8
-rw-r--r--math/libm-test.inc319
-rw-r--r--math/test-double-finite.c23
-rw-r--r--math/test-double-vlen2.h2
-rw-r--r--math/test-double-vlen4.h2
-rw-r--r--math/test-double-vlen8.h2
-rw-r--r--math/test-double.c25
-rw-r--r--math/test-float-finite.c23
-rw-r--r--math/test-float-vlen16.h2
-rw-r--r--math/test-float-vlen4.h2
-rw-r--r--math/test-float-vlen8.h2
-rw-r--r--math/test-float.c25
-rw-r--r--math/test-idouble.c23
-rw-r--r--math/test-ifloat.c23
-rw-r--r--math/test-ildouble.c23
-rw-r--r--math/test-ldouble-finite.c23
-rw-r--r--math/test-ldouble.c25
-rw-r--r--math/test-math-vector.h3
145 files changed, 1130 insertions, 723 deletions
diff --git a/math/Makefile b/math/Makefile
index 0cd3a4b4b9..29e7436162 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -196,13 +196,6 @@ endif
 
 ifneq (no,$(PERL))
 libm-vec-tests = $(addprefix test-,$(libmvec-tests))
-
-libm-tests = $(foreach t,$(types),test-$(t) test-$(t)-finite test-i$(t)) \
-	     $(libm-vec-tests)
-
-libm-tests.o = $(addsuffix .o,$(libm-tests))
-
-tests += $(libm-tests)
 libm-test-support = $(foreach t,$(types),libm-test-support-$(t))
 test-extras += $(libm-test-support)
 extra-test-objs += $(addsuffix .o, $(libm-test-support))
@@ -237,15 +230,42 @@ libm-test-funcs-noauto = canonicalize ceil cimag conj copysign cproj creal \
 libm-test-funcs-all = $(libm-test-funcs-auto) $(libm-test-funcs-noauto)
 libm-test-c-auto = $(foreach f,$(libm-test-funcs-auto),libm-test-$(f).c)
 libm-test-c-noauto = $(foreach f,$(libm-test-funcs-noauto),libm-test-$(f).c)
-libm-tests-generated = libm-test-ulps.h libm-have-vector-test.h libm-test.c \
-		       $(libm-test-c-auto) $(libm-test-c-noauto)
-generated += $(libm-tests-generated)
+generated += libm-test-ulps.h $(libm-test-c-auto) $(libm-test-c-noauto)
+
+libm-tests-base-normal = $(foreach t,$(types),test-$(t))
+libm-tests-base-finite = $(foreach t,$(types),test-$(t)-finite)
+libm-tests-base-inline = $(foreach t,$(types),test-i$(t))
+libm-tests-base = $(libm-tests-base-normal) $(libm-tests-base-finite) \
+		  $(libm-tests-base-inline) $(libm-vec-tests)
+libm-tests-normal = $(foreach t,$(libm-tests-base-normal),\
+				$(foreach f,$(libm-test-funcs-all),\
+					    $(t)-$(f)))
+libm-tests-finite = $(foreach t,$(libm-tests-base-finite),\
+				$(foreach f,$(libm-test-funcs-all),\
+					    $(t)-$(f)))
+libm-tests-inline = $(foreach t,$(libm-tests-base-inline),\
+				$(foreach f,$(libm-test-funcs-all),\
+					    $(t)-$(f)))
+libm-tests-vector = $(foreach t,$(libmvec-tests),\
+				$(foreach f,$($(t)-funcs),test-$(t)-$(f)))
+libm-tests = $(libm-tests-normal) $(libm-tests-finite) $(libm-tests-inline) \
+	     $(libm-tests-vector)
+libm-tests-for-type = $(foreach f,$(libm-test-funcs-all),\
+				  test-$(1)-$(f) test-$(1)-finite-$(f) \
+				  test-i$(1)-$(f)) \
+		      $(filter test-$(1)-%,$(libm-tests-vector))
+
+libm-tests.o = $(addsuffix .o,$(libm-tests))
+
+tests += $(libm-tests)
+generated += $(addsuffix .c,$(libm-tests)) \
+	     $(foreach t,$(types),libm-test-support-$(t).c)
 
 libm-test-c-auto-obj = $(addprefix $(objpfx),$(libm-test-c-auto))
 libm-test-c-noauto-obj = $(addprefix $(objpfx),$(libm-test-c-noauto))
 
-$(objpfx)libm-test.c $(libm-test-c-noauto-obj): $(objpfx)libm-test%.c: \
-						libm-test%.inc gen-libm-test.pl
+$(libm-test-c-noauto-obj): $(objpfx)libm-test%.c: libm-test%.inc \
+						  gen-libm-test.pl
 	$(make-target-directory)
 	$(PERL) gen-libm-test.pl -c $< -a /dev/null -C $@
 
@@ -256,30 +276,18 @@ $(libm-test-c-auto-obj): $(objpfx)libm-test%.c: libm-test%.inc \
 	$(PERL) gen-libm-test.pl -c $< -a auto-libm-test-out$* -C $@
 
 libm-test-incs = $(foreach f,$(libm-test-funcs-all),libm-test-$(f).inc)
-
-$(objpfx)libm-have-vector-test.h: $(libm-test-incs) gen-libm-have-vector-test.sh
-	$(make-target-directory)
-	$(SHELL) gen-libm-have-vector-test.sh $(sort $(libm-test-incs)) > $@
 endif
 
 libm-test-fast-math-cflags = -fno-builtin -D__FAST_MATH__ -DTEST_FAST_MATH
 libm-test-vec-cflags = $(libm-test-fast-math-cflags) -fno-inline \
 		       -ffloat-store -D_OPENMP=201307 -Wno-unknown-pragmas
 
-CFLAGS-test-double-vlen2.c = $(libm-test-vec-cflags)
-
-CFLAGS-test-double-vlen4.c = $(libm-test-vec-cflags)
 CFLAGS-test-double-vlen4-wrappers.c = $(double-vlen4-arch-ext-cflags)
 
-CFLAGS-test-double-vlen8.c = $(libm-test-vec-cflags)
 CFLAGS-test-double-vlen8-wrappers.c = $(double-vlen8-arch-ext-cflags)
 
-CFLAGS-test-float-vlen4.c = $(libm-test-vec-cflags)
-
-CFLAGS-test-float-vlen8.c = $(libm-test-vec-cflags)
 CFLAGS-test-float-vlen8-wrappers.c = $(float-vlen8-arch-ext-cflags)
 
-CFLAGS-test-float-vlen16.c = $(libm-test-vec-cflags)
 CFLAGS-test-float-vlen16-wrappers.c = $(float-vlen16-arch-ext-cflags)
 
 # The no-inline tests use -fsignaling-nans, and thereby use the
@@ -292,15 +300,7 @@ libm-test-no-inline-cflags = -fno-inline -ffloat-store -fno-builtin \
 			     -fsignaling-nans
 libm-test-finite-cflags = $(libm-test-no-inline-cflags) \
 			  -U__FINITE_MATH_ONLY__ -D__FINITE_MATH_ONLY__=1
-CFLAGS-test-float.c = $(libm-test-no-inline-cflags)
-CFLAGS-test-float-finite.c = $(libm-test-finite-cflags)
-CFLAGS-libm-test-support-float.c = $(libm-test-no-inline-cflags)
-CFLAGS-test-double.c = $(libm-test-no-inline-cflags)
-CFLAGS-test-double-finite.c = $(libm-test-finite-cflags)
-CFLAGS-libm-test-support-double.c = $(libm-test-no-inline-cflags)
-CFLAGS-test-ldouble.c = $(libm-test-no-inline-cflags)
-CFLAGS-test-ldouble-finite.c = $(libm-test-finite-cflags)
-CFLAGS-libm-test-support-ldouble.c = $(libm-test-no-inline-cflags)
+libm-test-inline-cflags = $(libm-test-fast-math-cflags)
 CFLAGS-test-tgmath.c = -fno-builtin
 # The following testcase uses very long lines (>3 million), so it may take a
 # while to compile it. See: http://llvm.org/bugs/show_bug.cgi?id=14106 and
@@ -310,9 +310,6 @@ CFLAGS-test-tgmath-ret.c = -fno-builtin
 CFLAGS-test-powl.c = -fno-builtin
 
 CFLAGS-test-snan.c = -fsignaling-nans
-CFLAGS-test-ifloat.c = $(libm-test-fast-math-cflags)
-CFLAGS-test-idouble.c = $(libm-test-fast-math-cflags)
-CFLAGS-test-ildouble.c = $(libm-test-fast-math-cflags)
 
 CFLAGS-test-signgam-finite.c = -ffinite-math-only
 CFLAGS-test-signgam-finite-c99.c = -ffinite-math-only -std=c99
@@ -375,20 +372,111 @@ $(foreach t, $(call type-foreach, $(gen-all-calls)), \
 
 ifneq (no,$(PERL))
 # This must come after the inclusion of sysdeps Makefiles via Rules.
-$(addprefix $(objpfx), $(libm-tests.o)): $(addprefix $(objpfx),\
-						     $(libm-tests-generated))
 
-$(addprefix $(objpfx),\
-	    $(filter test-float% test-ifloat%,\
-		     $(libm-tests))): $(objpfx)libm-test-support-float.o
+$(foreach t,$(libm-tests-normal),$(objpfx)$(t).c): $(objpfx)test-%.c:
+	type_func=$*; \
+	type=$${type_func%%-*}; \
+	func=$${type_func#*-}; \
+	( \
+	  echo "#include <test-$$type.h>"; \
+	  echo "#include <test-math-no-finite.h>"; \
+	  echo "#include <test-math-no-inline.h>"; \
+	  echo "#include <test-math-errno.h>"; \
+	  echo "#include <test-math-scalar.h>"; \
+	  echo "#include <libm-test-$$func.c>"; \
+	) > $@
+
+$(foreach t,$(libm-tests-finite),$(objpfx)$(t).c): $(objpfx)test-%.c:
+	type_func=$*; \
+	type=$${type_func%%-*}; \
+	func=$${type_func#*-finite-}; \
+	( \
+	  echo "#include <test-$$type.h>"; \
+	  echo "#include <test-math-finite.h>"; \
+	  echo "#include <test-math-no-inline.h>"; \
+	  echo "#include <test-math-scalar.h>"; \
+	  echo "#include <libm-test-$$func.c>"; \
+	) > $@
+
+$(foreach t,$(libm-tests-inline),$(objpfx)$(t).c): $(objpfx)test-i%.c:
+	type_func=$*; \
+	type=$${type_func%%-*}; \
+	func=$${type_func#*-}; \
+	( \
+	  echo "#include <test-$$type.h>"; \
+	  echo "#include <test-math-inline.h>"; \
+	  echo "#include <test-math-scalar.h>"; \
+	  echo "#include <libm-test-$$func.c>"; \
+	) > $@
+
+$(foreach t,$(libm-tests-vector),$(objpfx)$(t).c): $(objpfx)test-%.c:
+	type_func=$*; \
+	type=$${type_func%-*}; \
+	func=$${type_func##*-}; \
+	func_args=$$(grep ALL_RM_TEST libm-test-$$func.inc \
+		     | sed 's/.*RUN_TEST_LOOP_//;s/_.*//'); \
+	( \
+	  echo "#include <test-$$type.h>"; \
+	  echo "WRAPPER_DECL_$$func_args (WRAPPER_NAME (FUNC ($$func)))"; \
+	  echo "#include <libm-test-$$func.c>"; \
+	) > $@
+
+$(foreach t,$(types),\
+	    $(objpfx)libm-test-support-$(t).c): $(objpfx)libm-test-support-%.c:
+	( \
+	  echo "#include <test-$*.h>"; \
+	  echo "#include <libm-test-support.c>"; \
+	) > $@
+
+$(addprefix $(objpfx), $(libm-tests.o)): $(objpfx)libm-test-ulps.h
 
-$(addprefix $(objpfx),\
-	    $(filter test-double% test-idouble%,\
-		     $(libm-tests))): $(objpfx)libm-test-support-double.o
+define o-iterator-doit
+$(foreach f,$(libm-test-funcs-all),\
+	    $(objpfx)$(o)-$(f).o): $(objpfx)$(o)%.o: $(objpfx)libm-test%.c
+endef
+object-suffixes-left := $(libm-tests-base)
+include $(o-iterator)
+
+define o-iterator-doit
+$(foreach f,$(libm-test-funcs-all),\
+	    $(objpfx)$(o)-$(f).o): CFLAGS += $(libm-test-no-inline-cflags)
+endef
+object-suffixes-left := $(libm-tests-base-normal)
+include $(o-iterator)
 
+define o-iterator-doit
+$(foreach f,$(libm-test-funcs-all),\
+	    $(objpfx)$(o)-$(f).o): CFLAGS += $(libm-test-finite-cflags)
+endef
+object-suffixes-left := $(libm-tests-base-finite)
+include $(o-iterator)
+
+define o-iterator-doit
+$(foreach f,$(libm-test-funcs-all),\
+	    $(objpfx)$(o)-$(f).o): CFLAGS += $(libm-test-inline-cflags)
+endef
+object-suffixes-left := $(libm-tests-base-inline)
+include $(o-iterator)
+
+define o-iterator-doit
+$(foreach f,$($(o)-funcs),\
+	    $(objpfx)test-$(o)-$(f).o): CFLAGS += $(libm-test-vec-cflags)
+endef
+object-suffixes-left := $(libmvec-tests)
+include $(o-iterator)
+
+define o-iterator-doit
 $(addprefix $(objpfx),\
-	    $(filter test-ldouble% test-ildouble%,\
-		     $(libm-tests))): $(objpfx)libm-test-support-ldouble.o
+	    $(call libm-tests-for-type,$(o))): $(objpfx)libm-test-support-$(o).o
+endef
+object-suffixes-left := $(types)
+include $(o-iterator)
+
+define o-iterator-doit
+$(objpfx)libm-test-support-$(o).o: CFLAGS += $(libm-test-no-inline-cflags)
+endef
+object-suffixes-left := $(types)
+include $(o-iterator)
 
 # Run the math programs to automatically generate ULPs files.
 .PHONY: regen-ulps
@@ -465,10 +553,16 @@ $(objpfx)libieee.a: $(objpfx)ieee-math.o
 	$(LN_S) $(<F) $(@F)
 
 $(addprefix $(objpfx),\
-	    $(filter-out $(tests-static) $(libm-vec-tests),$(tests))): $(libm)
+	    $(filter-out $(tests-static) $(libm-tests-vector),\
+			 $(tests))): $(libm)
 $(addprefix $(objpfx),$(tests-static)): $(objpfx)libm.a
-$(addprefix $(objpfx), $(libm-vec-tests)): $(objpfx)%: $(objpfx)%-wrappers.o \
-						       $(libm) $(libmvec)
+define o-iterator-doit
+$(foreach f,$($(o)-funcs),\
+	    $(objpfx)test-$(o)-$(f)): $(objpfx)test-$(o)-wrappers.o \
+				      $(libm) $(libmvec)
+endef
+object-suffixes-left := $(libmvec-tests)
+include $(o-iterator)
 
 gmp-objs = $(patsubst %,$(common-objpfx)stdlib/%.o,\
 		      add_n sub_n cmp addmul_1 mul_1 mul_n divmod_1 \
diff --git a/math/README.libm-test b/math/README.libm-test
index 442a47aff2..0271f83f3b 100644
--- a/math/README.libm-test
+++ b/math/README.libm-test
@@ -33,17 +33,18 @@ processing are "libm-test-<func>.c" and a file "libm-test-ulps.h" with
 platform specific deltas by which the actual math function results may
 deviate from the expected results and still be considered correct.
 
-The test drivers "test-double.c", "test-float.c", and "test-ldouble.c"
-test the normal double, float and long double implementation of libm.
-The test drivers with an 'i' in their name ("test-idouble.c",
-"test-ifloat.c", and "test-ildoubl.c") test the corresponding inline
-functions (where available - otherwise they also test the real
-functions in libm).  Each driver selects the desired real floating
-type to exercise the math functions to test with (float, double, or
-long double) by defining a small set of macros just before including
-the generic "libm-test.c" file.  Each driver also either defines or
-undefines the __NO_MATH_INLINES macro just before including
-"libm-test.c" to select either the real or inline functions,
+The test drivers "test-double-<func>.c", "test-float-<func>.c", and
+"test-ldouble-<func>.c", generated by the Makefile, test the normal
+double, float and long double implementation of libm.  The test
+drivers with an 'i' in their name ("test-idouble-<func>.c",
+"test-ifloat-<func>.c", and "test-ildoubl-<func>.c") test the
+corresponding inline functions (where available - otherwise they also
+test the real functions in libm).  Each driver selects the desired
+real floating type to exercise the math functions to test with (float,
+double, or long double) by defining a small set of macros just before
+including the generic "libm-test.c" file.  Each driver also either
+defines or undefines the __NO_MATH_INLINES macro just before including
+"libm-test-<func>.c" to select either the real or inline functions,
 respectively.  Each driver is compiled into a single executable test
 program with the corresponding name.
 
diff --git a/math/gen-libm-have-vector-test.sh b/math/gen-libm-have-vector-test.sh
deleted file mode 100644
index 7d9d6d7b02..0000000000
--- a/math/gen-libm-have-vector-test.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2014-2017 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 "WRAPPER_DECL$2 (WRAPPER_NAME ($1))"
-  echo "#else"
-  echo "# define HAVE_VECTOR_$1 0"
-  echo "# define ${1}_VEC_SUFF $1"
-  echo "#endif"
-  echo
-}
-
-for func in $(cat $@ | grep ALL_RM_TEST | grep -v define | grep -v RUN_TEST_LOOP_ff_f | grep -v RUN_TEST_LOOP_fFF_11 | sed -r "s/.*\(//; s/,.*//" ); do
-  print_defs ${func}
-  print_defs ${func}f
-  print_defs ${func}l
-done
-
-for func in $(cat $@ | grep ALL_RM_TEST | grep RUN_TEST_LOOP_ff_f | sed -r "s/.*\(//; s/,.*//" ); do
-  print_defs ${func} "_ff"
-  print_defs ${func}f "_ff"
-  print_defs ${func}l "_ff"
-done
-
-for func in $(cat $@ | grep ALL_RM_TEST | grep RUN_TEST_LOOP_fFF_11 | sed -r "s/.*\(//; s/,.*//" ); do
-  print_defs ${func} "_fFF"
-  print_defs ${func}f "_fFF"
-  print_defs ${func}l "_fFF"
-done
diff --git a/math/libm-test-acos.inc b/math/libm-test-acos.inc
index c98da4f222..d795793a15 100644
--- a/math/libm-test-acos.inc
+++ b/math/libm-test-acos.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data acos_test_data[] =
   {
     TEST_f_f (acos, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
@@ -40,6 +42,12 @@ acos_test (void)
   ALL_RM_TEST (acos, 0, acos_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  acos_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-acosh.inc b/math/libm-test-acosh.inc
index 470fa29cd1..816a1cd371 100644
--- a/math/libm-test-acosh.inc
+++ b/math/libm-test-acosh.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data acosh_test_data[] =
   {
     TEST_f_f (acosh, plus_infty, plus_infty, ERRNO_UNCHANGED),
@@ -45,6 +47,12 @@ acosh_test (void)
   ALL_RM_TEST (acosh, 0, acosh_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  acosh_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-asin.inc b/math/libm-test-asin.inc
index 6d3ed8ec9e..9b6d229df1 100644
--- a/math/libm-test-asin.inc
+++ b/math/libm-test-asin.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data asin_test_data[] =
   {
     TEST_f_f (asin, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
@@ -40,6 +42,12 @@ asin_test (void)
   ALL_RM_TEST (asin, 0, asin_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  asin_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-asinh.inc b/math/libm-test-asinh.inc
index af8392afad..f218e032c3 100644
--- a/math/libm-test-asinh.inc
+++ b/math/libm-test-asinh.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data asinh_test_data[] =
   {
     TEST_f_f (asinh, plus_infty, plus_infty, ERRNO_UNCHANGED|NO_TEST_INLINE),
@@ -33,6 +35,12 @@ asinh_test (void)
   ALL_RM_TEST (asinh, 0, asinh_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  asinh_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-atan.inc b/math/libm-test-atan.inc
index 365ca87bf1..ed96133616 100644
--- a/math/libm-test-atan.inc
+++ b/math/libm-test-atan.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data atan_test_data[] =
   {
     TEST_f_f (atan, plus_infty, lit_pi_2_d, ERRNO_UNCHANGED),
@@ -34,6 +36,12 @@ atan_test (void)
   ALL_RM_TEST (atan, 0, atan_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  atan_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-atan2.inc b/math/libm-test-atan2.inc
index 9caedf7bea..e9001133f1 100644
--- a/math/libm-test-atan2.inc
+++ b/math/libm-test-atan2.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_f_data atan2_test_data[] =
   {
     /* atan2 (y,inf) == +0 for finite y > 0 or +0.  */
@@ -196,6 +198,12 @@ atan2_test (void)
   ALL_RM_TEST (atan2, 0, atan2_test_data, RUN_TEST_LOOP_ff_f, END);
 }
 
+static void
+do_test (void)
+{
+  atan2_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-atanh.inc b/math/libm-test-atanh.inc
index 97990b3507..a57aebbca7 100644
--- a/math/libm-test-atanh.inc
+++ b/math/libm-test-atanh.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data atanh_test_data[] =
   {
     TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
@@ -42,6 +44,12 @@ atanh_test (void)
   ALL_RM_TEST (atanh, 0, atanh_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  atanh_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-cabs.inc b/math/libm-test-cabs.inc
index 36d609ad9a..d9a66fa631 100644
--- a/math/libm-test-cabs.inc
+++ b/math/libm-test-cabs.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_f_data cabs_test_data[] =
   {
     /* cabs (x + iy) is specified as hypot (x,y) */
@@ -39,6 +41,12 @@ cabs_test (void)
   ALL_RM_TEST (cabs, 0, cabs_test_data, RUN_TEST_LOOP_c_f, END);
 }
 
+static void
+do_test (void)
+{
+  cabs_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-cacos.inc b/math/libm-test-cacos.inc
index 492f8f1fe0..f4cd32f993 100644
--- a/math/libm-test-cacos.inc
+++ b/math/libm-test-cacos.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data cacos_test_data[] =
   {
     TEST_c_c (cacos, minus_infty, plus_infty, lit_pi_3_m_4_d, minus_infty),
@@ -67,6 +69,12 @@ cacos_test (void)
   ALL_RM_TEST (cacos, 0, cacos_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  cacos_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-cacosh.inc b/math/libm-test-cacosh.inc
index 4a16d10077..518cb29aa6 100644
--- a/math/libm-test-cacosh.inc
+++ b/math/libm-test-cacosh.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data cacosh_test_data[] =
   {
     TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, lit_pi_3_m_4_d),
@@ -67,6 +69,12 @@ cacosh_test (void)
   ALL_RM_TEST (cacosh, 0, cacosh_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  cacosh_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-canonicalize.inc b/math/libm-test-canonicalize.inc
index 93a0a9bb6b..e0ba3eceaa 100644
--- a/math/libm-test-canonicalize.inc
+++ b/math/libm-test-canonicalize.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_Ff_b1_data canonicalize_test_data[] =
   {
     TEST_Ffp_b1 (canonicalize, plus_infty, 0, plus_infty, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -80,6 +82,12 @@ canonicalize_test (void)
   ALL_RM_TEST (canonicalize, 1, canonicalize_test_data, RUN_TEST_LOOP_Ffp_b1, END, x);
 }
 
+static void
+do_test (void)
+{
+  canonicalize_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-carg.inc b/math/libm-test-carg.inc
index e92d4fbcce..e03389310f 100644
--- a/math/libm-test-carg.inc
+++ b/math/libm-test-carg.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_f_data carg_test_data[] =
   {
     /* carg (x + iy) is specified as atan2 (y, x) */
@@ -57,6 +59,12 @@ carg_test (void)
   ALL_RM_TEST (carg, 0, carg_test_data, RUN_TEST_LOOP_c_f, END);
 }
 
+static void
+do_test (void)
+{
+  carg_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-casin.inc b/math/libm-test-casin.inc
index 9e3918631c..d78077590f 100644
--- a/math/libm-test-casin.inc
+++ b/math/libm-test-casin.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data casin_test_data[] =
   {
     TEST_c_c (casin, plus_infty, plus_infty, lit_pi_4_d, plus_infty),
@@ -68,6 +70,12 @@ casin_test (void)
   ALL_RM_TEST (casin, 0, casin_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  casin_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-casinh.inc b/math/libm-test-casinh.inc
index 476207443d..5298c812b8 100644
--- a/math/libm-test-casinh.inc
+++ b/math/libm-test-casinh.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data casinh_test_data[] =
   {
     TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, lit_pi_4_d),
@@ -68,6 +70,12 @@ casinh_test (void)
   ALL_RM_TEST (casinh, 0, casinh_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  casinh_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-catan.inc b/math/libm-test-catan.inc
index 1d8cf180db..ee9662924f 100644
--- a/math/libm-test-catan.inc
+++ b/math/libm-test-catan.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data catan_test_data[] =
   {
     TEST_c_c (catan, plus_zero, 1.0L, plus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION),
@@ -77,6 +79,12 @@ catan_test (void)
   ALL_RM_TEST (catan, 0, catan_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  catan_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-catanh.inc b/math/libm-test-catanh.inc
index 321a0bd200..6ec6fbad64 100644
--- a/math/libm-test-catanh.inc
+++ b/math/libm-test-catanh.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data catanh_test_data[] =
   {
     TEST_c_c (catanh, 1.0L, plus_zero, plus_infty, plus_zero, DIVIDE_BY_ZERO_EXCEPTION),
@@ -76,6 +78,12 @@ catanh_test (void)
   ALL_RM_TEST (catanh, 0, catanh_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  catanh_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-cbrt.inc b/math/libm-test-cbrt.inc
index 11a8a3bae7..769f52e89f 100644
--- a/math/libm-test-cbrt.inc
+++ b/math/libm-test-cbrt.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data cbrt_test_data[] =
   {
     TEST_f_f (cbrt, plus_infty, plus_infty, ERRNO_UNCHANGED),
@@ -34,6 +36,12 @@ cbrt_test (void)
   ALL_RM_TEST (cbrt, 0, cbrt_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  cbrt_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-ccos.inc b/math/libm-test-ccos.inc
index 3180b55c66..2497af1d49 100644
--- a/math/libm-test-ccos.inc
+++ b/math/libm-test-ccos.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data ccos_test_data[] =
   {
     TEST_c_c (ccos, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
@@ -72,6 +74,12 @@ ccos_test (void)
   ALL_RM_TEST (ccos, 0, ccos_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  ccos_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-ccosh.inc b/math/libm-test-ccosh.inc
index ac4c103e67..7c22c9e38f 100644
--- a/math/libm-test-ccosh.inc
+++ b/math/libm-test-ccosh.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data ccosh_test_data[] =
   {
     TEST_c_c (ccosh, 0.0, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
@@ -72,6 +74,12 @@ ccosh_test (void)
   ALL_RM_TEST (ccosh, 0, ccosh_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  ccosh_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-ceil.inc b/math/libm-test-ceil.inc
index c173b7e36e..d6356a574b 100644
--- a/math/libm-test-ceil.inc
+++ b/math/libm-test-ceil.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data ceil_test_data[] =
   {
     TEST_f_f (ceil, 0.0, 0.0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -162,6 +164,12 @@ ceil_test (void)
   ALL_RM_TEST (ceil, 1, ceil_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  ceil_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-cexp.inc b/math/libm-test-cexp.inc
index 355748c50c..f4bd962c5d 100644
--- a/math/libm-test-cexp.inc
+++ b/math/libm-test-cexp.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data cexp_test_data[] =
   {
     TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0),
@@ -69,6 +71,12 @@ cexp_test (void)
   ALL_RM_TEST (cexp, 0, cexp_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  cexp_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-cimag.inc b/math/libm-test-cimag.inc
index a711f4cf53..569d20c5df 100644
--- a/math/libm-test-cimag.inc
+++ b/math/libm-test-cimag.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_f_data cimag_test_data[] =
   {
     TEST_c_f (cimag, 1.0, 0.0, 0.0, NO_INEXACT_EXCEPTION),
@@ -37,6 +39,12 @@ cimag_test (void)
   ALL_RM_TEST (cimag, 1, cimag_test_data, RUN_TEST_LOOP_c_f, END);
 }
 
+static void
+do_test (void)
+{
+  cimag_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-clog.inc b/math/libm-test-clog.inc
index 261aaad6ba..6a97d5a31d 100644
--- a/math/libm-test-clog.inc
+++ b/math/libm-test-clog.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data clog_test_data[] =
   {
     TEST_c_c (clog, minus_zero, 0, minus_infty, lit_pi, DIVIDE_BY_ZERO_EXCEPTION),
@@ -76,6 +78,12 @@ clog_test (void)
   ALL_RM_TEST (clog, 0, clog_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  clog_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-clog10.inc b/math/libm-test-clog10.inc
index 0c92a79b96..b330d74d53 100644
--- a/math/libm-test-clog10.inc
+++ b/math/libm-test-clog10.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data clog10_test_data[] =
   {
     TEST_c_c (clog10, minus_zero, 0, minus_infty, lit_pi_ln10_d, DIVIDE_BY_ZERO_EXCEPTION),
@@ -75,6 +77,12 @@ clog10_test (void)
   ALL_RM_TEST (clog10, 0, clog10_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  clog10_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-conj.inc b/math/libm-test-conj.inc
index cfa0a53810..e5b2529b88 100644
--- a/math/libm-test-conj.inc
+++ b/math/libm-test-conj.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data conj_test_data[] =
   {
     TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero, NO_INEXACT_EXCEPTION),
@@ -36,6 +38,12 @@ conj_test (void)
   ALL_RM_TEST (conj, 1, conj_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  conj_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-copysign.inc b/math/libm-test-copysign.inc
index e717160673..635cb02f66 100644
--- a/math/libm-test-copysign.inc
+++ b/math/libm-test-copysign.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_f_data copysign_test_data[] =
   {
     TEST_ff_f (copysign, 0, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -105,6 +107,12 @@ copysign_test (void)
   ALL_RM_TEST (copysign, 1, copysign_test_data, RUN_TEST_LOOP_ff_f, END);
 }
 
+static void
+do_test (void)
+{
+  copysign_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-cos.inc b/math/libm-test-cos.inc
index 1ca5b41454..246b37154e 100644
--- a/math/libm-test-cos.inc
+++ b/math/libm-test-cos.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data cos_test_data[] =
   {
     TEST_f_f (cos, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
@@ -34,6 +36,12 @@ cos_test (void)
   ALL_RM_TEST (cos, 0, cos_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  cos_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-cosh.inc b/math/libm-test-cosh.inc
index a6456440d5..a0b88b0884 100644
--- a/math/libm-test-cosh.inc
+++ b/math/libm-test-cosh.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data cosh_test_data[] =
   {
     TEST_f_f (cosh, plus_infty, plus_infty, ERRNO_UNCHANGED|NO_TEST_INLINE),
@@ -34,6 +36,12 @@ cosh_test (void)
   ALL_RM_TEST (cosh, 0, cosh_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  cosh_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-cpow.inc b/math/libm-test-cpow.inc
index 2f4cda209c..ffd112844e 100644
--- a/math/libm-test-cpow.inc
+++ b/math/libm-test-cpow.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_cc_c_data cpow_test_data[] =
   {
     TEST_cc_c (cpow, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value),
@@ -29,6 +31,12 @@ cpow_test (void)
   ALL_RM_TEST (cpow, 0, cpow_test_data, RUN_TEST_LOOP_cc_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  cpow_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-cproj.inc b/math/libm-test-cproj.inc
index 2daa6ab59f..441d58ba7f 100644
--- a/math/libm-test-cproj.inc
+++ b/math/libm-test-cproj.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data cproj_test_data[] =
   {
     TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0, NO_INEXACT_EXCEPTION),
@@ -80,6 +82,12 @@ cproj_test (void)
   ALL_RM_TEST (cproj, 1, cproj_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  cproj_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-creal.inc b/math/libm-test-creal.inc
index 20ea43c914..aaa1412ac6 100644
--- a/math/libm-test-creal.inc
+++ b/math/libm-test-creal.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_f_data creal_test_data[] =
   {
     TEST_c_f (creal, 0.0, 1.0, 0.0, NO_INEXACT_EXCEPTION),
@@ -37,6 +39,12 @@ creal_test (void)
   ALL_RM_TEST (creal, 1, creal_test_data, RUN_TEST_LOOP_c_f, END);
 }
 
+static void
+do_test (void)
+{
+  creal_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-csin.inc b/math/libm-test-csin.inc
index f42828c874..03214ad512 100644
--- a/math/libm-test-csin.inc
+++ b/math/libm-test-csin.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data csin_test_data[] =
   {
     TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty),
@@ -72,6 +74,12 @@ csin_test (void)
   ALL_RM_TEST (csin, 0, csin_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  csin_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-csinh.inc b/math/libm-test-csinh.inc
index 06877c8468..41b9092bb1 100644
--- a/math/libm-test-csinh.inc
+++ b/math/libm-test-csinh.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data csinh_test_data[] =
   {
     TEST_c_c (csinh, 0.0, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN),
@@ -72,6 +74,12 @@ csinh_test (void)
   ALL_RM_TEST (csinh, 0, csinh_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  csinh_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-csqrt.inc b/math/libm-test-csqrt.inc
index 6ff26faa9b..43918fe146 100644
--- a/math/libm-test-csqrt.inc
+++ b/math/libm-test-csqrt.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data csqrt_test_data[] =
   {
     TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty),
@@ -66,6 +68,12 @@ csqrt_test (void)
   ALL_RM_TEST (csqrt, 0, csqrt_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  csqrt_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-ctan.inc b/math/libm-test-ctan.inc
index a5689400f3..e485828b8c 100644
--- a/math/libm-test-ctan.inc
+++ b/math/libm-test-ctan.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data ctan_test_data[] =
   {
     TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0),
@@ -126,6 +128,12 @@ ctan_test (void)
   ALL_RM_TEST (ctan, 0, ctan_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  ctan_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-ctanh.inc b/math/libm-test-ctanh.inc
index 48002ebde6..6ddeb0d361 100644
--- a/math/libm-test-ctanh.inc
+++ b/math/libm-test-ctanh.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_c_c_data ctanh_test_data[] =
   {
     TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0),
@@ -125,6 +127,12 @@ ctanh_test (void)
   ALL_RM_TEST (ctanh, 0, ctanh_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
 }
 
+static void
+do_test (void)
+{
+  ctanh_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-driver.c b/math/libm-test-driver.c
index d24c5aadaf..161419837d 100644
--- a/math/libm-test-driver.c
+++ b/math/libm-test-driver.c
@@ -952,15 +952,9 @@ struct test_Ff_b1_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(FUN, SUFF, EXACT)					\
   CHECK_ARCH_EXT;						\
-  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					\
diff --git a/math/libm-test-erf.inc b/math/libm-test-erf.inc
index 20a389ec5a..bcc96e5e6c 100644
--- a/math/libm-test-erf.inc
+++ b/math/libm-test-erf.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data erf_test_data[] =
   {
     TEST_f_f (erf, plus_infty, 1, ERRNO_UNCHANGED),
@@ -34,6 +36,12 @@ erf_test (void)
   ALL_RM_TEST (erf, 0, erf_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  erf_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-erfc.inc b/math/libm-test-erfc.inc
index ed6190e05d..7018eb34d7 100644
--- a/math/libm-test-erfc.inc
+++ b/math/libm-test-erfc.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data erfc_test_data[] =
   {
     TEST_f_f (erfc, plus_infty, 0.0, ERRNO_UNCHANGED),
@@ -32,6 +34,12 @@ erfc_test (void)
   ALL_RM_TEST (erfc, 0, erfc_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  erfc_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-exp.inc b/math/libm-test-exp.inc
index a5ed2e2fd3..323a82c360 100644
--- a/math/libm-test-exp.inc
+++ b/math/libm-test-exp.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data exp_test_data[] =
   {
     TEST_f_f (exp, plus_infty, plus_infty, ERRNO_UNCHANGED|NO_TEST_INLINE),
@@ -34,6 +36,12 @@ exp_test (void)
   ALL_RM_TEST (exp, 0, exp_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  exp_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-exp10.inc b/math/libm-test-exp10.inc
index 6be936bc2e..92c81adb7a 100644
--- a/math/libm-test-exp10.inc
+++ b/math/libm-test-exp10.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data exp10_test_data[] =
   {
     TEST_f_f (exp10, plus_infty, plus_infty, ERRNO_UNCHANGED),
@@ -41,6 +43,13 @@ pow10_test (void)
   ALL_RM_TEST (pow10, 0, exp10_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  exp10_test ();
+  pow10_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-exp2.inc b/math/libm-test-exp2.inc
index 0c0e4dadbc..3c2561aa7f 100644
--- a/math/libm-test-exp2.inc
+++ b/math/libm-test-exp2.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data exp2_test_data[] =
   {
     TEST_f_f (exp2, plus_infty, plus_infty, ERRNO_UNCHANGED),
@@ -34,6 +36,12 @@ exp2_test (void)
   ALL_RM_TEST (exp2, 0, exp2_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  exp2_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-expm1.inc b/math/libm-test-expm1.inc
index c01abf8774..c18c596933 100644
--- a/math/libm-test-expm1.inc
+++ b/math/libm-test-expm1.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data expm1_test_data[] =
   {
     TEST_f_f (expm1, plus_infty, plus_infty, ERRNO_UNCHANGED|NO_TEST_INLINE),
@@ -34,6 +36,12 @@ expm1_test (void)
   ALL_RM_TEST (expm1, 0, expm1_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  expm1_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-fabs.inc b/math/libm-test-fabs.inc
index 1b0dc54f36..392cb68542 100644
--- a/math/libm-test-fabs.inc
+++ b/math/libm-test-fabs.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data fabs_test_data[] =
   {
     TEST_f_f (fabs, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -44,6 +46,12 @@ fabs_test (void)
   ALL_RM_TEST (fabs, 1, fabs_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  fabs_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-fdim.inc b/math/libm-test-fdim.inc
index 28aa6adfe4..73713a6c20 100644
--- a/math/libm-test-fdim.inc
+++ b/math/libm-test-fdim.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_f_data fdim_test_data[] =
   {
     TEST_ff_f (fdim, 0, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -114,6 +116,12 @@ fdim_test (void)
   ALL_RM_TEST (fdim, 1, fdim_test_data, RUN_TEST_LOOP_ff_f, END);
 }
 
+static void
+do_test (void)
+{
+  fdim_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-floor.inc b/math/libm-test-floor.inc
index a0abcb2bb3..cceeed90bb 100644
--- a/math/libm-test-floor.inc
+++ b/math/libm-test-floor.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data floor_test_data[] =
   {
     TEST_f_f (floor, 0.0, 0.0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -159,6 +161,12 @@ floor_test (void)
   ALL_RM_TEST (floor, 1, floor_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  floor_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-fma.inc b/math/libm-test-fma.inc
index 6da8daddf6..77641773a3 100644
--- a/math/libm-test-fma.inc
+++ b/math/libm-test-fma.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_fff_f_data fma_test_data[] =
   {
     TEST_fff_f (fma, qnan_value, 2.0, 3.0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -120,6 +122,12 @@ fma_test (void)
   ALL_RM_TEST (fma, 1, fma_test_data, RUN_TEST_LOOP_fff_f, END);
 }
 
+static void
+do_test (void)
+{
+  fma_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-fmax.inc b/math/libm-test-fmax.inc
index 950a2cbb0c..682a1b8918 100644
--- a/math/libm-test-fmax.inc
+++ b/math/libm-test-fmax.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_f_data fmax_test_data[] =
   {
     TEST_ff_f (fmax, 0, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -115,6 +117,12 @@ fmax_test (void)
   ALL_RM_TEST (fmax, 1, fmax_test_data, RUN_TEST_LOOP_ff_f, END);
 }
 
+static void
+do_test (void)
+{
+  fmax_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-fmaxmag.inc b/math/libm-test-fmaxmag.inc
index 0253f27d1a..94ef268d3c 100644
--- a/math/libm-test-fmaxmag.inc
+++ b/math/libm-test-fmaxmag.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_f_data fmaxmag_test_data[] =
   {
     TEST_ff_f (fmaxmag, 0, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -129,6 +131,12 @@ fmaxmag_test (void)
   ALL_RM_TEST (fmaxmag, 1, fmaxmag_test_data, RUN_TEST_LOOP_ff_f, END);
 }
 
+static void
+do_test (void)
+{
+  fmaxmag_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-fmin.inc b/math/libm-test-fmin.inc
index 024ca909d1..0d2217df27 100644
--- a/math/libm-test-fmin.inc
+++ b/math/libm-test-fmin.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_f_data fmin_test_data[] =
   {
     TEST_ff_f (fmin, 0, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -114,6 +116,12 @@ fmin_test (void)
   ALL_RM_TEST (fmin, 1, fmin_test_data, RUN_TEST_LOOP_ff_f, END);
 }
 
+static void
+do_test (void)
+{
+  fmin_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-fminmag.inc b/math/libm-test-fminmag.inc
index 1ce5ac8c1b..267153b709 100644
--- a/math/libm-test-fminmag.inc
+++ b/math/libm-test-fminmag.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_f_data fminmag_test_data[] =
   {
     TEST_ff_f (fminmag, 0, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -128,6 +130,12 @@ fminmag_test (void)
   ALL_RM_TEST (fminmag, 1, fminmag_test_data, RUN_TEST_LOOP_ff_f, END);
 }
 
+static void
+do_test (void)
+{
+  fminmag_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-fmod.inc b/math/libm-test-fmod.inc
index e536af7218..c8acc14a42 100644
--- a/math/libm-test-fmod.inc
+++ b/math/libm-test-fmod.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_f_data fmod_test_data[] =
   {
     /* fmod (+0, y) == +0 for y != 0.  */
@@ -262,6 +264,12 @@ fmod_test (void)
   ALL_RM_TEST (fmod, 1, fmod_test_data, RUN_TEST_LOOP_ff_f, END);
 }
 
+static void
+do_test (void)
+{
+  fmod_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-fpclassify.inc b/math/libm-test-fpclassify.inc
index dd2eec2a64..a85f52c8e4 100644
--- a/math/libm-test-fpclassify.inc
+++ b/math/libm-test-fpclassify.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_i_data fpclassify_test_data[] =
   {
     TEST_f_i (fpclassify, qnan_value, FP_NAN, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -41,6 +43,12 @@ fpclassify_test (void)
   ALL_RM_TEST (fpclassify, 1, fpclassify_test_data, RUN_TEST_LOOP_f_i_tg, END);
 }
 
+static void
+do_test (void)
+{
+  fpclassify_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-frexp.inc b/math/libm-test-frexp.inc
index bfc80df87c..b6f7d7160e 100644
--- a/math/libm-test-frexp.inc
+++ b/math/libm-test-frexp.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f1_data frexp_test_data[] =
   {
     TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -81,6 +83,12 @@ frexp_test (void)
   ALL_RM_TEST (frexp, 1, frexp_test_data, RUN_TEST_LOOP_fI_f1, END, x);
 }
 
+static void
+do_test (void)
+{
+  frexp_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-fromfp.inc b/math/libm-test-fromfp.inc
index fb31e85e5a..f2d520574e 100644
--- a/math/libm-test-fromfp.inc
+++ b/math/libm-test-fromfp.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_fiu_M_data fromfp_test_data[] =
   {
     /* Infinity, NaN and values that are definitely out of range
@@ -11931,6 +11933,12 @@ fromfp_test (void)
   ALL_RM_TEST (fromfp, 1, fromfp_test_data, RUN_TEST_LOOP_fiu_M, END);
 }
 
+static void
+do_test (void)
+{
+  fromfp_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-fromfpx.inc b/math/libm-test-fromfpx.inc
index b8a466ccc6..34e0af33ec 100644
--- a/math/libm-test-fromfpx.inc
+++ b/math/libm-test-fromfpx.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_fiu_M_data fromfpx_test_data[] =
   {
     /* Infinity, NaN and values that are definitely out of range
@@ -11931,6 +11933,12 @@ fromfpx_test (void)
   ALL_RM_TEST (fromfpx, 1, fromfpx_test_data, RUN_TEST_LOOP_fiu_M, END);
 }
 
+static void
+do_test (void)
+{
+  fromfpx_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-getpayload.inc b/math/libm-test-getpayload.inc
index 335a11e3e8..def4d8bd23 100644
--- a/math/libm-test-getpayload.inc
+++ b/math/libm-test-getpayload.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data getpayload_test_data[] =
   {
     TEST_fp_f (getpayload, plus_infty, IGNORE, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -74,6 +76,12 @@ getpayload_test (void)
   ALL_RM_TEST (getpayload, 1, getpayload_test_data, RUN_TEST_LOOP_fp_f, END);
 }
 
+static void
+do_test (void)
+{
+  getpayload_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-hypot.inc b/math/libm-test-hypot.inc
index f440e27ecb..7d679828cd 100644
--- a/math/libm-test-hypot.inc
+++ b/math/libm-test-hypot.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_f_data hypot_test_data[] =
   {
     TEST_ff_f (hypot, plus_infty, 1, plus_infty, ERRNO_UNCHANGED),
@@ -171,6 +173,12 @@ hypot_test (void)
   ALL_RM_TEST (hypot, 0, hypot_test_data, RUN_TEST_LOOP_ff_f, END);
 }
 
+static void
+do_test (void)
+{
+  hypot_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-ilogb.inc b/math/libm-test-ilogb.inc
index 957e5c1561..7c94d62291 100644
--- a/math/libm-test-ilogb.inc
+++ b/math/libm-test-ilogb.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_i_data ilogb_test_data[] =
   {
     TEST_f_i (ilogb, 1, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -57,6 +59,12 @@ ilogb_test (void)
   ALL_RM_TEST (ilogb, 1, ilogb_test_data, RUN_TEST_LOOP_f_i, END);
 }
 
+static void
+do_test (void)
+{
+  ilogb_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-iscanonical.inc b/math/libm-test-iscanonical.inc
index c940027ac8..3d4c850ab8 100644
--- a/math/libm-test-iscanonical.inc
+++ b/math/libm-test-iscanonical.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_i_data iscanonical_test_data[] =
   {
     TEST_f_b (iscanonical, 0, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -41,6 +43,12 @@ iscanonical_test (void)
   ALL_RM_TEST (iscanonical, 1, iscanonical_test_data, RUN_TEST_LOOP_f_b_tg, END);
 }
 
+static void
+do_test (void)
+{
+  iscanonical_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-iseqsig.inc b/math/libm-test-iseqsig.inc
index aa1dcabfaa..d021fc88a7 100644
--- a/math/libm-test-iseqsig.inc
+++ b/math/libm-test-iseqsig.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_i_data iseqsig_test_data[] =
   {
     TEST_ff_i (iseqsig, minus_zero, minus_zero, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -75,6 +77,12 @@ iseqsig_test (void)
   ALL_RM_TEST (iseqsig, 1, iseqsig_test_data, RUN_TEST_LOOP_ff_i_tg, END);
 }
 
+static void
+do_test (void)
+{
+  iseqsig_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-isfinite.inc b/math/libm-test-isfinite.inc
index 593822c2e5..48d4c2e15b 100644
--- a/math/libm-test-isfinite.inc
+++ b/math/libm-test-isfinite.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_i_data isfinite_test_data[] =
   {
     TEST_f_b (isfinite, 0, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -48,6 +50,13 @@ finite_test (void)
   ALL_RM_TEST (finite, 1, isfinite_test_data, RUN_TEST_LOOP_f_b, END);
 }
 
+static void
+do_test (void)
+{
+  isfinite_test ();
+  finite_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-isgreater.inc b/math/libm-test-isgreater.inc
index ba2ee90b07..468523aa18 100644
--- a/math/libm-test-isgreater.inc
+++ b/math/libm-test-isgreater.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_i_data isgreater_test_data[] =
   {
     TEST_ff_i (isgreater, minus_zero, minus_zero, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -75,6 +77,12 @@ isgreater_test (void)
   ALL_RM_TEST (isgreater, 1, isgreater_test_data, RUN_TEST_LOOP_ff_i_tg, END);
 }
 
+static void
+do_test (void)
+{
+  isgreater_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-isgreaterequal.inc b/math/libm-test-isgreaterequal.inc
index 7f37fa8842..51e564ecf6 100644
--- a/math/libm-test-isgreaterequal.inc
+++ b/math/libm-test-isgreaterequal.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_i_data isgreaterequal_test_data[] =
   {
     TEST_ff_i (isgreaterequal, minus_zero, minus_zero, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -75,6 +77,12 @@ isgreaterequal_test (void)
   ALL_RM_TEST (isgreaterequal, 1, isgreaterequal_test_data, RUN_TEST_LOOP_ff_i_tg, END);
 }
 
+static void
+do_test (void)
+{
+  isgreaterequal_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-isinf.inc b/math/libm-test-isinf.inc
index 08d9b4b375..cc6355414b 100644
--- a/math/libm-test-isinf.inc
+++ b/math/libm-test-isinf.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_i_data isinf_test_data[] =
   {
     TEST_f_b (isinf, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -41,6 +43,12 @@ isinf_test (void)
   ALL_RM_TEST (isinf, 1, isinf_test_data, RUN_TEST_LOOP_f_b_tg, END);
 }
 
+static void
+do_test (void)
+{
+  isinf_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-isless.inc b/math/libm-test-isless.inc
index f93bb667a3..402dd978a3 100644
--- a/math/libm-test-isless.inc
+++ b/math/libm-test-isless.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_i_data isless_test_data[] =
   {
     TEST_ff_i (isless, minus_zero, minus_zero, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -75,6 +77,12 @@ isless_test (void)
   ALL_RM_TEST (isless, 1, isless_test_data, RUN_TEST_LOOP_ff_i_tg, END);
 }
 
+static void
+do_test (void)
+{
+  isless_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-islessequal.inc b/math/libm-test-islessequal.inc
index 93e4252001..e71ec28178 100644
--- a/math/libm-test-islessequal.inc
+++ b/math/libm-test-islessequal.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_i_data islessequal_test_data[] =
   {
     TEST_ff_i (islessequal, minus_zero, minus_zero, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -75,6 +77,12 @@ islessequal_test (void)
   ALL_RM_TEST (islessequal, 1, islessequal_test_data, RUN_TEST_LOOP_ff_i_tg, END);
 }
 
+static void
+do_test (void)
+{
+  islessequal_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-islessgreater.inc b/math/libm-test-islessgreater.inc
index baa8b7afa5..b17bd07803 100644
--- a/math/libm-test-islessgreater.inc
+++ b/math/libm-test-islessgreater.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_i_data islessgreater_test_data[] =
   {
     TEST_ff_i (islessgreater, minus_zero, minus_zero, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -75,6 +77,12 @@ islessgreater_test (void)
   ALL_RM_TEST (islessgreater, 1, islessgreater_test_data, RUN_TEST_LOOP_ff_i_tg, END);
 }
 
+static void
+do_test (void)
+{
+  islessgreater_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-isnan.inc b/math/libm-test-isnan.inc
index ec8f45bf97..d125ec4627 100644
--- a/math/libm-test-isnan.inc
+++ b/math/libm-test-isnan.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_i_data isnan_test_data[] =
   {
     TEST_f_b (isnan, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -41,6 +43,12 @@ isnan_test (void)
   ALL_RM_TEST (isnan, 1, isnan_test_data, RUN_TEST_LOOP_f_b_tg, END);
 }
 
+static void
+do_test (void)
+{
+  isnan_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-isnormal.inc b/math/libm-test-isnormal.inc
index e5b3881ec0..9f16e9b443 100644
--- a/math/libm-test-isnormal.inc
+++ b/math/libm-test-isnormal.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_i_data isnormal_test_data[] =
   {
     TEST_f_b (isnormal, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -41,6 +43,12 @@ isnormal_test (void)
   ALL_RM_TEST (isnormal, 1, isnormal_test_data, RUN_TEST_LOOP_f_b_tg, END);
 }
 
+static void
+do_test (void)
+{
+  isnormal_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-issignaling.inc b/math/libm-test-issignaling.inc
index 3f0b7c1e86..e3df38b912 100644
--- a/math/libm-test-issignaling.inc
+++ b/math/libm-test-issignaling.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_i_data issignaling_test_data[] =
   {
     TEST_f_b (issignaling, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -43,6 +45,12 @@ issignaling_test (void)
   ALL_RM_TEST (issignaling, 1, issignaling_test_data, RUN_TEST_LOOP_f_b_tg, END);
 }
 
+static void
+do_test (void)
+{
+  issignaling_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-issubnormal.inc b/math/libm-test-issubnormal.inc
index 94de45a8b0..930dd5c66d 100644
--- a/math/libm-test-issubnormal.inc
+++ b/math/libm-test-issubnormal.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_i_data issubnormal_test_data[] =
   {
     TEST_f_b (issubnormal, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -41,6 +43,12 @@ issubnormal_test (void)
   ALL_RM_TEST (issubnormal, 1, issubnormal_test_data, RUN_TEST_LOOP_f_b_tg, END);
 }
 
+static void
+do_test (void)
+{
+  issubnormal_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-isunordered.inc b/math/libm-test-isunordered.inc
index 8a3ca076e1..9c2bb247b3 100644
--- a/math/libm-test-isunordered.inc
+++ b/math/libm-test-isunordered.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_i_data isunordered_test_data[] =
   {
     TEST_ff_i (isunordered, minus_zero, minus_zero, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -75,6 +77,12 @@ isunordered_test (void)
   ALL_RM_TEST (isunordered, 1, isunordered_test_data, RUN_TEST_LOOP_ff_i_tg, END);
 }
 
+static void
+do_test (void)
+{
+  isunordered_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-iszero.inc b/math/libm-test-iszero.inc
index 8694296a3e..0519c090fc 100644
--- a/math/libm-test-iszero.inc
+++ b/math/libm-test-iszero.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_i_data iszero_test_data[] =
   {
     TEST_f_b (iszero, 0, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -41,6 +43,12 @@ iszero_test (void)
   ALL_RM_TEST (iszero, 1, iszero_test_data, RUN_TEST_LOOP_f_b_tg, END);
 }
 
+static void
+do_test (void)
+{
+  iszero_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-j0.inc b/math/libm-test-j0.inc
index 5628d7c34b..2fa8c8ee48 100644
--- a/math/libm-test-j0.inc
+++ b/math/libm-test-j0.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data j0_test_data[] =
   {
     /* j0 is the Bessel function of the first kind of order 0 */
@@ -35,6 +37,12 @@ j0_test (void)
   ALL_RM_TEST (j0, 0, j0_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  j0_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-j1.inc b/math/libm-test-j1.inc
index a9ab7b2978..44b831480c 100644
--- a/math/libm-test-j1.inc
+++ b/math/libm-test-j1.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data j1_test_data[] =
   {
     /* j1 is the Bessel function of the first kind of order 1 */
@@ -35,6 +37,12 @@ j1_test (void)
   ALL_RM_TEST (j1, 0, j1_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  j1_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-jn.inc b/math/libm-test-jn.inc
index 7bb6d75832..2bc72d1711 100644
--- a/math/libm-test-jn.inc
+++ b/math/libm-test-jn.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_if_f_data jn_test_data[] =
   {
     /* jn is the Bessel function of the first kind of order n.  */
@@ -60,6 +62,12 @@ jn_test (void)
   ALL_RM_TEST (jn, 0, jn_test_data, RUN_TEST_LOOP_if_f, END);
 }
 
+static void
+do_test (void)
+{
+  jn_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-lgamma.inc b/math/libm-test-lgamma.inc
index 1bca7f1a3b..9799aa9aaf 100644
--- a/math/libm-test-lgamma.inc
+++ b/math/libm-test-lgamma.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f1_data lgamma_test_data[] =
   {
     TEST_f_f1 (lgamma, plus_infty, plus_infty, 1, ERRNO_UNCHANGED),
@@ -47,6 +49,13 @@ gamma_test (void)
   ALL_RM_TEST (gamma, 0, lgamma_test_data, RUN_TEST_LOOP_f_f1, END, signgam);
 }
 
+static void
+do_test (void)
+{
+  lgamma_test ();
+  gamma_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-llogb.inc b/math/libm-test-llogb.inc
index 08b07919d2..66c5d00b1a 100644
--- a/math/libm-test-llogb.inc
+++ b/math/libm-test-llogb.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_l_data llogb_test_data[] =
   {
     TEST_f_l (llogb, 1, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -57,6 +59,12 @@ llogb_test (void)
   ALL_RM_TEST (llogb, 1, llogb_test_data, RUN_TEST_LOOP_f_l, END);
 }
 
+static void
+do_test (void)
+{
+  llogb_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-llrint.inc b/math/libm-test-llrint.inc
index 053424bbce..20a64d63a3 100644
--- a/math/libm-test-llrint.inc
+++ b/math/libm-test-llrint.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_L_data llrint_test_data[] =
   {
     /* Bug 6798: errno setting may be missing.  */
@@ -250,6 +252,12 @@ llrint_test (void)
   ALL_RM_TEST (llrint, 1, llrint_test_data, RUN_TEST_LOOP_f_L, END);
 }
 
+static void
+do_test (void)
+{
+  llrint_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-llround.inc b/math/libm-test-llround.inc
index 72ef87b883..9f430d7cf0 100644
--- a/math/libm-test-llround.inc
+++ b/math/libm-test-llround.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_L_data llround_test_data[] =
   {
     /* Bug 6797: errno setting may be missing.  */
@@ -285,6 +287,12 @@ llround_test (void)
   ALL_RM_TEST (llround, 1, llround_test_data, RUN_TEST_LOOP_f_L, END);
 }
 
+static void
+do_test (void)
+{
+  llround_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-log.inc b/math/libm-test-log.inc
index 57c2942062..d53eb7fe07 100644
--- a/math/libm-test-log.inc
+++ b/math/libm-test-log.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data log_test_data[] =
   {
     TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
@@ -41,6 +43,12 @@ log_test (void)
   ALL_RM_TEST (log, 0, log_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  log_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-log10.inc b/math/libm-test-log10.inc
index 4543898655..0c31b190e3 100644
--- a/math/libm-test-log10.inc
+++ b/math/libm-test-log10.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data log10_test_data[] =
   {
     TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
@@ -43,6 +45,12 @@ log10_test (void)
   ALL_RM_TEST (log10, 0, log10_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  log10_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-log1p.inc b/math/libm-test-log1p.inc
index 3df681eeec..5dd223fb6d 100644
--- a/math/libm-test-log1p.inc
+++ b/math/libm-test-log1p.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data log1p_test_data[] =
   {
     TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
@@ -38,6 +40,12 @@ log1p_test (void)
   ALL_RM_TEST (log1p, 0, log1p_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  log1p_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-log2.inc b/math/libm-test-log2.inc
index c232c36415..adae1f129b 100644
--- a/math/libm-test-log2.inc
+++ b/math/libm-test-log2.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data log2_test_data[] =
   {
     TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
@@ -42,6 +44,12 @@ log2_test (void)
   ALL_RM_TEST (log2, 0, log2_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  log2_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-logb.inc b/math/libm-test-logb.inc
index 2fe87c3ca8..38bb00fdf6 100644
--- a/math/libm-test-logb.inc
+++ b/math/libm-test-logb.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data logb_test_data[] =
   {
     TEST_f_f (logb, plus_infty, plus_infty, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -70,6 +72,12 @@ logb_test (void)
   ALL_RM_TEST (logb, 1, logb_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  logb_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-lrint.inc b/math/libm-test-lrint.inc
index eb2d6700ed..42ce6b08b1 100644
--- a/math/libm-test-lrint.inc
+++ b/math/libm-test-lrint.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_l_data lrint_test_data[] =
   {
     /* Bug 6798: errno setting may be missing.  */
@@ -345,6 +347,12 @@ lrint_test (void)
   ALL_RM_TEST (lrint, 1, lrint_test_data, RUN_TEST_LOOP_f_l, END);
 }
 
+static void
+do_test (void)
+{
+  lrint_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-lround.inc b/math/libm-test-lround.inc
index cadc36925b..57fc6fa451 100644
--- a/math/libm-test-lround.inc
+++ b/math/libm-test-lround.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_l_data lround_test_data[] =
   {
     /* Bug 6797: errno setting may be missing.  */
@@ -356,6 +358,12 @@ lround_test (void)
   ALL_RM_TEST (lround, 1, lround_test_data, RUN_TEST_LOOP_f_l, END);
 }
 
+static void
+do_test (void)
+{
+  lround_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-modf.inc b/math/libm-test-modf.inc
index e268ba67d0..fa951174ed 100644
--- a/math/libm-test-modf.inc
+++ b/math/libm-test-modf.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_fF_f1_data modf_test_data[] =
   {
     TEST_fF_f1 (modf, plus_infty, 0, plus_infty, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -50,6 +52,12 @@ modf_test (void)
   ALL_RM_TEST (modf, 1, modf_test_data, RUN_TEST_LOOP_fF_f1, END, x);
 }
 
+static void
+do_test (void)
+{
+  modf_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-nearbyint.inc b/math/libm-test-nearbyint.inc
index c5c404f3ca..9e67ea0eb3 100644
--- a/math/libm-test-nearbyint.inc
+++ b/math/libm-test-nearbyint.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data nearbyint_test_data[] =
   {
     TEST_f_f (nearbyint, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -169,6 +171,12 @@ nearbyint_test (void)
   ALL_RM_TEST (nearbyint, 1, nearbyint_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  nearbyint_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-nextafter.inc b/math/libm-test-nextafter.inc
index fdc4e6a5a6..3497554116 100644
--- a/math/libm-test-nextafter.inc
+++ b/math/libm-test-nextafter.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_f_data nextafter_test_data[] =
   {
     TEST_ff_f (nextafter, 0, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -129,6 +131,12 @@ nextafter_test (void)
   ALL_RM_TEST (nextafter, 1, nextafter_test_data, RUN_TEST_LOOP_ff_f, END);
 }
 
+static void
+do_test (void)
+{
+  nextafter_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-nextdown.inc b/math/libm-test-nextdown.inc
index 4d4c6244a1..06d23c2ed8 100644
--- a/math/libm-test-nextdown.inc
+++ b/math/libm-test-nextdown.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data nextdown_test_data[] =
   {
     TEST_f_f (nextdown, minus_zero, -min_subnorm_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -69,6 +71,12 @@ nextdown_test (void)
    argument to TEST_ indicates the literal should not be post-processed by
    gen-libm-test.pl.  */
 
+static void
+do_test (void)
+{
+  nextdown_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-nexttoward.inc b/math/libm-test-nexttoward.inc
index a83e3e24a3..f05cf5fe4b 100644
--- a/math/libm-test-nexttoward.inc
+++ b/math/libm-test-nexttoward.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_fj_f_data nexttoward_test_data[] =
   {
     TEST_fj_f (nexttoward, 0, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -154,6 +156,12 @@ nexttoward_test (void)
   ALL_RM_TEST (nexttoward, 1, nexttoward_test_data, RUN_TEST_LOOP_fj_f, END);
 }
 
+static void
+do_test (void)
+{
+  nexttoward_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-nextup.inc b/math/libm-test-nextup.inc
index 15c1f456d7..8e2130c327 100644
--- a/math/libm-test-nextup.inc
+++ b/math/libm-test-nextup.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data nextup_test_data[] =
   {
     TEST_f_f (nextup, minus_zero, min_subnorm_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -64,6 +66,12 @@ nextup_test (void)
   ALL_RM_TEST (nextup, 1, nextup_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  nextup_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-pow.inc b/math/libm-test-pow.inc
index b78a16a117..b308109bb2 100644
--- a/math/libm-test-pow.inc
+++ b/math/libm-test-pow.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_f_data pow_test_data[] =
   {
     TEST_ff_f (pow, qnan_value, 0, 1, ERRNO_UNCHANGED|NO_TEST_MATHVEC),
@@ -369,6 +371,12 @@ pow_test (void)
   ALL_RM_TEST (pow, 0, pow_test_data, RUN_TEST_LOOP_ff_f, END);
 }
 
+static void
+do_test (void)
+{
+  pow_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-remainder.inc b/math/libm-test-remainder.inc
index 828e94e5e7..ddeba66dab 100644
--- a/math/libm-test-remainder.inc
+++ b/math/libm-test-remainder.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_f_data remainder_test_data[] =
   {
     TEST_ff_f (remainder, 1, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
@@ -186,6 +188,13 @@ drem_test (void)
   ALL_RM_TEST (drem, 1, remainder_test_data, RUN_TEST_LOOP_ff_f, END);
 }
 
+static void
+do_test (void)
+{
+  remainder_test ();
+  drem_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-remquo.inc b/math/libm-test-remquo.inc
index c01c7470ee..c3292cc35c 100644
--- a/math/libm-test-remquo.inc
+++ b/math/libm-test-remquo.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ffI_f1_data remquo_test_data[] =
   {
     /* Bug 6802: errno setting may be missing.  */
@@ -177,6 +179,12 @@ remquo_test (void)
   ALL_RM_TEST (remquo, 1, remquo_test_data, RUN_TEST_LOOP_ffI_f1_mod8, END, x);
 }
 
+static void
+do_test (void)
+{
+  remquo_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-rint.inc b/math/libm-test-rint.inc
index b2eeb28421..56f8bde6bb 100644
--- a/math/libm-test-rint.inc
+++ b/math/libm-test-rint.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data rint_test_data[] =
   {
     TEST_f_f (rint, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -169,6 +171,12 @@ rint_test (void)
   ALL_RM_TEST (rint, 1, rint_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  rint_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-round.inc b/math/libm-test-round.inc
index 3949db40f4..5ae154c2ad 100644
--- a/math/libm-test-round.inc
+++ b/math/libm-test-round.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data round_test_data[] =
   {
     TEST_f_f (round, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -183,6 +185,12 @@ round_test (void)
   ALL_RM_TEST (round, 1, round_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  round_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-roundeven.inc b/math/libm-test-roundeven.inc
index 5dc10ed4a7..4e53214f7f 100644
--- a/math/libm-test-roundeven.inc
+++ b/math/libm-test-roundeven.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data roundeven_test_data[] =
   {
     TEST_f_f (roundeven, plus_zero, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -618,6 +620,12 @@ roundeven_test (void)
   ALL_RM_TEST (roundeven, 1, roundeven_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  roundeven_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-scalb.inc b/math/libm-test-scalb.inc
index 483c8dc7e5..228a93d349 100644
--- a/math/libm-test-scalb.inc
+++ b/math/libm-test-scalb.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_f_data scalb_test_data[] =
   {
     /* Results in this case are unspecified by POSIX, so, for an
@@ -150,6 +152,12 @@ scalb_test (void)
   ALL_RM_TEST (scalb, 1, scalb_test_data, RUN_TEST_LOOP_ff_f, END);
 }
 
+static void
+do_test (void)
+{
+  scalb_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-scalbln.inc b/math/libm-test-scalbln.inc
index 1db2071fe3..3611d635f2 100644
--- a/math/libm-test-scalbln.inc
+++ b/math/libm-test-scalbln.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_fl_f_data scalbln_test_data[] =
   {
     TEST_fl_f (scalbln, 0, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -138,6 +140,12 @@ scalbln_test (void)
   ALL_RM_TEST (scalbln, 1, scalbln_test_data, RUN_TEST_LOOP_fl_f, END);
 }
 
+static void
+do_test (void)
+{
+  scalbln_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-scalbn.inc b/math/libm-test-scalbn.inc
index f20295d7d1..b696b57ff2 100644
--- a/math/libm-test-scalbn.inc
+++ b/math/libm-test-scalbn.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_fi_f_data scalbn_test_data[] =
   {
     TEST_fi_f (scalbn, 0, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -99,6 +101,13 @@ ldexp_test (void)
   ALL_RM_TEST (ldexp, 1, scalbn_test_data, RUN_TEST_LOOP_fi_f, END);
 }
 
+static void
+do_test (void)
+{
+  scalbn_test ();
+  ldexp_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-setpayload.inc b/math/libm-test-setpayload.inc
index 24d543cccf..c5ae6fdb1b 100644
--- a/math/libm-test-setpayload.inc
+++ b/math/libm-test-setpayload.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_Ff_b1_data setpayload_test_data[] =
   {
 #if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
@@ -97,6 +99,12 @@ setpayload_test (void)
   ALL_RM_TEST (setpayload, 1, setpayload_test_data, RUN_TEST_LOOP_Ff_b1, END, x);
 }
 
+static void
+do_test (void)
+{
+  setpayload_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-setpayloadsig.inc b/math/libm-test-setpayloadsig.inc
index 682b825888..5f38f5da15 100644
--- a/math/libm-test-setpayloadsig.inc
+++ b/math/libm-test-setpayloadsig.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_Ff_b1_data setpayloadsig_test_data[] =
   {
 #if HIGH_ORDER_BIT_IS_SET_FOR_SNAN
@@ -97,6 +99,12 @@ setpayloadsig_test (void)
   ALL_RM_TEST (setpayloadsig, 1, setpayloadsig_test_data, RUN_TEST_LOOP_Ff_b1, END, x);
 }
 
+static void
+do_test (void)
+{
+  setpayloadsig_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-signbit.inc b/math/libm-test-signbit.inc
index 3400352aec..f590a84106 100644
--- a/math/libm-test-signbit.inc
+++ b/math/libm-test-signbit.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_i_data signbit_test_data[] =
   {
     TEST_f_b (signbit, 0, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -45,6 +47,12 @@ signbit_test (void)
   ALL_RM_TEST (signbit, 1, signbit_test_data, RUN_TEST_LOOP_f_b_tg, END);
 }
 
+static void
+do_test (void)
+{
+  signbit_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-significand.inc b/math/libm-test-significand.inc
index 6edde8333b..372c076fae 100644
--- a/math/libm-test-significand.inc
+++ b/math/libm-test-significand.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data significand_test_data[] =
   {
     /* significand returns the mantissa of the exponential
@@ -51,6 +53,12 @@ significand_test (void)
   ALL_RM_TEST (significand, 1, significand_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  significand_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-sin.inc b/math/libm-test-sin.inc
index 8723783928..eb3cf40de5 100644
--- a/math/libm-test-sin.inc
+++ b/math/libm-test-sin.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data sin_test_data[] =
   {
     TEST_f_f (sin, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
@@ -34,6 +36,12 @@ sin_test (void)
   ALL_RM_TEST (sin, 0, sin_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  sin_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-sincos.inc b/math/libm-test-sincos.inc
index fb57984956..2652582308 100644
--- a/math/libm-test-sincos.inc
+++ b/math/libm-test-sincos.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_fFF_11_data sincos_test_data[] =
   {
     TEST_fFF_11 (sincos, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
@@ -36,6 +38,12 @@ sincos_test (void)
   ALL_RM_TEST (sincos, 0, sincos_test_data, RUN_TEST_LOOP_fFF_11, END, sin_res, cos_res);
 }
 
+static void
+do_test (void)
+{
+  sincos_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-sinh.inc b/math/libm-test-sinh.inc
index 8675fcef74..1380470fb4 100644
--- a/math/libm-test-sinh.inc
+++ b/math/libm-test-sinh.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data sinh_test_data[] =
   {
     TEST_f_f (sinh, plus_infty, plus_infty, ERRNO_UNCHANGED|NO_TEST_INLINE),
@@ -34,6 +36,12 @@ sinh_test (void)
   ALL_RM_TEST (sinh, 0, sinh_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  sinh_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-sqrt.inc b/math/libm-test-sqrt.inc
index e72222e2c8..c5d2a31d7c 100644
--- a/math/libm-test-sqrt.inc
+++ b/math/libm-test-sqrt.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data sqrt_test_data[] =
   {
     TEST_f_f (sqrt, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -41,6 +43,12 @@ sqrt_test (void)
   ALL_RM_TEST (sqrt, 1, sqrt_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  sqrt_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-support-double.c b/math/libm-test-support-double.c
deleted file mode 100644
index c90925a26d..0000000000
--- a/math/libm-test-support-double.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Support code for testing libm functions (double).
-   Copyright (C) 2017 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/>.  */
-
-#include "test-double.h"
-#include "libm-test-support.c"
diff --git a/math/libm-test-support-float.c b/math/libm-test-support-float.c
deleted file mode 100644
index 842d933370..0000000000
--- a/math/libm-test-support-float.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Support code for testing libm functions (float).
-   Copyright (C) 2017 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/>.  */
-
-#include "test-float.h"
-#include "libm-test-support.c"
diff --git a/math/libm-test-support-ldouble.c b/math/libm-test-support-ldouble.c
deleted file mode 100644
index f1eb9c8e65..0000000000
--- a/math/libm-test-support-ldouble.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Support code for testing libm functions (long double).
-   Copyright (C) 2017 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/>.  */
-
-#include "test-ldouble.h"
-#include "libm-test-support.c"
diff --git a/math/libm-test-tan.inc b/math/libm-test-tan.inc
index 33f64ce010..35681e0fda 100644
--- a/math/libm-test-tan.inc
+++ b/math/libm-test-tan.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data tan_test_data[] =
   {
     TEST_f_f (tan, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
@@ -34,6 +36,12 @@ tan_test (void)
   ALL_RM_TEST (tan, 0, tan_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  tan_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-tanh.inc b/math/libm-test-tanh.inc
index 1ce26a7e3e..f9db69ee06 100644
--- a/math/libm-test-tanh.inc
+++ b/math/libm-test-tanh.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data tanh_test_data[] =
   {
     TEST_f_f (tanh, plus_infty, 1, ERRNO_UNCHANGED|NO_TEST_INLINE),
@@ -34,6 +36,12 @@ tanh_test (void)
   ALL_RM_TEST (tanh, 0, tanh_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  tanh_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-tgamma.inc b/math/libm-test-tgamma.inc
index 3c428fc5ca..4e7debfbd7 100644
--- a/math/libm-test-tgamma.inc
+++ b/math/libm-test-tgamma.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data tgamma_test_data[] =
   {
     TEST_f_f (tgamma, plus_infty, plus_infty, ERRNO_UNCHANGED),
@@ -39,6 +41,12 @@ tgamma_test (void)
   ALL_RM_TEST (tgamma, 0, tgamma_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  tgamma_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-totalorder.inc b/math/libm-test-totalorder.inc
index 3c068da09a..d92e2aa6fd 100644
--- a/math/libm-test-totalorder.inc
+++ b/math/libm-test-totalorder.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_i_data totalorder_test_data[] =
   {
     TEST_ff_b (totalorder, minus_zero, minus_zero, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -263,6 +265,12 @@ totalorder_test (void)
   ALL_RM_TEST (totalorder, 1, totalorder_test_data, RUN_TEST_LOOP_ff_b, END);
 }
 
+static void
+do_test (void)
+{
+  totalorder_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-totalordermag.inc b/math/libm-test-totalordermag.inc
index 480b4eb2f4..2ebf1d0c50 100644
--- a/math/libm-test-totalordermag.inc
+++ b/math/libm-test-totalordermag.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_ff_i_data totalordermag_test_data[] =
   {
     TEST_ff_b (totalordermag, minus_zero, minus_zero, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -263,6 +265,12 @@ totalordermag_test (void)
   ALL_RM_TEST (totalordermag, 1, totalordermag_test_data, RUN_TEST_LOOP_ff_b, END);
 }
 
+static void
+do_test (void)
+{
+  totalordermag_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-trunc.inc b/math/libm-test-trunc.inc
index 97da772e09..88c9128bdb 100644
--- a/math/libm-test-trunc.inc
+++ b/math/libm-test-trunc.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data trunc_test_data[] =
   {
     TEST_f_f (trunc, plus_infty, plus_infty, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
@@ -179,6 +181,12 @@ trunc_test (void)
   ALL_RM_TEST (trunc, 1, trunc_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  trunc_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-ufromfp.inc b/math/libm-test-ufromfp.inc
index 9bedde5dd1..42e6a03f5c 100644
--- a/math/libm-test-ufromfp.inc
+++ b/math/libm-test-ufromfp.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_fiu_U_data ufromfp_test_data[] =
   {
     /* Infinity, NaN and values that are definitely out of range
@@ -6830,6 +6832,12 @@ ufromfp_test (void)
   ALL_RM_TEST (ufromfp, 1, ufromfp_test_data, RUN_TEST_LOOP_fiu_U, END);
 }
 
+static void
+do_test (void)
+{
+  ufromfp_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-ufromfpx.inc b/math/libm-test-ufromfpx.inc
index 532df78ea1..667ca53892 100644
--- a/math/libm-test-ufromfpx.inc
+++ b/math/libm-test-ufromfpx.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_fiu_U_data ufromfpx_test_data[] =
   {
     /* Infinity, NaN and values that are definitely out of range
@@ -6830,6 +6832,12 @@ ufromfpx_test (void)
   ALL_RM_TEST (ufromfpx, 1, ufromfpx_test_data, RUN_TEST_LOOP_fiu_U, END);
 }
 
+static void
+do_test (void)
+{
+  ufromfpx_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-y0.inc b/math/libm-test-y0.inc
index 812d0b203c..4ad2cd7807 100644
--- a/math/libm-test-y0.inc
+++ b/math/libm-test-y0.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data y0_test_data[] =
   {
     /* y0 is the Bessel function of the second kind of order 0 */
@@ -41,6 +43,12 @@ y0_test (void)
   ALL_RM_TEST (y0, 0, y0_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  y0_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-y1.inc b/math/libm-test-y1.inc
index b9c0f57e31..ccb0d1a17b 100644
--- a/math/libm-test-y1.inc
+++ b/math/libm-test-y1.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_f_f_data y1_test_data[] =
   {
     /* y1 is the Bessel function of the second kind of order 1 */
@@ -41,6 +43,12 @@ y1_test (void)
   ALL_RM_TEST (y1, 0, y1_test_data, RUN_TEST_LOOP_f_f, END);
 }
 
+static void
+do_test (void)
+{
+  y1_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test-yn.inc b/math/libm-test-yn.inc
index 7e17d59475..dec0b2fe3f 100644
--- a/math/libm-test-yn.inc
+++ b/math/libm-test-yn.inc
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include "libm-test-driver.c"
+
 static const struct test_if_f_data yn_test_data[] =
   {
     /* yn is the Bessel function of the second kind of order n */
@@ -119,6 +121,12 @@ yn_test (void)
   ALL_RM_TEST (yn, 0, yn_test_data, RUN_TEST_LOOP_if_f, END);
 }
 
+static void
+do_test (void)
+{
+  yn_test ();
+}
+
 /*
  * Local Variables:
  * mode:c
diff --git a/math/libm-test.inc b/math/libm-test.inc
deleted file mode 100644
index ee5c0fe5a2..0000000000
--- a/math/libm-test.inc
+++ /dev/null
@@ -1,319 +0,0 @@
-/* Copyright (C) 1997-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Andreas Jaeger <aj@suse.de>, 1997.
-
-   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/>.  */
-
-/* The bulk of the implementation, other than the tests of individual
-   functions, is in a separate file.  */
-#include "libm-test-driver.c"
-
-/****************************************************************************
-  Tests for single functions of libm.
-  Please keep them alphabetically sorted!
-****************************************************************************/
-
-#include "libm-test-acos.c"
-#include "libm-test-acosh.c"
-#include "libm-test-asin.c"
-#include "libm-test-asinh.c"
-#include "libm-test-atan.c"
-#include "libm-test-atan2.c"
-#include "libm-test-atanh.c"
-#include "libm-test-cabs.c"
-#include "libm-test-cacos.c"
-#include "libm-test-cacosh.c"
-#include "libm-test-canonicalize.c"
-#include "libm-test-carg.c"
-#include "libm-test-casin.c"
-#include "libm-test-casinh.c"
-#include "libm-test-catan.c"
-#include "libm-test-catanh.c"
-#include "libm-test-cbrt.c"
-#include "libm-test-ccos.c"
-#include "libm-test-ccosh.c"
-#include "libm-test-ceil.c"
-#include "libm-test-cexp.c"
-#include "libm-test-cimag.c"
-#include "libm-test-clog.c"
-#include "libm-test-clog10.c"
-#include "libm-test-conj.c"
-#include "libm-test-copysign.c"
-#include "libm-test-cos.c"
-#include "libm-test-cosh.c"
-#include "libm-test-cpow.c"
-#include "libm-test-cproj.c"
-#include "libm-test-creal.c"
-#include "libm-test-csin.c"
-#include "libm-test-csinh.c"
-#include "libm-test-csqrt.c"
-#include "libm-test-ctan.c"
-#include "libm-test-ctanh.c"
-#include "libm-test-erf.c"
-#include "libm-test-erfc.c"
-#include "libm-test-exp.c"
-#include "libm-test-exp10.c"
-#include "libm-test-exp2.c"
-#include "libm-test-expm1.c"
-#include "libm-test-fabs.c"
-#include "libm-test-fdim.c"
-#include "libm-test-floor.c"
-#include "libm-test-fma.c"
-#include "libm-test-fmax.c"
-#include "libm-test-fmaxmag.c"
-#include "libm-test-fmin.c"
-#include "libm-test-fminmag.c"
-#include "libm-test-fmod.c"
-#include "libm-test-fpclassify.c"
-#include "libm-test-frexp.c"
-#include "libm-test-fromfp.c"
-#include "libm-test-fromfpx.c"
-#include "libm-test-getpayload.c"
-#include "libm-test-hypot.c"
-#include "libm-test-ilogb.c"
-#include "libm-test-iscanonical.c"
-#include "libm-test-iseqsig.c"
-#include "libm-test-isfinite.c"
-#include "libm-test-isgreater.c"
-#include "libm-test-isgreaterequal.c"
-#include "libm-test-isinf.c"
-#include "libm-test-isless.c"
-#include "libm-test-islessequal.c"
-#include "libm-test-islessgreater.c"
-#include "libm-test-isnan.c"
-#include "libm-test-isnormal.c"
-#include "libm-test-issignaling.c"
-#include "libm-test-issubnormal.c"
-#include "libm-test-isunordered.c"
-#include "libm-test-iszero.c"
-#include "libm-test-j0.c"
-#include "libm-test-j1.c"
-#include "libm-test-jn.c"
-#include "libm-test-lgamma.c"
-#include "libm-test-llogb.c"
-#include "libm-test-llrint.c"
-#include "libm-test-llround.c"
-#include "libm-test-log.c"
-#include "libm-test-log10.c"
-#include "libm-test-log1p.c"
-#include "libm-test-log2.c"
-#include "libm-test-logb.c"
-#include "libm-test-lrint.c"
-#include "libm-test-lround.c"
-#include "libm-test-modf.c"
-#include "libm-test-nearbyint.c"
-#include "libm-test-nextafter.c"
-#include "libm-test-nextdown.c"
-#include "libm-test-nexttoward.c"
-#include "libm-test-nextup.c"
-#include "libm-test-pow.c"
-#include "libm-test-remainder.c"
-#include "libm-test-remquo.c"
-#include "libm-test-rint.c"
-#include "libm-test-round.c"
-#include "libm-test-roundeven.c"
-#include "libm-test-scalb.c"
-#include "libm-test-scalbln.c"
-#include "libm-test-scalbn.c"
-#include "libm-test-setpayload.c"
-#include "libm-test-setpayloadsig.c"
-#include "libm-test-signbit.c"
-#include "libm-test-significand.c"
-#include "libm-test-sin.c"
-#include "libm-test-sincos.c"
-#include "libm-test-sinh.c"
-#include "libm-test-sqrt.c"
-#include "libm-test-tan.c"
-#include "libm-test-tanh.c"
-#include "libm-test-tgamma.c"
-#include "libm-test-totalorder.c"
-#include "libm-test-totalordermag.c"
-#include "libm-test-trunc.c"
-#include "libm-test-ufromfp.c"
-#include "libm-test-ufromfpx.c"
-#include "libm-test-y0.c"
-#include "libm-test-y1.c"
-#include "libm-test-yn.c"
-
-static void
-do_test (void)
-{
-  /* Keep the tests a wee bit ordered (according to ISO C99).  */
-  /* Classification macros:  */
-  finite_test ();
-  fpclassify_test ();
-  iscanonical_test ();
-  isfinite_test ();
-  isinf_test ();
-  isnan_test ();
-  isnormal_test ();
-  issignaling_test ();
-  issubnormal_test ();
-  iszero_test ();
-  signbit_test ();
-
-  /* Trigonometric functions:  */
-  acos_test ();
-  asin_test ();
-  atan_test ();
-  atan2_test ();
-  cos_test ();
-  sin_test ();
-  sincos_test ();
-  tan_test ();
-
-  /* Hyperbolic functions:  */
-  acosh_test ();
-  asinh_test ();
-  atanh_test ();
-  cosh_test ();
-  sinh_test ();
-  tanh_test ();
-
-  /* Exponential and logarithmic functions:  */
-  exp_test ();
-  exp10_test ();
-  exp2_test ();
-  expm1_test ();
-  frexp_test ();
-  ldexp_test ();
-  log_test ();
-  log10_test ();
-  log1p_test ();
-  log2_test ();
-  logb_test ();
-  modf_test ();
-  pow10_test ();
-  ilogb_test ();
-  llogb_test ();
-  scalb_test ();
-  scalbn_test ();
-  scalbln_test ();
-  significand_test ();
-
-  /* Power and absolute value functions:  */
-  cbrt_test ();
-  fabs_test ();
-  hypot_test ();
-  pow_test ();
-  sqrt_test ();
-
-  /* Error and gamma functions:  */
-  erf_test ();
-  erfc_test ();
-  gamma_test ();
-  lgamma_test ();
-  tgamma_test ();
-
-  /* Nearest integer functions:  */
-  ceil_test ();
-  floor_test ();
-  nearbyint_test ();
-  rint_test ();
-  lrint_test ();
-  llrint_test ();
-  round_test ();
-  roundeven_test ();
-  lround_test ();
-  llround_test ();
-  trunc_test ();
-  fromfp_test ();
-  fromfpx_test ();
-  ufromfp_test ();
-  ufromfpx_test ();
-
-  /* Remainder functions:  */
-  drem_test ();
-  fmod_test ();
-  remainder_test ();
-  remquo_test ();
-
-  /* Manipulation functions:  */
-  copysign_test ();
-  nextup_test();
-  nextdown_test();
-  nextafter_test ();
-  nexttoward_test ();
-
-  /* maximum, minimum and positive difference functions */
-  fdim_test ();
-  fmax_test ();
-  fmaxmag_test ();
-  fmin_test ();
-  fminmag_test ();
-
-  /* Multiply and add:  */
-  fma_test ();
-
-  /* Comparison macros:  */
-  iseqsig_test ();
-  isgreater_test ();
-  isgreaterequal_test ();
-  isless_test ();
-  islessequal_test ();
-  islessgreater_test ();
-  isunordered_test ();
-
-  /* Total order functions:  */
-  totalorder_test ();
-  totalordermag_test ();
-
-  /* Canonicalize functions:  */
-  canonicalize_test ();
-
-  /* NaN functions:  */
-  getpayload_test ();
-  setpayload_test ();
-  setpayloadsig_test ();
-
-  /* Complex functions:  */
-  cabs_test ();
-  cacos_test ();
-  cacosh_test ();
-  carg_test ();
-  casin_test ();
-  casinh_test ();
-  catan_test ();
-  catanh_test ();
-  ccos_test ();
-  ccosh_test ();
-  cexp_test ();
-  cimag_test ();
-  clog10_test ();
-  clog_test ();
-  conj_test ();
-  cpow_test ();
-  cproj_test ();
-  creal_test ();
-  csin_test ();
-  csinh_test ();
-  csqrt_test ();
-  ctan_test ();
-  ctanh_test ();
-
-  /* Bessel functions:  */
-  j0_test ();
-  j1_test ();
-  jn_test ();
-  y0_test ();
-  y1_test ();
-  yn_test ();
-}
-
-/*
- * Local Variables:
- * mode:c
- * End:
- */
diff --git a/math/test-double-finite.c b/math/test-double-finite.c
deleted file mode 100644
index c181925ffb..0000000000
--- a/math/test-double-finite.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright (C) 1997-2017 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/>.  */
-
-#include "test-double.h"
-#include "test-math-finite.h"
-#include "test-math-no-inline.h"
-#include "test-math-scalar.h"
-
-#include "libm-test.c"
diff --git a/math/test-double-vlen2.h b/math/test-double-vlen2.h
index 06571cf65c..39c2e4dfb9 100644
--- a/math/test-double-vlen2.h
+++ b/math/test-double-vlen2.h
@@ -24,5 +24,3 @@
 
 #define VEC_SUFF _vlen2
 #define VEC_LEN 2
-
-#define FUNC_TEST(function) function ## _VEC_SUFF
diff --git a/math/test-double-vlen4.h b/math/test-double-vlen4.h
index 47254703b6..37b67bc56c 100644
--- a/math/test-double-vlen4.h
+++ b/math/test-double-vlen4.h
@@ -24,5 +24,3 @@
 
 #define VEC_SUFF _vlen4
 #define VEC_LEN 4
-
-#define FUNC_TEST(function) function ## _VEC_SUFF
diff --git a/math/test-double-vlen8.h b/math/test-double-vlen8.h
index a1254ae396..0dce3e28aa 100644
--- a/math/test-double-vlen8.h
+++ b/math/test-double-vlen8.h
@@ -24,5 +24,3 @@
 
 #define VEC_SUFF _vlen8
 #define VEC_LEN 8
-
-#define FUNC_TEST(function) function ## _VEC_SUFF
diff --git a/math/test-double.c b/math/test-double.c
deleted file mode 100644
index 3672370bcb..0000000000
--- a/math/test-double.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (C) 1997-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Andreas Jaeger <aj@suse.de>, 1997.
-
-   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/>.  */
-
-#include "test-double.h"
-#include "test-math-no-finite.h"
-#include "test-math-no-inline.h"
-#include "test-math-errno.h"
-#include "test-math-scalar.h"
-
-#include "libm-test.c"
diff --git a/math/test-float-finite.c b/math/test-float-finite.c
deleted file mode 100644
index 09ea1e948b..0000000000
--- a/math/test-float-finite.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright (C) 1997-2017 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/>.  */
-
-#include "test-float.h"
-#include "test-math-finite.h"
-#include "test-math-no-inline.h"
-#include "test-math-scalar.h"
-
-#include "libm-test.c"
diff --git a/math/test-float-vlen16.h b/math/test-float-vlen16.h
index b6d209e61c..829ceabf66 100644
--- a/math/test-float-vlen16.h
+++ b/math/test-float-vlen16.h
@@ -24,5 +24,3 @@
 
 #define VEC_SUFF _vlen16
 #define VEC_LEN 16
-
-#define FUNC_TEST(function) function ## f ## _VEC_SUFF
diff --git a/math/test-float-vlen4.h b/math/test-float-vlen4.h
index 4bac669d21..acde7775ea 100644
--- a/math/test-float-vlen4.h
+++ b/math/test-float-vlen4.h
@@ -24,5 +24,3 @@
 
 #define VEC_SUFF _vlen4
 #define VEC_LEN 4
-
-#define FUNC_TEST(function) function ## f ## _VEC_SUFF
diff --git a/math/test-float-vlen8.h b/math/test-float-vlen8.h
index e72257ceee..a09bd9fecd 100644
--- a/math/test-float-vlen8.h
+++ b/math/test-float-vlen8.h
@@ -24,5 +24,3 @@
 
 #define VEC_SUFF _vlen8
 #define VEC_LEN 8
-
-#define FUNC_TEST(function) function ## f ## _VEC_SUFF
diff --git a/math/test-float.c b/math/test-float.c
deleted file mode 100644
index 25ba35a9d1..0000000000
--- a/math/test-float.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (C) 1997-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Andreas Jaeger <aj@suse.de>, 1997.
-
-   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/>.  */
-
-#include "test-float.h"
-#include "test-math-no-finite.h"
-#include "test-math-no-inline.h"
-#include "test-math-errno.h"
-#include "test-math-scalar.h"
-
-#include "libm-test.c"
diff --git a/math/test-idouble.c b/math/test-idouble.c
deleted file mode 100644
index 944d981cc2..0000000000
--- a/math/test-idouble.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright (C) 1997-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Andreas Jaeger <aj@suse.de>, 1997.
-
-   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/>.  */
-
-#include "test-double.h"
-#include "test-math-inline.h"
-#include "test-math-scalar.h"
-
-#include "libm-test.c"
diff --git a/math/test-ifloat.c b/math/test-ifloat.c
deleted file mode 100644
index 20c028e1a3..0000000000
--- a/math/test-ifloat.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright (C) 1997-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Andreas Jaeger <aj@suse.de>, 1997.
-
-   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/>.  */
-
-#include "test-float.h"
-#include "test-math-inline.h"
-#include "test-math-scalar.h"
-
-#include "libm-test.c"
diff --git a/math/test-ildouble.c b/math/test-ildouble.c
deleted file mode 100644
index ddba3e4722..0000000000
--- a/math/test-ildouble.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright (C) 1997-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Andreas Jaeger <aj@suse.de>, 1997.
-
-   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/>.  */
-
-#include "test-ldouble.h"
-#include "test-math-inline.h"
-#include "test-math-scalar.h"
-
-#include "libm-test.c"
diff --git a/math/test-ldouble-finite.c b/math/test-ldouble-finite.c
deleted file mode 100644
index 47cac2c71e..0000000000
--- a/math/test-ldouble-finite.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright (C) 1997-2017 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/>.  */
-
-#include "test-ldouble.h"
-#include "test-math-finite.h"
-#include "test-math-no-inline.h"
-#include "test-math-scalar.h"
-
-#include "libm-test.c"
diff --git a/math/test-ldouble.c b/math/test-ldouble.c
deleted file mode 100644
index 209a81683f..0000000000
--- a/math/test-ldouble.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (C) 1997-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Andreas Jaeger <aj@suse.de>, 1997.
-
-   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/>.  */
-
-#include "test-ldouble.h"
-#include "test-math-no-finite.h"
-#include "test-math-no-inline.h"
-#include "test-math-errno.h"
-#include "test-math-scalar.h"
-
-#include "libm-test.c"
diff --git a/math/test-math-vector.h b/math/test-math-vector.h
index 8a9ae9caa1..424fef6c60 100644
--- a/math/test-math-vector.h
+++ b/math/test-math-vector.h
@@ -25,6 +25,7 @@
 #define CONCAT(a, b) CNCT (a, b)
 
 #define WRAPPER_NAME(function) CONCAT (function, VEC_SUFF)
+#define FUNC_TEST(function) WRAPPER_NAME (FUNC (function))
 
 /* This macro is used in VECTOR_WRAPPER macros for vector tests.  */
 #define TEST_VEC_LOOP(vec, len) 				\
@@ -51,7 +52,7 @@
     }								\
   while (0)
 
-#define WRAPPER_DECL(function) extern FLOAT function (FLOAT);
+#define WRAPPER_DECL_f(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 *);