diff options
author | Karel Kočí <cynerd@email.cz> | 2017-11-19 21:23:04 +0100 |
---|---|---|
committer | Karel Kočí <cynerd@email.cz> | 2017-11-19 21:23:04 +0100 |
commit | f0ad502e4651243d6a96194b3393bd460c0f7fc9 (patch) | |
tree | 4f912c24b5943bd93b5a3378df75f9611de6779b /qtmips_machine/alu.h | |
parent | 2c6562fa78e884d66b8c2a306f020101e8803f2e (diff) | |
download | qtmips-f0ad502e4651243d6a96194b3393bd460c0f7fc9.tar.gz qtmips-f0ad502e4651243d6a96194b3393bd460c0f7fc9.tar.bz2 qtmips-f0ad502e4651243d6a96194b3393bd460c0f7fc9.zip |
Another huge pile of work for about two months
Well I should commit every change instead of this madness. I am not
documenting changes as all this is just improvements and implementation
progression.
Diffstat (limited to 'qtmips_machine/alu.h')
-rw-r--r-- | qtmips_machine/alu.h | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/qtmips_machine/alu.h b/qtmips_machine/alu.h index e913b0c..974b462 100644 --- a/qtmips_machine/alu.h +++ b/qtmips_machine/alu.h @@ -1,11 +1,39 @@ #ifndef ALU_H #define ALU_H +#include <cstdint> +#include <QString> -class Alu -{ -public: - Alu(); +// TODO Any other operations? We seems to be missing a lot of them. +enum AluOp : std::uint8_t { + ALU_OP_SLL = 0, + ALU_OP_SRL = 2, + ALU_OP_SRA, + ALU_OP_SLLV, + ALU_OP_SRLV = 6, + ALU_OP_SRAV, + ALU_OP_ADD = 32, + ALU_OP_ADDU, + ALU_OP_SUB, + ALU_OP_SUBU, + ALU_OP_AND, + ALU_OP_OR, + ALU_OP_XOR, + ALU_OP_NOR, + ALU_OP_SLT = 42, + ALU_OP_SLTU, + ALU_OP_LAST = 64 // First impossible operation (just to be sure that we don't overflow) }; -#endif // ALU_H
\ No newline at end of file +// Do ALU operation. +// operation: This is function field from instruction or shifted opcode for immediate instructions +// s: Loaded from rs. Also calles as source. +// t: Loaded from rt or immediate field from instruction it self. Also called as target. +// sa: This is value directly from instruction it self (sa section) used for shift operations +// Returned value is commonly saved to rt/rd or any other way passed trough core +std::uint32_t alu_operate(enum AluOp operation, std::uint32_t s, std::uint32_t t, std::uint8_t sa); + +// Returns string representation of ALU instruction (internally used by Instruction::to_str) +QString alu_str(enum AluOp operation, std::uint32_t s, std::uint32_t t, std::uint8_t sa); + +#endif // ALU_H |