1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-06-17 21:30:14 +00:00

Change LDR writeback to destination.

This commit is contained in:
Thomas Harte 2024-03-10 22:29:19 -04:00
parent 21278d028c
commit e9e1db7a05

View File

@ -337,10 +337,13 @@ struct Executor {
// If either postindexing or else with writeback, update base.
if constexpr (!flags.pre_index() || flags.write_back_address()) {
if(transfer.base() == 15) {
registers_.set_pc(offsetted_address);
} else {
registers_[transfer.base()] = offsetted_address;
// Empirically: I think writeback occurs before the access, so shouldn't overwrite on a load.
if(flags.operation() == SingleDataTransferFlags::Operation::STR || transfer.base() != transfer.destination()) {
if(transfer.base() == 15) {
registers_.set_pc(offsetted_address);
} else {
registers_[transfer.base()] = offsetted_address;
}
}
}
}