From 60c7bfa8260f9aa68bd7947ecddfe64e030b0c7a Mon Sep 17 00:00:00 2001 From: Pavel Pisa Date: Thu, 7 Feb 2019 17:27:22 +0100 Subject: Add address to emitted instruction to allow its use for branch address decoding. The new Qt5 syntax is used to create connections because old syntax does not work with multiple arguments for some unresolved reason. Signed-off-by: Pavel Pisa --- qtmips_gui/coreview.cpp | 17 +++++++++-------- qtmips_gui/coreview/instructionview.cpp | 4 ++-- qtmips_gui/coreview/instructionview.h | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) (limited to 'qtmips_gui') diff --git a/qtmips_gui/coreview.cpp b/qtmips_gui/coreview.cpp index 5eace7d..b360520 100644 --- a/qtmips_gui/coreview.cpp +++ b/qtmips_gui/coreview.cpp @@ -52,7 +52,8 @@ } while(false) #define NEW_I(VAR, X, Y, SIG) do { \ NEW(InstructionView, VAR, X, Y); \ - connect(machine->core(), SIGNAL(SIG), VAR, SLOT(instruction_update(const machine::Instruction&))); \ + connect(machine->core(), &machine::Core::SIG, \ + VAR, &coreview::InstructionView::instruction_update); \ } while(false) #define NEW_V(X, Y, SIG, ...) do { \ NEW(Value, val, X, Y, __VA_ARGS__); \ @@ -229,10 +230,10 @@ QGraphicsSimpleTextItem *CoreViewScene::new_label(const QString &str, qreal x, q } CoreViewSceneSimple::CoreViewSceneSimple(machine::QtMipsMachine *machine) : CoreViewScene(machine) { - NEW_I(instr_prim, 230, 60, instruction_fetched(const machine::Instruction&)); + NEW_I(instr_prim, 230, 60, instruction_fetched); if (machine->config().delay_slot()) { NEW(Latch, delay_slot_latch, 55, 470, machine, 25); - NEW_I(instr_delay, 60, 500, instruction_program_counter(const machine::Instruction&)); + NEW_I(instr_delay, 60, 500, instruction_program_counter); } coreview::Connection *con; @@ -311,11 +312,11 @@ CoreViewScenePipelined::CoreViewScenePipelined(machine::QtMipsMachine *machine) NEW(Latch, latch_mem_wb, 660, 70, machine, 400); latch_mem_wb->setTitle("MEM/WB"); - NEW_I(inst_fetch, 79, 2, instruction_fetched(const machine::Instruction&)); - NEW_I(inst_dec, 275, 2, instruction_decoded(const machine::Instruction&)); - NEW_I(inst_exec, 464, 2, instruction_executed(const machine::Instruction&)); - NEW_I(inst_mem, 598, 2, instruction_memory(const machine::Instruction&)); - NEW_I(inst_wrb, 660, 18, instruction_writeback(const machine::Instruction&)); + NEW_I(inst_fetch, 79, 2, instruction_fetched); + NEW_I(inst_dec, 275, 2, instruction_decoded); + NEW_I(inst_exec, 464, 2, instruction_executed); + NEW_I(inst_mem, 598, 2, instruction_memory); + NEW_I(inst_wrb, 660, 18, instruction_writeback); if (machine->config().hazard_unit() != machine::MachineConfig::HU_NONE) { NEW(LogicBlock, hazard_unit, SC_WIDTH/2, SC_HEIGHT - 15, "Hazard Unit"); diff --git a/qtmips_gui/coreview/instructionview.cpp b/qtmips_gui/coreview/instructionview.cpp index 5d131eb..342a1d4 100644 --- a/qtmips_gui/coreview/instructionview.cpp +++ b/qtmips_gui/coreview/instructionview.cpp @@ -52,7 +52,7 @@ InstructionView::InstructionView() : QGraphicsObject(nullptr), text(this) { f.setPointSize(6); text.setFont(f); - instruction_update(machine::Instruction()); // Initialize to NOP + instruction_update(machine::Instruction(), 0); // Initialize to NOP } QRectF InstructionView::boundingRect() const { @@ -65,7 +65,7 @@ void InstructionView::paint(QPainter *painter, const QStyleOptionGraphicsItem *o painter->drawRoundRect(-WIDTH/2, 0, WIDTH, HEIGHT, ROUND, ROUND); } -void InstructionView::instruction_update(const machine::Instruction &i) { +void InstructionView::instruction_update(const machine::Instruction &i, std::uint32_t inst_addr) { QRectF prev_box = boundingRect(); text.setText(i.to_str()); QRectF box = text.boundingRect(); diff --git a/qtmips_gui/coreview/instructionview.h b/qtmips_gui/coreview/instructionview.h index 57b1fbc..8c63fc1 100644 --- a/qtmips_gui/coreview/instructionview.h +++ b/qtmips_gui/coreview/instructionview.h @@ -51,7 +51,7 @@ public: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); public slots: - void instruction_update(const machine::Instruction &i); + void instruction_update(const machine::Instruction &i, std::uint32_t inst_addr); private: QGraphicsSimpleTextItem text; -- cgit v1.2.3