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 {
|
||||
if(classifyDPInst(operandList)){
|
||||
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 {
|
||||
instr->type = a64inst_DPIMMEDIATE;
|
||||
a64inst_DPImmediateData data = instr->data.DPImmediateData;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user