thumb32: Implement POP

This can just be treated as an alias to LDMIA
This commit is contained in:
Lioncash 2021-03-12 19:43:44 -05:00
parent 39edee70ff
commit 9cb4790428
3 changed files with 6 additions and 1 deletions

View file

@ -2,7 +2,7 @@
//INST(thumb32_SRS_1, "SRS", "1110100000-0--------------------") //INST(thumb32_SRS_1, "SRS", "1110100000-0--------------------")
//INST(thumb32_RFE_2, "RFE", "1110100000-1--------------------") //INST(thumb32_RFE_2, "RFE", "1110100000-1--------------------")
INST(thumb32_STMIA, "STMIA/STMEA", "1110100010W0nnnn0iiiiiiiiiiiiiii") INST(thumb32_STMIA, "STMIA/STMEA", "1110100010W0nnnn0iiiiiiiiiiiiiii")
//INST(thumb32_POP, "POP", "1110100010111101----------------") INST(thumb32_POP, "POP", "1110100010111101iiiiiiiiiiiiiiii")
INST(thumb32_LDMIA, "LDMIA/LDMFD", "1110100010W1nnnniiiiiiiiiiiiiiii") INST(thumb32_LDMIA, "LDMIA/LDMFD", "1110100010W1nnnniiiiiiiiiiiiiiii")
//INST(thumb32_PUSH, "PUSH", "1110100100101101----------------") //INST(thumb32_PUSH, "PUSH", "1110100100101101----------------")
INST(thumb32_STMDB, "STMDB/STMFD", "1110100100W0nnnn0iiiiiiiiiiiiiii") INST(thumb32_STMDB, "STMDB/STMFD", "1110100100W0nnnn0iiiiiiiiiiiiiii")

View file

@ -101,6 +101,10 @@ bool ThumbTranslatorVisitor::thumb32_LDMIA(bool W, Reg n, Imm<16> reg_list) {
return LDMHelper(ir, W, n, regs_imm, start_address, writeback_address); return LDMHelper(ir, W, n, regs_imm, start_address, writeback_address);
} }
bool ThumbTranslatorVisitor::thumb32_POP(Imm<16> reg_list) {
return thumb32_LDMIA(true, Reg::SP, reg_list);
}
bool ThumbTranslatorVisitor::thumb32_STMIA(bool W, Reg n, Imm<15> reg_list) { bool ThumbTranslatorVisitor::thumb32_STMIA(bool W, Reg n, Imm<15> reg_list) {
const auto regs_imm = reg_list.ZeroExtend(); const auto regs_imm = reg_list.ZeroExtend();
const auto num_regs = static_cast<u32>(Common::BitCount(regs_imm)); const auto num_regs = static_cast<u32>(Common::BitCount(regs_imm));

View file

@ -174,6 +174,7 @@ struct ThumbTranslatorVisitor final {
// thumb32 load/store multiple instructions // thumb32 load/store multiple instructions
bool thumb32_LDMDB(bool W, Reg n, Imm<16> reg_list); bool thumb32_LDMDB(bool W, Reg n, Imm<16> reg_list);
bool thumb32_LDMIA(bool W, Reg n, Imm<16> reg_list); bool thumb32_LDMIA(bool W, Reg n, Imm<16> reg_list);
bool thumb32_POP(Imm<16> reg_list);
bool thumb32_STMIA(bool W, Reg n, Imm<15> reg_list); bool thumb32_STMIA(bool W, Reg n, Imm<15> reg_list);
bool thumb32_STMDB(bool W, Reg n, Imm<15> reg_list); bool thumb32_STMDB(bool W, Reg n, Imm<15> reg_list);