# include "global.h" # include "a64instruction.h" # include "symboltable.h" //generates assembled code based on two pass assembly method word assembleBranch(a64inst_instruction *instr){ word binInstr = 0; binInstr += (5^28); //101 start of branch instr switch (instr->data.BranchData.BranchType) { case a64inst_UNCONDITIONAL: //000101 //25-0: sign extended simm26 binInstr += instr->data.processOpData.unconditionalOffset; break; case a64inst_REGISTER: //10000 //11111 //000000 //9-5: address from register //0000 binInstr += ((instr->processOpData.src)^5); break; case a64inst_CONDITIONAL: // 01010100 // 25-5: sign extended offset // 4-0: 0{condition} binInstr += ((instr->processOpData.offset)^5); binInstr += instr->processOpData.cond; break; default: break; } return binInstr; } st* firstPass(a64inst_instruction instrs[], int numInstrs){ //TODO: // -iterate over instructions, adding to symbol table // create symbol table and map labels to addresses/lines struct st table; for(int i=0; i