mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-21 21:33:54 +00:00
Fix MOV as unconditional branch.
This commit is contained in:
parent
7cdceb7b4f
commit
a0f0f73bde
@ -184,10 +184,8 @@ struct Executor {
|
||||
// processor mode."
|
||||
|
||||
if(fields.destination() == 15) {
|
||||
if constexpr (is_comparison(flags.operation())) {
|
||||
registers_.set_status(conditions);
|
||||
} else {
|
||||
registers_.set_status(pc_proxy);
|
||||
registers_.set_status(conditions);
|
||||
if constexpr (!is_comparison(flags.operation())) {
|
||||
registers_.set_pc(pc_proxy);
|
||||
}
|
||||
} else {
|
||||
@ -201,7 +199,7 @@ struct Executor {
|
||||
}
|
||||
} else {
|
||||
// "If the S flag is clear when Rd is R15, only the 24 PC bits of R15 will be written."
|
||||
if(fields.destination() == 15 && !is_logical(flags.operation())) {
|
||||
if(fields.destination() == 15 && !is_comparison(flags.operation())) {
|
||||
registers_.set_pc(pc_proxy);
|
||||
}
|
||||
}
|
||||
|
@ -572,7 +572,7 @@ class ConcreteMachine:
|
||||
|
||||
// static bool log = false;
|
||||
// if(log) {
|
||||
// logger.info().append("%08x: %08x", executor_.pc(), instruction);
|
||||
// logger.info().append("%08x: %08x [r14:%08x]", executor_.pc(), instruction, executor_.registers()[14]);
|
||||
// }
|
||||
InstructionSet::ARM::execute<arm_model>(instruction, executor_);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user