mirror of
https://git.suyu.dev/suyu/dynarmic.git
synced 2026-03-07 02:42:58 +00:00
Implement Thumb instructions: BX, BLX (reg), B (T1), B (T2)
This commit is contained in:
@@ -57,6 +57,10 @@ void IREmitter::SetRegister(const Reg reg, IR::ValuePtr value) {
|
||||
void IREmitter::ALUWritePC(IR::ValuePtr value) {
|
||||
// This behaviour is ARM version-dependent.
|
||||
// The below implementation is for ARMv6k
|
||||
BranchWritePC(value);
|
||||
}
|
||||
|
||||
void IREmitter::BranchWritePC(IR::ValuePtr value) {
|
||||
if (!current_location.TFlag) {
|
||||
auto new_pc = And(value, Imm32(0xFFFFFFFC));
|
||||
Inst(IR::Opcode::SetRegister, { RegRef(Reg::PC), new_pc });
|
||||
@@ -66,10 +70,14 @@ void IREmitter::ALUWritePC(IR::ValuePtr value) {
|
||||
}
|
||||
}
|
||||
|
||||
void IREmitter::BXWritePC(IR::ValuePtr value) {
|
||||
Inst(IR::Opcode::BXWritePC, {value});
|
||||
}
|
||||
|
||||
void IREmitter::LoadWritePC(IR::ValuePtr value) {
|
||||
// This behaviour is ARM version-dependent.
|
||||
// The below implementation is for ARMv6k
|
||||
Inst(IR::Opcode::BXWritePC, {value});
|
||||
BXWritePC(value);
|
||||
}
|
||||
|
||||
void IREmitter::CallSupervisor(IR::ValuePtr value) {
|
||||
|
||||
Reference in New Issue
Block a user