corrections to arithmetic DPI
This commit is contained in:
parent
f5dabe26b2
commit
31b5174b20
25
src/parser.c
25
src/parser.c
@ -178,8 +178,6 @@ void classifyOpcode(char* opcode, a64inst_instruction *instr, char *operandList[
|
|||||||
instr->type = a64inst_DPIMMEDIATE;
|
instr->type = a64inst_DPIMMEDIATE;
|
||||||
a64inst_DPImmediateData data = instr->data.DPImmediateData;
|
a64inst_DPImmediateData data = instr->data.DPImmediateData;
|
||||||
char t = operandList[0][0];
|
char t = operandList[0][0];
|
||||||
int reg = getOperandNumber(operandList[0]);
|
|
||||||
data.dest=reg;
|
|
||||||
if (t == 'w') {
|
if (t == 'w') {
|
||||||
data.regType=0;
|
data.regType=0;
|
||||||
}
|
}
|
||||||
@ -190,6 +188,7 @@ void classifyOpcode(char* opcode, a64inst_instruction *instr, char *operandList[
|
|||||||
// add, adds
|
// add, adds
|
||||||
if (opcode[1] == 'd') {
|
if (opcode[1] == 'd') {
|
||||||
data.DPIOpType = 0;
|
data.DPIOpType = 0;
|
||||||
|
data.dest = getOperandNumber(operandList[0]);
|
||||||
data.processOpData.arithmData.src = getOperandNumber(operandList[1]);
|
data.processOpData.arithmData.src = getOperandNumber(operandList[1]);
|
||||||
data.processOpData.arithmData.immediate = getOperandNumber(operandList[2]);
|
data.processOpData.arithmData.immediate = getOperandNumber(operandList[2]);
|
||||||
if (opcode[-1] == 's') {
|
if (opcode[-1] == 's') {
|
||||||
@ -204,7 +203,8 @@ void classifyOpcode(char* opcode, a64inst_instruction *instr, char *operandList[
|
|||||||
// cmn
|
// cmn
|
||||||
else if (opcode == "cmn") {
|
else if (opcode == "cmn") {
|
||||||
data.DPIOpType = 0;
|
data.DPIOpType = 0;
|
||||||
data.processOpData.arithmData.src = ZERO_REGISTER;
|
data.dest = ZERO_REGISTER;
|
||||||
|
data.processOpData.arithmData.src = getOperandNumber(operandList[0]);
|
||||||
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;
|
data.processOp = 1;
|
||||||
@ -212,6 +212,7 @@ void classifyOpcode(char* opcode, a64inst_instruction *instr, char *operandList[
|
|||||||
// sub, subs
|
// sub, subs
|
||||||
else if (opcode[0] == 's') {
|
else if (opcode[0] == 's') {
|
||||||
data.DPIOpType = 0;
|
data.DPIOpType = 0;
|
||||||
|
data.dest = getOperandNumber(operandList[0]);
|
||||||
data.processOpData.arithmData.src = getOperandNumber(operandList[1]);
|
data.processOpData.arithmData.src = getOperandNumber(operandList[1]);
|
||||||
data.processOpData.arithmData.immediate = getOperandNumber(operandList[2]);
|
data.processOpData.arithmData.immediate = getOperandNumber(operandList[2]);
|
||||||
if (opcode[-1] == 's') {
|
if (opcode[-1] == 's') {
|
||||||
@ -226,11 +227,27 @@ void classifyOpcode(char* opcode, a64inst_instruction *instr, char *operandList[
|
|||||||
// cmp
|
// cmp
|
||||||
else if (opcode == 'cmp') {
|
else if (opcode == 'cmp') {
|
||||||
data.DPIOpType = 0;
|
data.DPIOpType = 0;
|
||||||
data.processOpData.arithmData.src = ZERO_REGISTER;
|
data.dest = ZERO_REGISTER;
|
||||||
|
data.processOpData.arithmData.src = getOperandNumber(operandList[0]);
|
||||||
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 = 3;
|
data.processOp = 3;
|
||||||
}
|
}
|
||||||
|
// neg, negs
|
||||||
|
else if (opcode[0] == 'n') {
|
||||||
|
data.DPIOpType = 0;
|
||||||
|
data.dest = getOperandNumber(operandList[1]);
|
||||||
|
data.processOpData.arithmData.src = ZERO_REGISTER;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
// wide move
|
// wide move
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user