From 9cf92379d5fcf0076c25dae0935daab446c992cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 30 Aug 2017 21:37:53 +0200 Subject: Initial commit Adding work done so far. --- qtmips_machine/instructions/loadstore.cpp | 67 +++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 qtmips_machine/instructions/loadstore.cpp (limited to 'qtmips_machine/instructions/loadstore.cpp') diff --git a/qtmips_machine/instructions/loadstore.cpp b/qtmips_machine/instructions/loadstore.cpp new file mode 100644 index 0000000..c83eae4 --- /dev/null +++ b/qtmips_machine/instructions/loadstore.cpp @@ -0,0 +1,67 @@ +#include "loadstore.h" + +InstructionLoad::InstructionLoad(enum InstructionLoadStoreT type, std::uint8_t rs, std::uint8_t rt, std::uint16_t offset) + : InstructionI(rs, rt, offset) { + this->type = type; +} + +std::vector InstructionLoad::to_strs() { + std::vector str = this->InstructionI::to_strs(); + switch (this->type) { + case ILST_B: + str[0] = "lb"; + break; + case ILST_HW: + str[0] = "lh"; + break; + case ILST_WL: + str[0] = "lwl"; + break; + case ILST_W: + str[0] = "lw"; + break; + case ILST_BU: + str[0] = "lbu"; + break; + case ILST_HU: + str[0] = "lhu"; + break; + case ILST_WR: + str[0] = "lwr"; + break; + default: + // TODO different exception + throw std::exception(); + } + return str; +} + +InstructionStore::InstructionStore(enum InstructionLoadStoreT type, std::uint8_t rs, std::uint8_t rt, std::uint16_t offset) + : InstructionI(rs, rt, offset) { + this->type = type; +} + +std::vector InstructionStore::to_strs() { + std::vector str = this->InstructionI::to_strs(); + switch (this->type) { + case ILST_B: + str[0] = "sb"; + break; + case ILST_HW: + str[0] = "sh"; + break; + case ILST_WL: + str[0] = "swl"; + break; + case ILST_W: + str[0] = "sw"; + break; + case ILST_WR: + str[0] = "swr"; + break; + default: + // TODO different exception + throw std::exception(); + } + return str; +} -- cgit v1.2.3