def link_lui(line, tokens, symbols, off): #LUI rd, imm if (len(tokens) == 3): try: rd = token_to_reg(tokens[1]) imm = token_to_int(tokens[2], 0, symbols, off) return iformat.le_encode(iformat.compile_u(0x37, rd, imm)) except: print("Unable to parse line " + str(line) + " : " + str(tokens)) else: print("Missing tokens in line " + str(line) + " : " + str(tokens)) raise
def link_auipc(line, tokens, symbols, off): #AUIPC rd, label if (len(tokens) == 3): try: rd = token_to_reg(tokens[1]) imm = pc_relative_symbol(tokens[2], off, symbols) return iformat.le_encode(iformat.compile_u(0x17, rd, imm)) except: print("Unable to parse line " + str(line) + " : " + str(tokens)) else: print("Missing tokens in line " + str(line) + " : " + str(tokens)) raise
def link_dw(line, tokens, symbols, off): #DW imm32 if len(tokens) == 2: try: imm = token_to_int(tokens[1], 0, symbols, off) return iformat.le_encode(imm) except: print("Unable to parse line "+str(line)+" : "+str(tokens)) else: print("Missing tokens in line "+str(line)+" : "+str(tokens)) raise
def link_dw(line, tokens, symbols, off): #DW imm32 if len(tokens) == 2: try: imm = token_to_int(tokens[1], 0, symbols, off) return iformat.le_encode(imm) except: print("Unable to parse line " + str(line) + " : " + str(tokens)) else: print("Missing tokens in line " + str(line) + " : " + str(tokens)) raise
def link_lui(line, tokens, symbols, off): #LUI rd, imm if(len(tokens) == 3): try: rd = token_to_reg(tokens[1]) imm = token_to_int(tokens[2], 0, symbols, off) return iformat.le_encode(iformat.compile_u(0x37, rd, imm)) except: print("Unable to parse line "+str(line)+" : "+str(tokens)) else: print("Missing tokens in line "+str(line)+" : "+str(tokens)) raise
def link_auipc(line, tokens, symbols, off): #AUIPC rd, label if(len(tokens) == 3): try: rd = token_to_reg(tokens[1]) imm = pc_relative_symbol(tokens[2], off, symbols) return iformat.le_encode(iformat.compile_u(0x17, rd, imm)) except: print("Unable to parse line "+str(line)+" : "+str(tokens)) else: print("Missing tokens in line "+str(line)+" : "+str(tokens)) raise
def link_jal(line, tokens, symbols, off): #JAL rd, label if(len(tokens) == 3): try: rd = token_to_reg(tokens[1]) imm = int(pc_relative_symbol(tokens[2], off, symbols) / 1) return iformat.le_encode(iformat.compile_u(0x6F, rd, iformat.jal_imm_split(imm))) except: print("Unable to parse line "+str(line)+" : "+str(tokens)) else: print("Missing tokens in line "+str(line)+" : "+str(tokens)) raise
def link_jal(line, tokens, symbols, off): #JAL rd, label if (len(tokens) == 3): try: rd = token_to_reg(tokens[1]) imm = int(pc_relative_symbol(tokens[2], off, symbols) / 1) return iformat.le_encode( iformat.compile_u(0x6F, rd, iformat.jal_imm_split(imm))) except: print("Unable to parse line " + str(line) + " : " + str(tokens)) else: print("Missing tokens in line " + str(line) + " : " + str(tokens)) raise
def link_jalr(line, tokens, symbols, off): #JALR rd, rs, label if(len(tokens) == 4): try: rd = token_to_reg(tokens[1]) rs = token_to_reg(tokens[2]) imm = pc_relative_symbol(tokens[3], off, symbols) return iformat.le_encode(iformat.compile_i(0x67, rd, 0, rs, imm)) except: print("Unable to parse line "+str(line)+" : "+str(tokens)) else: print("Missing tokens in line "+str(line)+" : "+str(tokens)) raise
def link_jalr(line, tokens, symbols, off): #JALR rd, rs, label if (len(tokens) == 4): try: rd = token_to_reg(tokens[1]) rs = token_to_reg(tokens[2]) imm = pc_relative_symbol(tokens[3], off, symbols) return iformat.le_encode(iformat.compile_i(0x67, rd, 0, rs, imm)) except: print("Unable to parse line " + str(line) + " : " + str(tokens)) else: print("Missing tokens in line " + str(line) + " : " + str(tokens)) raise
def link_rtor(line, tokens, symbols, off, funct3, funct7): #XX rd, rs1, rs2 if(len(tokens) == 4): try: rd = token_to_reg(tokens[1]) rs1 = token_to_reg(tokens[2]) rs2 = token_to_reg(tokens[3]) return iformat.le_encode(iformat.compile_s(0x33, rd, funct3, rs1, rs2, funct7)) except: print("Unable to parse line "+str(line)+" : "+str(tokens)) else: print("Missing tokens in line "+str(line)+" : "+str(tokens)) raise
def link_shift(line, tokens, symbols, off, funct3, immu7): #XI rd, rs, imm if(len(tokens) == 4): try: rd = token_to_reg(tokens[1]) rs = token_to_reg(tokens[2]) imm = token_to_int(tokens[3], 0, symbols, off) return iformat.le_encode(iformat.compile_i_s(0x13, rd, funct3, rs, imm, immu7)) except Exception as e: print("Unable to parse line "+str(line)+" : "+str(tokens)) else: print("Missing tokens in line "+str(line)+" : "+str(tokens)) raise
def link_lx(line, tokens, symbols, off, funct3): #lx rd, rs, imm if(len(tokens) == 4): try: rd = token_to_reg(tokens[1]) rs = token_to_reg(tokens[2]) imm = token_to_int(tokens[3], 0, symbols, off) return iformat.le_encode(iformat.compile_i(0x3, rd, funct3, rs, imm)) except: print("Unable to parse line "+str(line)+" : "+str(tokens)) else: print("Missing tokens in line "+str(line)+" : "+str(tokens)) raise
def link_cbranch(line, tokens, symbols, off, funct3): #BXX rd, rs, label if(len(tokens) == 4): try: rs1 = token_to_reg(tokens[1]) rs2 = token_to_reg(tokens[2]) imm = int(pc_relative_symbol(tokens[3], off, symbols) / 1) imms = iformat.sb_imm_split(imm) return iformat.le_encode(iformat.compile_sb(0x63, imms[0], funct3, rs1, rs2, imms[1])) except: print("Unable to parse line "+str(line)+" : "+str(tokens)) else: print("Missing tokens in line "+str(line)+" : "+str(tokens)) raise
def link_lx(line, tokens, symbols, off, funct3): #lx rd, rs, imm if (len(tokens) == 4): try: rd = token_to_reg(tokens[1]) rs = token_to_reg(tokens[2]) imm = token_to_int(tokens[3], 0, symbols, off) return iformat.le_encode( iformat.compile_i(0x3, rd, funct3, rs, imm)) except: print("Unable to parse line " + str(line) + " : " + str(tokens)) else: print("Missing tokens in line " + str(line) + " : " + str(tokens)) raise
def link_shift(line, tokens, symbols, off, funct3, immu7): #XI rd, rs, imm if (len(tokens) == 4): try: rd = token_to_reg(tokens[1]) rs = token_to_reg(tokens[2]) imm = token_to_int(tokens[3], 0, symbols, off) return iformat.le_encode( iformat.compile_i_s(0x13, rd, funct3, rs, imm, immu7)) except Exception as e: print("Unable to parse line " + str(line) + " : " + str(tokens)) else: print("Missing tokens in line " + str(line) + " : " + str(tokens)) raise
def link_rtor(line, tokens, symbols, off, funct3, funct7): #XX rd, rs1, rs2 if (len(tokens) == 4): try: rd = token_to_reg(tokens[1]) rs1 = token_to_reg(tokens[2]) rs2 = token_to_reg(tokens[3]) return iformat.le_encode( iformat.compile_s(0x33, rd, funct3, rs1, rs2, funct7)) except: print("Unable to parse line " + str(line) + " : " + str(tokens)) else: print("Missing tokens in line " + str(line) + " : " + str(tokens)) raise
def link_sx(line, tokens, symbols, off, funct3): #SX rs1, rs2, imm --writes rs2 to [rs1] if(len(tokens) == 4): try: rs1 = token_to_reg(tokens[1]) rs2 = token_to_reg(tokens[2]) imm = token_to_int(tokens[3], 0, symbols, off) imm1 = int(imm & 0x1F) imm2 = int(iformat.rshift(imm, 5) & 0x7F) return iformat.le_encode(iformat.compile_s(0x23, imm1, funct3, rs1, rs2, imm2)) except: print("Unable to parse line "+str(line)+" : "+str(tokens)) else: print("Missing tokens in line "+str(line)+" : "+str(tokens)) raise
def link_cbranch(line, tokens, symbols, off, funct3): #BXX rd, rs, label if (len(tokens) == 4): try: rs1 = token_to_reg(tokens[1]) rs2 = token_to_reg(tokens[2]) imm = int(pc_relative_symbol(tokens[3], off, symbols) / 1) imms = iformat.sb_imm_split(imm) return iformat.le_encode( iformat.compile_sb(0x63, imms[0], funct3, rs1, rs2, imms[1])) except: print("Unable to parse line " + str(line) + " : " + str(tokens)) else: print("Missing tokens in line " + str(line) + " : " + str(tokens)) raise
def link_sx(line, tokens, symbols, off, funct3): #SX rs1, rs2, imm --writes rs2 to [rs1] if (len(tokens) == 4): try: rs1 = token_to_reg(tokens[1]) rs2 = token_to_reg(tokens[2]) imm = token_to_int(tokens[3], 0, symbols, off) imm1 = int(imm & 0x1F) imm2 = int(iformat.rshift(imm, 5) & 0x7F) return iformat.le_encode( iformat.compile_s(0x23, imm1, funct3, rs1, rs2, imm2)) except: print("Unable to parse line " + str(line) + " : " + str(tokens)) else: print("Missing tokens in line " + str(line) + " : " + str(tokens)) raise