def instr_lui(self, node): 'imm[31:12] rd opcode' instr = node['instr'] opcode = instructions.get_opcode(instr) rd = self.register_bin(node['rd']) imm = node['imm'] return f'{imm}{rd}{opcode}'
def instr_load(self, node): 'imm[11:0] rs1 func3 rd opcode' instr = node['instr'] opcode = instructions.get_opcode(instr) imm = node['imm'] rd = self.register_bin(node['rd']) rs1 = self.register_bin(node['rs1']) func3 = instructions.get_func3(instr) return f'{imm}{rs1}{func3}{rd}{opcode}'
def type_r(self, node): 'func7 rs2 rs1 func3 rd opcode' instr = node['instr'] opcode = instructions.get_opcode(instr) rd = self.register_bin(node['rd']) func3 = instructions.get_func3(instr) rs1 = self.register_bin(node['rs1']) rs2 = self.register_bin(node['rs2']) func7 = instructions.get_func7(instr) return f'{func7}{rs2}{rs1}{func3}{rd}{opcode}'
def type_i(self, node): 'imm[11:0] rs1 func3 rd opcode' instr = node['instr'] opcode = instructions.get_opcode(instr) rd = self.register_bin(node['rd']) func3 = instructions.get_func3(instr) rs1 = self.register_bin(node['rs1']) imm = node['imm'] assert len(imm) == 12 return f'{imm}{rs1}{func3}{rd}{opcode}'
def instr_jal(self, node): 'imm[20] imm[10:1] imm[11] imm[19:12] rd opcode' instr = node['instr'] opcode = instructions.get_opcode(instr) rd = self.register_bin(node['rd']) imm = node['imm'] imm_19_12 = imm[-19:-11] imm_11 = imm[-11] imm_10_1 = imm[-10:] imm_20 = imm[-20] return f'{imm_20}{imm_10_1}{imm_11}{imm_19_12}{rd}{opcode}'
def instr_store(self, node): 'imm[11:5] rs2 rs1 func3 imm[4:0] opcode' instr = node['instr'] opcode = instructions.get_opcode(instr) imm = node['imm'] imm_11_5 = imm[-12:-5] imm_4_0 = imm[-5:] rs2 = self.register_bin(node['rs2']) rs1 = self.register_bin(node['rs1']) func3 = instructions.get_func3(instr) return f'{imm_11_5}{rs2}{rs1}{func3}{imm_4_0}{opcode}'
def type_sb(self, node): 'imm[12] imm[10:5] rs2 rs1 func3 imm[4:1] imm[11] opcode' instr = node['instr'] opcode = instructions.get_opcode(instr) imm = node['imm'] imm_11 = imm[-12] imm_4_1 = imm[-4:] imm_10_5 = imm[-10:-4] imm_12 = imm[-12] func3 = instructions.get_func3(instr) rs1 = self.register_bin(node['rs1']) rs2 = self.register_bin(node['rs2']) return f'{imm_12}{imm_10_5}{rs2}{rs1}{func3}{imm_4_1}{imm_11}{opcode}'