Add negation for second operand in DPR instructions w/ S

This commit is contained in:
Themis Demetriades 2024-06-05 22:50:04 +01:00
parent cc62168d43
commit dd472117aa

View File

@ -203,6 +203,9 @@ static void executeDPRegister(Machine *state, a64inst_instruction *inst) {
// Apply shift to value held in second register // Apply shift to value held in second register
a64inst_DPRegister_ArithmLogicData *arithmLogicData = &inst->data.DPRegisterData.processOpData.arithmLogicData; a64inst_DPRegister_ArithmLogicData *arithmLogicData = &inst->data.DPRegisterData.processOpData.arithmLogicData;
uint8_t shiftAmount = arithmLogicData->shiftAmount; uint8_t shiftAmount = arithmLogicData->shiftAmount;
if (arithmLogicData->negShiftedSrc2) {
src2Val = ~src2Val;
}
switch(arithmLogicData->shiftType) { switch(arithmLogicData->shiftType) {
case a64inst_LSL: case a64inst_LSL:
@ -214,7 +217,11 @@ static void executeDPRegister(Machine *state, a64inst_instruction *inst) {
break; break;
case a64inst_ASR: case a64inst_ASR:
if (regType == a64inst_X) {
src2Val = truncateValue((int64_t)src2Val >> shiftAmount, regType); src2Val = truncateValue((int64_t)src2Val >> shiftAmount, regType);
} else {
src2Val = truncateValue((int32_t)src2Val >> shiftAmount, regType);
}
break; break;
case a64inst_ROR: case a64inst_ROR: