create helper function to handle label offsets

This commit is contained in:
EDiasAlberto 2024-06-14 19:55:32 +01:00
parent 16e52a9421
commit fd165aae47

View File

@ -26,9 +26,15 @@ void setBits(word* wrd, uint8_t lsb, uint8_t msb, word value) {
*wrd |= (value << lsb) & mask; *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 // 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; word wrd = 0;
switch (instr->data.BranchData.BranchType) { 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. // Labels are handled in the first pass and used for addressing.
break; break;
case a64inst_BRANCH: case a64inst_BRANCH:
arr[index] = encodeBranch(&inst); arr[index] = encodeBranch(&inst, index);
index++; index++;
default: default:
break; break;