blob: a8c6e41aceaedc4f1876f9c075bfffde25ed6ca4 (
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
47
48
49
50
51
|
#include "shift.h"
InstructionShift::InstructionShift(enum InstructionShiftT type, std::uint8_t rt, std::uint8_t rd, std::uint8_t sa)
: InstructionR(0, rt, rd, sa) {
this->type = type;
}
std::vector<std::string> InstructionShift::to_strs() {
std::vector<std::string> str = this->InstructionR::to_strs();
str.erase(str.begin() + 1); // Drop rs field
switch (this->type) {
case IST_LL:
str[0] = "sll";
break;
case IST_RL:
str[0] = "srl";
break;
case IST_RA:
str[0] = "sra";
break;
default:
// TODO different exception
throw std::exception();
}
return str;
}
InstructionShiftVariable::InstructionShiftVariable(enum InstructionShiftT type, std::uint8_t rs, std::uint8_t rt, std::uint8_t rd)
: InstructionR(rs, rt, rd, 0) {
this->type = type;
}
std::vector<std::string> InstructionShiftVariable::to_strs() {
std::vector<std::string> str = this->InstructionR::to_strs();
str.erase(str.begin() + 4); // Drop sa field
switch (this->type) {
case IST_LL:
str[0] = "sllv";
break;
case IST_RL:
str[0] = "srlv";
break;
case IST_RA:
str[0] = "srav";
break;
default:
// TODO different exception
throw std::exception();
}
return str;
}
|