fix: Use flush_pipeline16 when branch exchange changes CPU to thumb mode
Former-commit-id: 6f9c01c6f7ad7be2889a18ca66f7d310fcaa7c35
This commit is contained in:
parent
c7a484fda5
commit
7736154b50
1 changed files with 4 additions and 4 deletions
|
@ -54,14 +54,14 @@ impl Core {
|
||||||
if addr.bit(0) {
|
if addr.bit(0) {
|
||||||
addr = addr & !0x1;
|
addr = addr & !0x1;
|
||||||
self.cpsr.set_state(CpuState::THUMB);
|
self.cpsr.set_state(CpuState::THUMB);
|
||||||
|
self.pc = addr;
|
||||||
|
self.flush_pipeline16(sb);
|
||||||
} else {
|
} else {
|
||||||
addr = addr & !0x3;
|
addr = addr & !0x3;
|
||||||
self.cpsr.set_state(CpuState::ARM);
|
self.cpsr.set_state(CpuState::ARM);
|
||||||
|
self.pc = addr;
|
||||||
|
self.flush_pipeline32(sb);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.pc = addr;
|
|
||||||
self.flush_pipeline32(sb); // +1S+1N
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Cycles 2S+1N
|
/// Cycles 2S+1N
|
||||||
|
|
Reference in a new issue