diff options
Diffstat (limited to 'qtmips_machine/alu.cpp')
-rw-r--r-- | qtmips_machine/alu.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/qtmips_machine/alu.cpp b/qtmips_machine/alu.cpp index f0e45a5..79194c9 100644 --- a/qtmips_machine/alu.cpp +++ b/qtmips_machine/alu.cpp @@ -39,7 +39,9 @@ using namespace machine; -std::uint32_t machine::alu_operate(enum AluOp operation, std::uint32_t s, std::uint32_t t, std::uint8_t sa, Registers *regs, bool &discard) { +std::uint32_t machine::alu_operate(enum AluOp operation, std::uint32_t s, std::uint32_t t, + std::uint8_t sa, std::uint8_t sz, Registers *regs, + bool &discard) { std::int64_t s64_val; std::uint64_t u64_val; discard = false; @@ -132,6 +134,8 @@ std::uint32_t machine::alu_operate(enum AluOp operation, std::uint32_t s, std::u return t << 16; case ALU_OP_BSHFL: return (uint32_t)(int32_t)(int8_t)t; + case ALU_OP_EXT: + return (s >> sa) & ((1 << sz) - 1); case ALU_OP_PASS_T: // Pass s argument without change for JAL return t; case ALU_OP_BREAK: |