mirror of
https://git.suyu.dev/suyu/dynarmic.git
synced 2026-03-12 17:42:56 +00:00
A64: Implement DSB, DMB
This commit is contained in:
@@ -62,8 +62,8 @@ INST(SEVL, "SEVL", "11010
|
||||
//INST(ESB, "ESB", "11010101000000110010001000011111")
|
||||
//INST(PSB, "PSB CSYNC", "11010101000000110010001000111111")
|
||||
//INST(CLREX, "CLREX", "11010101000000110011MMMM01011111")
|
||||
//INST(DSB, "DSB", "11010101000000110011MMMM10011111")
|
||||
//INST(DMB, "DMB", "11010101000000110011MMMM10111111")
|
||||
INST(DSB, "DSB", "11010101000000110011MMMM10011111")
|
||||
INST(DMB, "DMB", "11010101000000110011MMMM10111111")
|
||||
//INST(ISB, "ISB", "11010101000000110011MMMM11011111")
|
||||
//INST(SYS, "SYS", "1101010100001oooNNNNMMMMooottttt")
|
||||
//INST(MSR_reg, "MSR (register)", "110101010001poooNNNNMMMMooottttt")
|
||||
|
||||
@@ -45,6 +45,14 @@ void IREmitter::DataCacheOperationRaised(DataCacheOperation op, const IR::U64& v
|
||||
Inst(Opcode::A64DataCacheOperationRaised, Imm64(static_cast<u64>(op)), value);
|
||||
}
|
||||
|
||||
void IREmitter::DataSynchronizationBarrier() {
|
||||
Inst(Opcode::A64DataSynchronizationBarrier);
|
||||
}
|
||||
|
||||
void IREmitter::DataMemoryBarrier() {
|
||||
Inst(Opcode::A64DataMemoryBarrier);
|
||||
}
|
||||
|
||||
IR::U8 IREmitter::ReadMemory8(const IR::U64& vaddr) {
|
||||
return Inst<IR::U8>(Opcode::A64ReadMemory8, vaddr);
|
||||
}
|
||||
|
||||
@@ -42,6 +42,8 @@ public:
|
||||
void CallSupervisor(u32 imm);
|
||||
void ExceptionRaised(Exception exception);
|
||||
void DataCacheOperationRaised(DataCacheOperation op, const IR::U64& value);
|
||||
void DataSynchronizationBarrier();
|
||||
void DataMemoryBarrier();
|
||||
|
||||
IR::U8 ReadMemory8(const IR::U64& vaddr);
|
||||
IR::U16 ReadMemory16(const IR::U64& vaddr);
|
||||
|
||||
@@ -36,4 +36,14 @@ bool TranslatorVisitor::SEVL() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TranslatorVisitor::DSB(Imm<4> /*CRm*/) {
|
||||
ir.DataSynchronizationBarrier();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TranslatorVisitor::DMB(Imm<4> /*CRm*/) {
|
||||
ir.DataMemoryBarrier();
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace Dynarmic::A64
|
||||
|
||||
Reference in New Issue
Block a user