aboutsummaryrefslogtreecommitdiff
path: root/qtmips_machine/instruction.cpp
diff options
context:
space:
mode:
authorPavel Pisa <pisa@cmp.felk.cvut.cz>2019-02-08 14:41:41 +0100
committerPavel Pisa <pisa@cmp.felk.cvut.cz>2019-02-08 14:41:41 +0100
commit38674515b1629865be6aa271dbbcad1a8cc306a8 (patch)
tree0948a94d26342a7d50c6f670dbadba33add3ff73 /qtmips_machine/instruction.cpp
parentbd11856c5915ef52ca3325a27fca07049ab2215a (diff)
downloadqtmips-38674515b1629865be6aa271dbbcad1a8cc306a8.tar.gz
qtmips-38674515b1629865be6aa271dbbcad1a8cc306a8.tar.bz2
qtmips-38674515b1629865be6aa271dbbcad1a8cc306a8.zip
Implement even deprecated BEQL, BNEL, BLEZL, BGTZL, BLTZL, BGEZL, BLTZALL, BGEZALL.
GCC generates these opcodes for default compilation mode. Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
Diffstat (limited to 'qtmips_machine/instruction.cpp')
-rw-r--r--qtmips_machine/instruction.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/qtmips_machine/instruction.cpp b/qtmips_machine/instruction.cpp
index d72dc7d..3fb8839 100644
--- a/qtmips_machine/instruction.cpp
+++ b/qtmips_machine/instruction.cpp
@@ -235,9 +235,9 @@ static const struct InstructionMap regimm_instruction_map[] = {
{"BGEZ", IT_I, NOALU, NOMEM, nullptr, // BGEZ
.flags = IMF_SUPPORTED | IMF_BJR_REQ_RS | IMF_BRANCH | IMF_BJ_NOT},
{"BLTZL", IT_I, NOALU, NOMEM, nullptr, // BLTZL
- .flags = IMF_BJR_REQ_RS},
+ .flags = IMF_SUPPORTED | IMF_BJR_REQ_RS | IMF_BRANCH | IMF_NB_SKIP_DS},
{"BGEZL", IT_I, NOALU, NOMEM, nullptr, // BGEZL
- .flags = IMF_BJR_REQ_RS | IMF_BJ_NOT},
+ .flags = IMF_SUPPORTED | IMF_BJR_REQ_RS | IMF_BRANCH | IMF_NB_SKIP_DS | IMF_BJ_NOT},
IM_UNKNOWN,
IM_UNKNOWN,
IM_UNKNOWN,
@@ -256,14 +256,14 @@ static const struct InstructionMap regimm_instruction_map[] = {
{"TNEI", IT_I, NOALU, NOMEM, nullptr, // TNEI
.flags = IMF_BJR_REQ_RS},
IM_UNKNOWN,
- {"BLTZAL", IT_I, ALU_OP_PASS_T, NOMEM, nullptr, // BLTZAL
+ {"BLTZAL", IT_I, ALU_OP_PASS_T, NOMEM, nullptr, // BLTZAL
.flags = FLAGS_J_B_PC_TO_R31 | IMF_BJR_REQ_RS | IMF_BRANCH},
- {"BGEZAL", IT_I, ALU_OP_PASS_T, NOMEM, nullptr, // BGEZAL
+ {"BGEZAL", IT_I, ALU_OP_PASS_T, NOMEM, nullptr, // BGEZAL
.flags = FLAGS_J_B_PC_TO_R31 | IMF_BJR_REQ_RS | IMF_BRANCH | IMF_BJ_NOT},
- {"BLTZALL", IT_I, NOALU, NOMEM, nullptr, // BLTZALL
- .flags = IMF_BJR_REQ_RS},
- {"BGEZALL", IT_I, NOALU, NOMEM, nullptr, // BGEZALL
- .flags = IMF_BJR_REQ_RS | IMF_BJ_NOT},
+ {"BLTZALL", IT_I, ALU_OP_PASS_T, NOMEM, nullptr, // BLTZALL
+ .flags = FLAGS_J_B_PC_TO_R31 | IMF_BJR_REQ_RS | IMF_BRANCH | IMF_NB_SKIP_DS },
+ {"BGEZALL", IT_I, ALU_OP_PASS_T, NOMEM, nullptr, // BGEZALL
+ .flags = FLAGS_J_B_PC_TO_R31 | IMF_BJR_REQ_RS | IMF_BRANCH | IMF_NB_SKIP_DS | IMF_BJ_NOT},
IM_UNKNOWN,
IM_UNKNOWN,
IM_UNKNOWN,
@@ -319,10 +319,14 @@ static const struct InstructionMap instruction_map[] = {
IM_UNKNOWN, // 17
IM_UNKNOWN, // 18
IM_UNKNOWN, // 19
- IM_UNKNOWN, // 20
- IM_UNKNOWN, // 21
- IM_UNKNOWN, // 22
- IM_UNKNOWN, // 23
+ {"BEQL", IT_I, NOALU, NOMEM, nullptr, // BEQL
+ .flags = IMF_SUPPORTED | IMF_BJR_REQ_RS | IMF_BJR_REQ_RT | IMF_BRANCH | IMF_NB_SKIP_DS},
+ {"BNEL", IT_I, NOALU, NOMEM, nullptr, // BNEL
+ .flags = IMF_SUPPORTED | IMF_BJR_REQ_RS | IMF_BJR_REQ_RT | IMF_BRANCH | IMF_NB_SKIP_DS | IMF_BJ_NOT},
+ {"BLEZL", IT_I, NOALU, NOMEM, nullptr, // BLEZL
+ .flags = IMF_SUPPORTED | IMF_BJR_REQ_RS | IMF_BRANCH | IMF_NB_SKIP_DS | IMF_BGTZ_BLEZ},
+ {"BGTZL", IT_I, NOALU, NOMEM, nullptr, // BGTZL
+ .flags = IMF_SUPPORTED | IMF_BJR_REQ_RS | IMF_BRANCH | IMF_NB_SKIP_DS | IMF_BGTZ_BLEZ | IMF_BJ_NOT},
IM_UNKNOWN, // 24
IM_UNKNOWN, // 25
IM_UNKNOWN, // 26