Add execution of Multiply DP Register Instructions, w/ T
This commit is contained in:
parent
9ea494acfc
commit
379dedc6ce
@ -17,6 +17,7 @@
|
|||||||
// Prototypes
|
// Prototypes
|
||||||
void execute_SDT(Machine *state, a64inst_instruction *inst);
|
void execute_SDT(Machine *state, a64inst_instruction *inst);
|
||||||
void execute_Branch(Machine *state, a64inst_instruction *inst);
|
void execute_Branch(Machine *state, a64inst_instruction *inst);
|
||||||
|
void executeMultiply(Machine *state, a64inst_instruction *inst);
|
||||||
|
|
||||||
// Return maximum of two dwords
|
// Return maximum of two dwords
|
||||||
static dword max(dword a, dword b) {
|
static dword max(dword a, dword b) {
|
||||||
@ -328,7 +329,10 @@ void execute(Machine *state, a64inst_instruction *inst) {
|
|||||||
|
|
||||||
// Execute a data processing register instruction
|
// Execute a data processing register instruction
|
||||||
case a64inst_DPREGISTER:
|
case a64inst_DPREGISTER:
|
||||||
executeDPRegister(state, inst);
|
if (inst->data.DPRegisterData.DPROpType == a64inst_DPR_MULTIPLY)
|
||||||
|
executeMultiply(state, inst);
|
||||||
|
else
|
||||||
|
executeDPRegister(state, inst);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case a64inst_SINGLETRANSFER:
|
case a64inst_SINGLETRANSFER:
|
||||||
@ -426,3 +430,9 @@ void execute_Branch(Machine *state, a64inst_instruction *inst) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void executeMultiply(Machine *state, a64inst_instruction *inst) {
|
||||||
|
dword product = state->registers[inst->data.DPRegisterData.src1] * state->registers[inst->data.DPRegisterData.src2];
|
||||||
|
dword sum = readRegister(state, inst->data.DPRegisterData.processOpData.multiplydata.summand, inst->data.DPRegisterData.regType) + (inst->data.DPRegisterData.processOpData.multiplydata.negProd ? -product : product);
|
||||||
|
writeRegister(state, inst->data.DPRegisterData.dest, inst->data.DPRegisterData.regType, sum);
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user