コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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
コード例 #6
0
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
コード例 #7
0
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		
コード例 #8
0
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
コード例 #9
0
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	
コード例 #10
0
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
コード例 #11
0
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
コード例 #12
0
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	
コード例 #13
0
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
コード例 #14
0
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
コード例 #15
0
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
コード例 #16
0
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
コード例 #17
0
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
コード例 #18
0
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	
コード例 #19
0
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
コード例 #20
0
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