aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2017-10-11 17:46:19 +0000
committerJoseph Myers <joseph@codesourcery.com>2017-10-11 17:46:19 +0000
commitbc9620d040b7494f457ccb750c9797b47ed76ada (patch)
treeb2a800a1b6bc16ee769881d38b4c160a4bd8b92b /math/Makefile
parentLinux: Consolidate {RTLD_}SINGLE_THREAD_P definition (diff)
downloadglibc-bc9620d040b7494f457ccb750c9797b47ed76ada.tar.gz
glibc-bc9620d040b7494f457ccb750c9797b47ed76ada.tar.bz2
glibc-bc9620d040b7494f457ccb750c9797b47ed76ada.zip
Run libm long double tests for long double = double.
All interfaces in the glibc API ought to be covered by the testsuite, even where they alias other interfaces. This patch arranges for libm tests to be run for long double when it aliases double; previously those tests were run only for the floating-point types with distinct formats. The long double tests are made to use the double ulps values in this case, as having a separate duplicate set of ulps for them seems unnecessary; to accommodate that, the test-<type>.h headers now specify the macro indexing into the ulps array explicitly instead of having it computed from PREFIX. Nothing special is done about vector function tests. None are supported for any long double = double platforms, and supporting vector functions for a type alias such as _Float32 would not simply fall out of adding the scalar aliases for that type - it would require vector function wrappers like those for *_finite (or, better, a new GCC feature to allow specifying the asm name for vector functions independently of that for scalar ones, as previously discussed), so it seems reasonable to require the sysdeps makefile setting of libmvec-tests to be updated if any such tests are to be run for type aliases. Tested for x86_64 and arm. * math/Makefile (test-types-basic): New variable. (test-types): Likewise. (libm-test-support): Use $(test-types) instead of $(types). (libm-tests-base-normal): Likewise. (libm-tests-base-finite): Likewise. (libm-tests-base-inline): Likewise. (generated): Likewise. ($(objpfx)libm-test-support-$(t).c): Likewise. (libm-tests-for-type iterator): Likewise. (libm-test-support iterator): Likewise. * math/libm-test-support.c (ulp_i_idx): Use ULP_I_IDX. (ulp_idx): Use ULP_IDX. * math/test-ldouble.h: Include <float.h>. (TYPE_STR): Define conditional on [LDBL_MANT_DIG == DBL_MANT_DIG]. (ULP_IDX): New macro. (ULP_I_IDX): Likewise. * math/test-double.h (ULP_IDX): Likewise. (ULP_I_IDX): Likewise. * math/test-float.h (ULP_IDX): Likewise. (ULP_I_IDX): Likewise. * math/test-float128.h (ULP_IDX): Likewise. (ULP_I_IDX): Likewise.
Diffstat (limited to 'math/Makefile')
-rw-r--r--math/Makefile21
1 files changed, 13 insertions, 8 deletions
diff --git a/math/Makefile b/math/Makefile
index d4f9e6b6e9..4014471f74 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -102,6 +102,10 @@ libm-compat-calls = \
# after the Rules makefile has been parsed.
types-basic = $(type-ldouble-$(long-double-fcts)) double float
+# Like types, but includes types whose functions alias those for
+# another type.
+test-types-basic = ldouble double float
+
# long double support
type-ldouble-suffix := l
type-ldouble-routines := t_sincosl k_sincosl s_iscanonicall
@@ -123,6 +127,7 @@ type-float128-suffix := f128
type-float128-routines := t_sincosf128 k_sincosf128
type-float128-yes := float128
types = $(types-basic) $(type-float128-$(float128-fcts))
+test-types = $(test-types-basic) $(type-float128-$(float128-fcts))
# For each of the basic types (float, double, long double), replace the
# occurrences of 'F' in arg 1 with the appropriate suffix for the type.
@@ -214,7 +219,7 @@ endif
ifneq (no,$(PERL))
libm-vec-tests = $(addprefix test-,$(libmvec-tests))
-libm-test-support = $(foreach t,$(types),libm-test-support-$(t))
+libm-test-support = $(foreach t,$(test-types),libm-test-support-$(t))
test-extras += $(libm-test-support)
extra-test-objs += $(addsuffix .o, $(libm-test-support))
libm-vec-test-wrappers = $(addsuffix -wrappers, $(libm-vec-tests))
@@ -250,9 +255,9 @@ 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)
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-normal = $(foreach t,$(test-types),test-$(t))
+libm-tests-base-finite = $(foreach t,$(test-types),test-$(t)-finite)
+libm-tests-base-inline = $(foreach t,$(test-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),\
@@ -277,7 +282,7 @@ libm-tests.o = $(addsuffix .o,$(libm-tests))
tests += $(libm-tests)
generated += $(addsuffix .c,$(libm-tests)) \
- $(foreach t,$(types),libm-test-support-$(t).c)
+ $(foreach t,$(test-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))
@@ -448,7 +453,7 @@ $(foreach t,$(libm-tests-vector),$(objpfx)$(t).c): $(objpfx)test-%.c:
echo "#include <libm-test-$$func.c>"; \
) > $@
-$(foreach t,$(types),\
+$(foreach t,$(test-types),\
$(objpfx)libm-test-support-$(t).c): $(objpfx)libm-test-support-%.c:
( \
echo "#include <test-$*.h>"; \
@@ -496,13 +501,13 @@ define o-iterator-doit
$(addprefix $(objpfx),\
$(call libm-tests-for-type,$(o))): $(objpfx)libm-test-support-$(o).o
endef
-object-suffixes-left := $(types)
+object-suffixes-left := $(test-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)
+object-suffixes-left := $(test-types)
include $(o-iterator)
# Run the math programs to automatically generate ULPs files.