This series is a first stab at (1) having a test suite for our floating point (FP) implementation, and (2) leveraging the host FPU to speed up guest FP operations whenever possible.
- Patch 1 is a set of simple microbenchmarks to isolate the performance of particular FP operations. - Patch 2 adds fp-test, a floating point test suite. Note that I'm hacking around target poisoning to be able to include softfloat headers. I am not defining any TARGET_* cpu, so softfloat-specialize will take the defaults. The commit message has more info on how fp-test can be used to test the full FP implementation of a guest CPU. - Patch 3 fixes a bug in FP that was identified with fp-test. The bug is very minor, but we might want to get this fixed in 2.12. - Patches 5-6 add some helpers to be used later. Note that the functions there return bools, not integers like the functions around them. [wasn't sure which way to go for.] - Patch 8 introduces hostfloat, as a separate, GPL'ed file. The commit message and a comment in the file document the assumptions and possible pitfalls of this approach. - Patches 9-14 implement some common FP operations in hostfloat. For performance numbers see the last patch. BTW checkpatch reports some warnings, but they're false positives so please ignore them. This series applies on top of f6d81cde ("Merge remote-tracking branch 'remotes/stsquad/tags/pull-shippable-disable-ppc-080318-1' into staging", 2018-03-08). You can fetch the series from: https://github.com/cota/qemu/tree/hostfloat-v1 Feedback appreciated! Thanks, Emilio diffstat: Makefile.target | 2 +- configure | 2 + fpu/hostfloat.c | 342 +++++++++++++ fpu/softfloat.c | 97 ++-- include/fpu/hostfloat.h | 34 ++ include/fpu/softfloat.h | 53 +- target/m68k/Makefile.objs | 2 +- tests/.gitignore | 2 + tests/Makefile.include | 3 +- tests/fp-bench.c | 290 +++++++++++ tests/fp-test/.gitignore | 3 + tests/fp-test/Makefile | 34 ++ tests/fp-test/fp-test.c | 1183 ++++++++++++++++++++++++++++++++++++++++++++ tests/fp-test/muladd.fptest | 51 ++ 14 files changed, 2035 insertions(+), 63 deletions(-)