def __init__()

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)