Merge pull request #577 from lioncash/barrier

thumb32: Implement barrier instructions and CLREX
This commit is contained in:
merry
2021-02-19 22:51:13 +00:00
committed by GitHub
3 changed files with 30 additions and 4 deletions

View File

@@ -7,6 +7,28 @@
namespace Dynarmic::A32 {
bool ThumbTranslatorVisitor::thumb32_CLREX() {
ir.ClearExclusive();
return true;
}
bool ThumbTranslatorVisitor::thumb32_DMB([[maybe_unused]] Imm<4> option) {
ir.DataMemoryBarrier();
return true;
}
bool ThumbTranslatorVisitor::thumb32_DSB([[maybe_unused]] Imm<4> option) {
ir.DataSynchronizationBarrier();
return true;
}
bool ThumbTranslatorVisitor::thumb32_ISB([[maybe_unused]] Imm<4> option) {
ir.InstructionSynchronizationBarrier();
ir.BranchWritePC(ir.Imm32(ir.current_location.PC() + 4));
ir.SetTerm(IR::Term::ReturnToDispatch{});
return false;
}
bool ThumbTranslatorVisitor::thumb32_UDF() {
return thumb16_UDF();
}

View File

@@ -164,6 +164,10 @@ struct ThumbTranslatorVisitor final {
bool thumb32_MOVW_imm(Imm<1> imm1, Imm<4> imm4, Imm<3> imm3, Reg d, Imm<8> imm8);
// thumb32 miscellaneous control instructions
bool thumb32_CLREX();
bool thumb32_DMB(Imm<4> option);
bool thumb32_DSB(Imm<4> option);
bool thumb32_ISB(Imm<4> option);
bool thumb32_UDF();
// thumb32 branch instructions