aboutsummaryrefslogtreecommitdiff
path: root/qtmips_machine/instructions/arithmetic.h
blob: 19f1df5c35366f46330d10960ef01726d3cc76e1 (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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#ifndef ARITHMETIC_H
#define ARITHMETIC_H

#include "instruction.h"

enum InstructionArithmeticT {
    IAT_ADD, // Add
    IAT_ADDU, // Add unsigned
    IAT_SUB, // Subtract
    IAT_SUBU, // Subtract unsigned
    IAT_AND,
    IAT_OR,
    IAT_XOR,
    IAT_NOR,
    IAT_SLT, // set on less than
    IAT_SLTU, // set on less than unsigned
};

class InstructionArithmetic : public InstructionR  {
public:
    InstructionArithmetic(enum InstructionArithmeticT type, std::uint8_t rs, std::uint8_t rd, std::uint8_t rt);
    QVector<QString> to_strs();
private:
    enum InstructionArithmeticT type;
};

enum InstructionArithmeticImmediateT {
    IAT_ADDI,
    IAT_ADDIU,
    IAT_ANDI,
    IAT_ORI,
    IAT_XORI,
    IAT_SLTI,
    IAT_SLTIU,
    IAT_LUI
};

class InstructionArithmeticImmediate : public InstructionI {
public:
    InstructionArithmeticImmediate(enum InstructionArithmeticImmediateT type, std::uint8_t rs, std::uint8_t rt, std::uint16_t value);
    QVector<QString> to_strs();
private:
    enum InstructionArithmeticImmediateT type;
};

#endif // ARITHMETIC_H