diff --git a/src/parser.c b/src/parser.c index 3296dac..1bcf31e 100644 --- a/src/parser.c +++ b/src/parser.c @@ -14,21 +14,22 @@ // - match opcode to a64 struct types (DONE) // - count operands and match type/values // - generate final a64inst and return +// - CREATE FUNC TO TIDY UP OPERANDS IN DP //calculate offsets from string void calcluateAddressFormat(a64inst_instruction *instr, char *operandList[]){ if(strcmp(operandList[2][strlen(operandList[1])-1], "!")==0){ - instr->data.processOpData.addressingMode = a64inst_PRE_INDEXED; + instr->data.SingleTransferData.processOpData.singleDataTransferData.addressingMode = a64inst_PRE_INDEXED; } else if(strcmp(operandList[1][strlen(operandList[0])-1], "]") == 0) { //post-indexed - instr->data.processOpData.addressingMode = a64inst_POST_INDEXED; + instr->data.SingleTransferData.processOpData.singleDataTransferData.addressingMode = a64inst_POST_INDEXED; } else if( (strcmp(operandList[2][strlen(operandList[1])-1], "x") == 0) || (strcmp(operandList[2][strlen(operandList[1])-1], "w") == 0)){ //register - instr->data.SingleTransferData.singleDataTransferData.processOpData.addressingMode = a64inst_REGISTER_OFFSET; + instr->data.SingleTransferData.processOpData.singleDataTransferData.processOpData.addressingMode = a64inst_REGISTER_OFFSET; } else { - instr->data.processOpData.addressingMode = a64inst_UNSIGNED_OFFSET; + instr->data.SingleTransferData.processOpData.singleDataTransferData.addressingMode = a64inst_UNSIGNED_OFFSET; } } @@ -59,25 +60,25 @@ void generateBranchOperands(a64inst_instruction *instr, char* opcode, char *oper break; case a64inst_REGISTER: char *endptr; - instr->data.BranchData.processOpData.src = strtol(operandList[0] + 1, endptr, 2) + instr->data.BranchData.processOpData.registerData.src = strtol(operandList[0] + 1, endptr, 2) break; case a64inst_CONDITIONAL: char* condition = strtok(strdup(opcode), "b."); condition = strtok(NULL, ""); if(strcmp(condition, "eq")==0){ - instr->data.branchData.processOpData.cond = EQ; + instr->data.branchData.processOpData.conditionalData.cond = EQ; } else if (strcmp(condition, "ne")==0){ - instr->data.branchData.processOpData.cond = NE; + instr->data.branchData.processOpData.conditionalData.cond = NE; } else if (strcmp(condition, "ge")==0){ - instr->data.branchData.processOpData.cond = GE; + instr->data.branchData.processOpData.conditionalData.cond = GE; } else if (strcmp(condition, "lt")==0){ - instr->data.branchData.processOpData.cond = LT; + instr->data.branchData.processOpData.conditionalData.cond = LT; } else if (strcmp(condition, "gt")==0){ - instr->data.branchData.processOpData.cond = GT; + instr->data.branchData.processOpData.conditionalData.cond = GT; } else if (strcmp(condition, "le")==0){ - instr->data.branchData.processOpData.cond = LE; + instr->data.branchData.processOpData.conditionalData.cond = LE; } else if (srtcmp(condition, "al")==0){ - instr->data.branchData.processOpData.cond = AL; + instr->data.branchData.processOpData.conditionalData.cond = AL; } break; //calculate offset from symbol table.