Fix Bug: Fixed Post Indexed SDT to save AFTER the transfer

This commit is contained in:
sBubshait 2024-06-06 16:31:59 +01:00
parent efca820fbf
commit 4689aba219

View File

@ -378,7 +378,6 @@ void execute_SDT(Machine *state, a64inst_instruction *inst) {
state->registers[inst->data.SingleTransferData.processOpData.singleDataTransferData.base] = address; state->registers[inst->data.SingleTransferData.processOpData.singleDataTransferData.base] = address;
break; break;
case a64inst_POST_INDEXED: case a64inst_POST_INDEXED:
state->registers[inst->data.SingleTransferData.processOpData.singleDataTransferData.base] = address + inst->data.SingleTransferData.processOpData.singleDataTransferData.a64inst_addressingModeData.indexedOffset;
break; break;
} }
} }
@ -396,7 +395,7 @@ void execute_SDT(Machine *state, a64inst_instruction *inst) {
// Update base register if post indexed // Update base register if post indexed
if (inst->data.SingleTransferData.processOpData.singleDataTransferData.addressingMode == a64inst_POST_INDEXED) { if (inst->data.SingleTransferData.processOpData.singleDataTransferData.addressingMode == a64inst_POST_INDEXED) {
dword result = address + signExtend(inst->data.SingleTransferData.processOpData.singleDataTransferData.a64inst_addressingModeData.indexedOffset, 9); dword result = address + signExtend(inst->data.SingleTransferData.processOpData.singleDataTransferData.a64inst_addressingModeData.indexedOffset, 9);
writeRegister(state, inst->data.SingleTransferData.processOpData.singleDataTransferData.base, inst->data.SingleTransferData.regType == a64inst_W, result); writeRegister(state, inst->data.SingleTransferData.processOpData.singleDataTransferData.base, inst->data.SingleTransferData.regType, result);
} }
} }