aboutsummaryrefslogtreecommitdiff
path: root/qtmips_machine/tests/testinstruction.cpp
blob: 2cdf1194402786848c3db0402a0124bb9f6ab061 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "tst_machine.h"
#include "instruction.h"

using namespace machine;

// Test that we are correctly encoding instructions in constructor
void MachineTests::instruction() {
    QCOMPARE(Instruction(0x00), Instruction(0,0));
    QCOMPARE(Instruction(0x4000002), Instruction(1, 2));
    // QCOMPARE(Instruction(0x4000002), Instruction(1, 2, 3, 4));
    // TODO other combinations
}

// Test that we are correctly decoding instruction fields
void MachineTests::instruction_access() {
    Instruction i(0xffffffff);

    QCOMPARE(i.data(), (std::uint32_t) 0xffffffff);
    QCOMPARE(i.opcode(), (std::uint8_t) 0x3f);
    QCOMPARE(i.rs(), (std::uint8_t) 0x1f);
    QCOMPARE(i.rt(), (std::uint8_t) 0x1f);
    QCOMPARE(i.rd(), (std::uint8_t) 0x1f);
    QCOMPARE(i.shamt(), (std::uint8_t) 0x1f);
    QCOMPARE(i.funct(), (std::uint8_t) 0x3f);
    QCOMPARE(i.immediate(), (std::uint16_t) 0xffff);
    QCOMPARE(i.address(), (std::uint32_t) 0x3ffffff);
}