Exemplo n.º 1
0
 def inst_from_row(memory: Memory, ptr: int, tid: int):
     csv_row = memory.get_row(ptr)
     csv_keys = memory.get_instruction_keys()
     new_inst = Instruction()
     new_inst.empty_inst = False
     new_inst.tid = tid
     new_inst.num = ptr
     new_inst.pc = csv_row[csv_keys["pc"]]
     new_inst.inst_name = csv_row[csv_keys["cname"]]
     new_inst.br_taken = int(csv_row[csv_keys["br_taken"]])
     new_inst.m_inst = "{0:032b}".format(int(
         csv_row[csv_keys["m_inst"]]))[::-1]
     new_inst.m_inst_hex = csv_row[csv_keys["m_inst"]]
     new_inst.anomaly = int(csv_row[csv_keys['anomaly']] if 'anomaly' in
                            csv_keys else False)
     #new_inst.anomaly = new_inst.br_taken # 100% accuracy
     new_inst.inst_grp = int(csv_row[csv_keys["inst_grp"]])
     # The trace not indicate on taken branches
     if (new_inst.inst_name == "jal") or (new_inst.inst_name == "jalr"):
         new_inst.anomaly = 1
         new_inst.br_taken = 1
         new_inst.is_jump = True
     new_inst.decode_inst()
     return new_inst