DPI arithmetic

This commit is contained in:
GDBWNV 2024-06-12 17:06:20 +01:00
parent 3290896f6e
commit f5dabe26b2

View File

@ -186,6 +186,7 @@ void classifyOpcode(char* opcode, a64inst_instruction *instr, char *operandList[
else { else {
data.regType=1; data.regType=1;
} }
// arithmetic
// add, adds // add, adds
if (opcode[1] == 'd') { if (opcode[1] == 'd') {
data.DPIOpType = 0; data.DPIOpType = 0;
@ -193,10 +194,11 @@ void classifyOpcode(char* opcode, a64inst_instruction *instr, char *operandList[
data.processOpData.arithmData.immediate = getOperandNumber(operandList[2]); data.processOpData.arithmData.immediate = getOperandNumber(operandList[2]);
if (opcode[-1] == 's') { if (opcode[-1] == 's') {
data.processOpData.arithmData.shiftImmediate = true; data.processOpData.arithmData.shiftImmediate = true;
data.processOp = 1;
} }
else { else {
data.processOpData.arithmData.shiftImmediate = false; data.processOpData.arithmData.shiftImmediate = false;
data.processOp = 0;
} }
} }
// cmn // cmn
@ -205,7 +207,31 @@ void classifyOpcode(char* opcode, a64inst_instruction *instr, char *operandList[
data.processOpData.arithmData.src = ZERO_REGISTER; data.processOpData.arithmData.src = ZERO_REGISTER;
data.processOpData.arithmData.immediate = getOperandNumber(operandList[1]); data.processOpData.arithmData.immediate = getOperandNumber(operandList[1]);
data.processOpData.arithmData.shiftImmediate = true; data.processOpData.arithmData.shiftImmediate = true;
data.processOp = 1;
} }
// sub, subs
else if (opcode[0] == 's') {
data.DPIOpType = 0;
data.processOpData.arithmData.src = getOperandNumber(operandList[1]);
data.processOpData.arithmData.immediate = getOperandNumber(operandList[2]);
if (opcode[-1] == 's') {
data.processOpData.arithmData.shiftImmediate = true;
data.processOp = 3;
}
else {
data.processOpData.arithmData.shiftImmediate = false;
data.processOp = 2;
}
}
// cmp
else if (opcode == 'cmp') {
data.DPIOpType = 0;
data.processOpData.arithmData.src = ZERO_REGISTER;
data.processOpData.arithmData.immediate = getOperandNumber(operandList[1]);
data.processOpData.arithmData.shiftImmediate = true;
data.processOp = 3;
}
// wide move
} }
} }