DPR multiplication
This commit is contained in:
parent
18df8e0fe4
commit
b8f3ded0af
43
src/parser.c
43
src/parser.c
@ -174,6 +174,49 @@ void classifyOpcode(char* opcode, a64inst_instruction *instr, char *operandList[
|
|||||||
} else {
|
} else {
|
||||||
if(classifyDPInst(operandList)){
|
if(classifyDPInst(operandList)){
|
||||||
instr->type = a64inst_DPREGISTER;
|
instr->type = a64inst_DPREGISTER;
|
||||||
|
a64inst_DPRegisterData data = instr->data.DPRegisterData;
|
||||||
|
char t = operandList[0][0];
|
||||||
|
if (t == 'w') {
|
||||||
|
data.regType=0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
data.regType=1;
|
||||||
|
}
|
||||||
|
// multiply
|
||||||
|
// mul, mneg, madd, msub
|
||||||
|
if (opcode[0] == 'm') {
|
||||||
|
data.DPROpType = 1;
|
||||||
|
data.dest = getOperandNumber(operandList[0]);
|
||||||
|
data.src1 = getOperandNumber(operandList[1]);
|
||||||
|
data.src2 = getOperandNumber(operandList[2]);
|
||||||
|
switch (opcode[1]) {
|
||||||
|
// madd
|
||||||
|
case 'a':
|
||||||
|
data.processOpData.multiplydata.summand = getOperandNumber(operandList[3]);
|
||||||
|
data.processOpData.multiplydata.negProd = false;
|
||||||
|
break;
|
||||||
|
// mneg
|
||||||
|
case 'n':
|
||||||
|
data.processOpData.multiplydata.summand = ZERO_REGISTER;
|
||||||
|
data.processOpData.multiplydata.negProd = true;
|
||||||
|
break;
|
||||||
|
// msub
|
||||||
|
case 's':
|
||||||
|
data.processOpData.multiplydata.summand = getOperandNumber(operandList[3]);
|
||||||
|
data.processOpData.multiplydata.negProd = true;
|
||||||
|
break;
|
||||||
|
// mul
|
||||||
|
default:
|
||||||
|
data.processOpData.multiplydata.summand = ZERO_REGISTER;
|
||||||
|
data.processOpData.multiplydata.negProd = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// arithmlogic
|
||||||
|
else {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
instr->type = a64inst_DPIMMEDIATE;
|
instr->type = a64inst_DPIMMEDIATE;
|
||||||
a64inst_DPImmediateData data = instr->data.DPImmediateData;
|
a64inst_DPImmediateData data = instr->data.DPImmediateData;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user