parse branch labels and modify load literal struct

This commit is contained in:
EDiasAlberto 2024-06-14 20:18:35 +01:00
parent 5bb68d95e1
commit 004ba24b5a
3 changed files with 8 additions and 1 deletions

View File

@ -34,6 +34,7 @@ typedef struct {
typedef struct {
uint32_t offset;
char* label;
} a64inst_LoadLiteralData;
typedef struct {

View File

@ -25,10 +25,13 @@ void setBits(word* wrd, uint8_t lsb, uint8_t msb, word value) {
*wrd |= (value << lsb) & mask;
}
/*
static int getLabelOffset(symbol_table* table, char* label, int currentIndex) {
address target = st_get(table, label);
return target - (currentIndex * 4);
}
*/
// Generates assembled code based on the two-pass assembly method
word encodeBranch(a64inst_instruction *instr) {

View File

@ -322,6 +322,7 @@ void parseBranch(a64inst_instruction *instr, char* opcode, char *operandList[])
//define and sign extend immediate offset
//use symbol table
printf("unconditional");
instr->data.BranchData.processOpData.unconditionalData.label = operandList[1];
break;
case a64inst_REGISTER:
instr->data.BranchData.processOpData.registerData.src = getOperandNumber(operandList[1]);
@ -345,8 +346,10 @@ void parseBranch(a64inst_instruction *instr, char* opcode, char *operandList[])
} else if (strcmp(condition, "al")==0){
instr->data.BranchData.processOpData.conditionalData.cond = AL;
}
instr->data.BranchData.processOpData.unconditionalData.label = operandList[1];
break;
//calculate offset from symbol table.
}
}
}