[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 09/11] tests/Makefile: add floating point tests
From: |
Alex Bennée |
Subject: |
[Qemu-devel] [PATCH v3 09/11] tests/Makefile: add floating point tests |
Date: |
Tue, 22 Jan 2019 21:50:14 +0000 |
Wire up test/fp-test into the main testing Makefile. Currently we skip
some of the extF80 and f128 related tests. Once we re-factor and fix
these tests the plumbing should get simpler.
Signed-off-by: Alex Bennée <address@hidden>
---
v3
- tweak test function
- always call fp-test build
---
tests/Makefile.include | 120 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 120 insertions(+)
diff --git a/tests/Makefile.include b/tests/Makefile.include
index 4eea38ae99..f123616bc7 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -880,6 +880,126 @@ check-report-unit.tap: $(check-unit-y)
check-report.tap: $(patsubst %,check-report-qtest-%.tap, $(QTEST_TARGETS))
check-report-unit.tap
$(call quiet-command,./scripts/tap-merge.py $^ > $@,"GEN","$@")
+# FPU Emulation tests (aka softfloat)
+#
+# As we still have some places that need fixing the rules are a little
+# more complex than they need to be and have to override some of the
+# generic Makefile expansions. Once we are cleanly passing all
+# the tests we can simplify the make syntax.
+
+FP_TEST_BIN=$(BUILD_DIR)/tests/fp/fp-test
+
+# the build dir is created by configure
+.PHONY: $(FP_TEST_BIN)
+$(FP_TEST_BIN): $(BUILD_DIR)/tests/fp fpu/softfloat.c
+ $(call quiet-command, \
+ cd $(BUILD_DIR)/tests/fp && make, \
+ "BUILD", $<)
+
+# The full test suite can take a bit of time, default to a quick run
+ifeq ($(SPEED), quick)
+FP_TL=-l 1
+else
+FP_TL=-l 2 -r all
+endif
+
+# $1 = tests, $2 = description
+test-softfloat = $(call quiet-command, \
+ cd $(BUILD_DIR)/tests/fp && \
+ ./fp-test -s $(FP_TL) $1 > $2.out 2>&1 || \
+ (cat $2.out && exit 1;), \
+ "FLOAT TEST", $2)
+
+# Conversion Routines:
+# FIXME: i32_to_extF80 (broken), i64_to_extF80 (broken)
+# ui32_to_f128 (not implemented), f128_to_ui32 (not implemented)
+# extF80_roundToInt (broken)
+#
+check-softfloat-conv: $(FP_TEST_BIN)
+ $(call test-softfloat, \
+ i32_to_f16 i64_to_f16 \
+ i32_to_f32 i64_to_f32 \
+ i32_to_f64 i64_to_f64 \
+ i32_to_f128 i64_to_f128, int-to-float)
+ $(call test-softfloat, \
+ ui32_to_f16 ui64_to_f16 \
+ ui32_to_f32 ui64_to_f32 \
+ ui32_to_f64 ui64_to_f64 \
+ ui64_to_f128, uint-to-float)
+ $(call test-softfloat, \
+ f16_to_i32 f16_to_i32_r_minMag \
+ f32_to_i32 f32_to_i32_r_minMag \
+ f64_to_i32 f64_to_i32_r_minMag \
+ extF80_to_i32 extF80_to_i32_r_minMag \
+ f128_to_i32 f128_to_i32_r_minMag \
+ f16_to_i64 f16_to_i64_r_minMag \
+ f32_to_i64 f32_to_i64_r_minMag \
+ f64_to_i64 f64_to_i64_r_minMag \
+ extF80_to_i64 extF80_to_i64_r_minMag \
+ f128_to_i64 f128_to_i64_r_minMag, \
+ float-to-int)
+ $(call test-softfloat, \
+ f16_to_ui32 f16_to_ui32_r_minMag \
+ f32_to_ui32 f32_to_ui32_r_minMag \
+ f64_to_ui32 f64_to_ui32_r_minMag \
+ f16_to_ui64 f16_to_ui64_r_minMag \
+ f32_to_ui64 f32_to_ui64_r_minMag \
+ f64_to_ui64 f64_to_ui64_r_minMag, \
+ float-to-uint)
+ $(call test-softfloat, \
+ f16_roundToInt f32_roundToInt \
+ f64_roundToInt f128_roundToInt, \
+ round-to-integer)
+
+# Generic rule for all float operations
+#
+# Some patterns are overidden due to broken or missing tests.
+# Hopefully these can be removed over time.
+
+check-softfloat-%: $(FP_TEST_BIN)
+ $(call test-softfloat, f16_$* f32_$* f64_$* extF80_$* f128_$*, $*)
+
+# Float Compare routines
+SF_COMPARE_OPS=eq eq_signaling le le_quiet lt_quiet
+SF_COMPARE_RULES=$(patsubst %,check-softfloat-%, $(SF_COMPARE_OPS))
+
+# FIXME: extF80_le_quiet (broken)
+check-softfloat-le_quiet: $(FP_TEST_BIN)
+ $(call test-softfloat, \
+ f16_le_quiet f32_le_quiet f64_le_quiet \
+ f128_le_quiet, \
+ le_quiet)
+
+# FIXME: extF80_lt_quiet (broken)
+check-softfloat-lt_quiet: $(FP_TEST_BIN)
+ $(call test-softfloat, \
+ f16_lt_quiet f32_lt_quiet f64_lt_quiet \
+ f128_lt_quiet, \
+ lt_quiet)
+
+.PHONY: check-softfloat-compare
+check-softfloat-compare: $(SF_COMPARE_RULES)
+
+# Math Operations
+
+# FIXME: extF80_mulAdd (missing)
+check-softfloat-mulAdd: $(FP_TEST_BIN)
+ $(call test-softfloat, \
+ f16_mulAdd f32_mulAdd f64_mulAdd f128_mulAdd, \
+ mulAdd)
+
+# FIXME: extF80_rem (broken)
+check-softfloat-rem: $(FP_TEST_BIN)
+ $(call test-softfloat, \
+ f16_rem f32_rem f64_rem f128_rem, \
+ rem)
+
+SF_MATH_OPS=add sub mul mulAdd div rem sqrt
+SF_MATH_RULES=$(patsubst %,check-softfloat-%, $(SF_MATH_OPS))
+
+.PHONY: check-softfloat-ops
+check-softfloat-ops: $(SF_MATH_RULES)
+
# Per guest TCG tests
LINUX_USER_TARGETS=$(filter %-linux-user,$(TARGET_DIRS))
--
2.17.1
- [Qemu-devel] [PATCH v3 00/11] current fpu/next queue (tests & build fix), Alex Bennée, 2019/01/22
- [Qemu-devel] [PATCH v3 01/11] fp-bench: fix update_random_ops, Alex Bennée, 2019/01/22
- [Qemu-devel] [PATCH v3 03/11] berkeley-testfloat-3: pull changes, Alex Bennée, 2019/01/22
- [Qemu-devel] [PATCH v3 04/11] tests/fp/Makefile: do not use gcc-only -W flags, Alex Bennée, 2019/01/22
- [Qemu-devel] [PATCH v3 02/11] fp-bench: remove wrong exponent raise in fill_random, Alex Bennée, 2019/01/22
- [Qemu-devel] [PATCH v3 08/11] include/fpu/softfloat: Fix compilation with Clang on s390x, Alex Bennée, 2019/01/22
- [Qemu-devel] [PATCH v3 10/11] scripts/archive-source: include softfloat tests, Alex Bennée, 2019/01/22
- [Qemu-devel] [PATCH v3 06/11] tests/fp/platform.h: include config-host.h, Alex Bennée, 2019/01/22
- [Qemu-devel] [PATCH v3 07/11] softfloat: enforce softfloat if the host's FMA is broken, Alex Bennée, 2019/01/22
- [Qemu-devel] [PATCH v3 09/11] tests/Makefile: add floating point tests,
Alex Bennée <=
- [Qemu-devel] [PATCH v3 05/11] fp-test: fix signature of slow_clear_flags and qemu_clear_flags, Alex Bennée, 2019/01/22
- [Qemu-devel] [PATCH v3 11/11] tests/Makfile: add check-softfloat rule, Alex Bennée, 2019/01/22
- Re: [Qemu-devel] [PATCH v3 00/11] current fpu/next queue (tests & build fix), no-reply, 2019/01/31