diff --git a/src/parser.c b/src/parser.c index 0f57bb7..037188f 100644 --- a/src/parser.c +++ b/src/parser.c @@ -16,22 +16,19 @@ //calculate offsets from string void calcluateAddressFormat(a64inst_instruction *instr, char *operandList[]){ - if(strcmp(operandList[0][strlen(operandList[0])-1], "{") == 0) { - //unsigned immediate offset - instr->data.processOpData.addressingMode = a64inst_UNSIGNED_OFFSET; + + if(strcmp(operandList[1][strlen(operandList[1])-1], "!")==0){ + instr->data.processOpData.addressingMode = a64inst_PRE_INDEXED; } else if(strcmp(operandList[0][strlen(operandList[0])-1], "]") == 0) { //post-indexed instr->data.processOpData.addressingMode = a64inst_POST_INDEXED; + } else if( (strcmp(operandList[1][strlen(operandList[1])-1], "x") == 0) + || (strcmp(operandList[1][strlen(operandList[1])-1], "w") == 0)){ + //register + instr->data.processOpData.addressingMode = a64inst_REGISTER_OFFSET; } else { - //check second operand to distinguish between pre-indexed and register - if(strcmp(operandList[1][0], "#")==0){ - //pre-indexed - instr->data.processOpData.addressingMode = a64inst_PRE_INDEXED; - } else { - //register - instr->data.processOpData.addressingMode = a64inst_REGISTER_OFFSET; - } - } + instr->data.processOpData.addressingMode = a64inst_UNSIGNED_OFFSET; + } } void generateLoadStoreOperands(a64inst_instruction *instr, char *opcode, char *operandList[]){