in preprocess/asm_mips.py [0:0]
def __init__(self, asm_file, feature_file, task, raw=False):
self.asm_file = asm_file
self.feature_file = feature_file
self.task = task
self.raw = raw
self.br_types = ['j', 'jr', 'beqz']
self.op_types = [['nop'],
['jal', 'j', 'jr', 'mfhi', 'bc1t'],
['beqz', 'ldc1', 'sdc1', 'sw', 'lw','move', 'mov.d', 'cvt.d.w', 'mtc1',\
'lui', 'bnez', 'bltz','bne', 'bgez', 'beq', 'negu', 'blez', 'mfc1', 'bgtz', 'mult'],
['add.d', 'addiu', 'addu','div.d', 'mul', 'sub.d', 'subu', 'divu', 'teq', 'ori', \
'and', 'slt', 'slti', 'sltiu', 'sra', 'sll', 'andi', 'xori', 'sltu', 'or', 'xor'\
,'srl', 'div'],
['mflo','lbu','sb', 'lb', 'lhu', 'sh','srav', 'swc1']]
# combine subarrays of self.op_types into one and build id mapping
self.op_set = [op for op_ls in self.op_types for op in op_ls]
self.op2id = {}
self.id2op = {}
for op in self.op_set:
self.op2id[op] = len(self.op2id)
self.id2op[len(self.op2id)-1] = op
self.edge_types = [['next-ins'],
['ins-src', 'ins-tgt'],
['non-mem-reg', 'mem-base', 'mem-index-stride', 'mem-stride', 'mem-index', 'mem-offset', 'mem-start'],
['last-read', 'last-write']]
# combine subarrays of self.edge_types into one and build id mapping
self.edge_type_set = [et for ets in self.edge_types for et in ets]
self.edge_type_2_id = {}
for edge_type in self.edge_type_set:
self.edge_type_2_id[edge_type] = len(self.edge_type_2_id)
# self.edges is a 1d array
self.edges = []
# self.nodes is supposed to be a 2d array of shape (num_ins, _). Each
# subarray contains nodes of one pc
self.nodes = []
self.num_ins = 0
self.num_nodes = 0
# for building control flow edges through jump instructions
self.pc2node = {}
# for selecting subgraphs
self.id2node = {}
# for usage edges
self.src_vnode = {}
self.tgt_vnode = {}
# start processing assembly to graph
self.read_file()
# create nodes of type 1
self.__ins_node__()
# create nodes of type 2 and 3
for line in self.lines:
self.get_opid(line)