From 3290896f6e975caf1e25091ead0bac252ec5909f Mon Sep 17 00:00:00 2001 From: GDBWNV <93523315+GDBWNV@users.noreply.github.com> Date: Wed, 12 Jun 2024 16:55:30 +0100 Subject: [PATCH] add, adds, cmn --- src/parser.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/parser.c b/src/parser.c index 75df4a9..a11766e 100644 --- a/src/parser.c +++ b/src/parser.c @@ -178,11 +178,7 @@ void classifyOpcode(char* opcode, a64inst_instruction *instr, char *operandList[ instr->type = a64inst_DPIMMEDIATE; a64inst_DPImmediateData data = instr->data.DPImmediateData; char t = operandList[0][0]; - char *immOffset = NULL; - immOffset = strcpy(immOffset, operandList[0]); - immOffset++; - char *endptr = NULL; - int reg = strtol(immOffset, &endptr, 10); + int reg = getOperandNumber(operandList[0]); data.dest=reg; if (t == 'w') { data.regType=0; @@ -190,10 +186,25 @@ void classifyOpcode(char* opcode, a64inst_instruction *instr, char *operandList[ else { data.regType=1; } - // add + // add, adds if (opcode[1] == 'd') { 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; + + } + else { + data.processOpData.arithmData.shiftImmediate = false; + } + } + // cmn + else if (opcode == "cmn") { + data.DPIOpType = 0; + data.processOpData.arithmData.src = ZERO_REGISTER; + data.processOpData.arithmData.immediate = getOperandNumber(operandList[1]); + data.processOpData.arithmData.shiftImmediate = true; } }