From 004ba24b5a89852c4454312e91596cd245c6dd2e Mon Sep 17 00:00:00 2001 From: EDiasAlberto Date: Fri, 14 Jun 2024 20:18:35 +0100 Subject: [PATCH] parse branch labels and modify load literal struct --- src/a64instruction/a64instruction_SingleTransfer.h | 1 + src/encode.c | 3 +++ src/parser.c | 5 ++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/a64instruction/a64instruction_SingleTransfer.h b/src/a64instruction/a64instruction_SingleTransfer.h index cbd7529..a8b134e 100644 --- a/src/a64instruction/a64instruction_SingleTransfer.h +++ b/src/a64instruction/a64instruction_SingleTransfer.h @@ -34,6 +34,7 @@ typedef struct { typedef struct { uint32_t offset; + char* label; } a64inst_LoadLiteralData; typedef struct { diff --git a/src/encode.c b/src/encode.c index 847585c..1f7ff7a 100644 --- a/src/encode.c +++ b/src/encode.c @@ -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) { diff --git a/src/parser.c b/src/parser.c index 395d18c..14b4f62 100644 --- a/src/parser.c +++ b/src/parser.c @@ -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. + } } }