aboutsummaryrefslogtreecommitdiff
path: root/qtmips_machine/instructions/arithmetic.h
blob: 29f89d27e4304c9b221e6d0866c2e15eb7a07fea (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);
    std::vector<std::string> 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);
    std::vector<std::string> to_strs();
private:
    enum InstructionArithmeticImmediateT type;
};

#endif // ARITHMETIC_H