From f0c738026d7b63a3556fe440530a1878376a0268 Mon Sep 17 00:00:00 2001 From: Dirk Steinke Date: Mon, 25 Aug 2014 16:01:54 +0200 Subject: [PATCH] Added implementation of DumpBitmap. Changed reference to MachineInfo in MachineDumper to const. Output thrown const char* in unittest loop if possible. --- include/jitcs_dumper.h | 2 +- makefile | 2 +- src/src/adt_bitmap.cpp | 14 ++++++++++++++ src/src/dumper.cpp | 2 +- tests/test_unittest.cpp | 3 +++ 5 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 src/src/adt_bitmap.cpp diff --git a/include/jitcs_dumper.h b/include/jitcs_dumper.h index db36c65..c2d69f2 100644 --- a/include/jitcs_dumper.h +++ b/include/jitcs_dumper.h @@ -65,7 +65,7 @@ public: class MachineDumper : public IDumper { public: - MachineDumper(IDumper&, IMachineInfo&); + MachineDumper(IDumper&, const IMachineInfo&); private: MachineDumper() = delete; MachineDumper(const MachineDumper&) = delete; diff --git a/makefile b/makefile index 9332c86..677a4cf 100644 --- a/makefile +++ b/makefile @@ -12,7 +12,7 @@ SRC_SRC = cpu.cpp dumper.cpp tmpalloc.cpp memmgr.cpp \ bblock.cpp bblock_impl.cpp function.cpp function_impl.cpp \ callingconvention.cpp callingconvention_impl.cpp \ host.cpp machine.cpp virtualregister.cpp spillslotinfo.cpp \ - cfg_analysis.cpp codegenerator.cpp dfg_analysis.cpp + cfg_analysis.cpp codegenerator.cpp dfg_analysis.cpp adt_bitmap.cpp SRC_X86 = x86_32_callingconvention.cpp x86_64_callingconvention.cpp \ x86_32_machine.cpp x86_64_machine.cpp x86_32_regs.cpp x86_64_regs.cpp \ x86_32_insinfo.cpp x86_64_insinfo.cpp x86_32_dumper.cpp x86_64_dumper.cpp \ diff --git a/src/src/adt_bitmap.cpp b/src/src/adt_bitmap.cpp new file mode 100644 index 0000000..ba6098f --- /dev/null +++ b/src/src/adt_bitmap.cpp @@ -0,0 +1,14 @@ +#include "jitcs_int_adt_bitmap.h" +#include "jitcs_dumper.h" + +void jitcs::DumpBitmap(IDumper& o, const size_t* _data, size_t _nbits) { + o.writef("%d bits, set:", _nbits); + for (size_t i = 0, n = _nbits; i * sizeof(size_t) * 8 < n; ++i) { + if (_data[i] == 0) continue; + for (size_t j = 0, m = sizeof(size_t) * 8; j < m; ++j) { + if (_data[i] & (1 << j)) { + o.writef(" %d", j); + } + } + } +} diff --git a/src/src/dumper.cpp b/src/src/dumper.cpp index d262b21..5c89eba 100644 --- a/src/src/dumper.cpp +++ b/src/src/dumper.cpp @@ -37,7 +37,7 @@ std::string jitcs::StringDumper::takeResult() { } -jitcs::MachineDumper::MachineDumper(IDumper &o, IMachineInfo& mi) +jitcs::MachineDumper::MachineDumper(IDumper &o, const IMachineInfo& mi) : _out(o) { if (mi.cpu.isX86_32()) _md.reset(new x86_32::X86_32MachineDumper()); diff --git a/tests/test_unittest.cpp b/tests/test_unittest.cpp index f2be283..a2c7224 100644 --- a/tests/test_unittest.cpp +++ b/tests/test_unittest.cpp @@ -25,6 +25,9 @@ printf("test started: %s\n", testName.c_str()); _nameOfCurrentTest = testName; try { testFnc(*this); + } catch (const char* msg) { + _numberOfFailedTests++; + printf("FAILED: test %s crashed: %s\n", _nameOfCurrentTest.c_str(), msg); } catch (...) { _numberOfFailedTests++; printf("FAILED: test %s crashed\n", _nameOfCurrentTest.c_str()); -- 2.11.4.GIT