From fd165aae472bb46eede569c4d75e3bcfeb56d795 Mon Sep 17 00:00:00 2001 From: EDiasAlberto Date: Fri, 14 Jun 2024 19:55:32 +0100 Subject: [PATCH] create helper function to handle label offsets --- src/encode.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/encode.c b/src/encode.c index df51d4b..22173dc 100644 --- a/src/encode.c +++ b/src/encode.c @@ -26,9 +26,15 @@ void setBits(word* wrd, uint8_t lsb, uint8_t msb, word value) { *wrd |= (value << lsb) & mask; } +int calculateLabelOffset(char *label, int wordArrIndex, symboltable *st){ + int labelAddress = st.get(label); + int currInstrAddr = wordArrIndex * 4; + int totalOffset = labelAddress - currInstrAddr; + return totalOffset; +} // Generates assembled code based on the two-pass assembly method -word encodeBranch(a64inst_instruction *instr) { +word encodeBranch(a64inst_instruction *instr, int wordArrIndex) { word wrd = 0; switch (instr->data.BranchData.BranchType) { @@ -214,7 +220,7 @@ word *encode(a64inst_instruction insts[], int instCount, st* table) { // Labels are handled in the first pass and used for addressing. break; case a64inst_BRANCH: - arr[index] = encodeBranch(&inst); + arr[index] = encodeBranch(&inst, index); index++; default: break;