preprocess/asm_mips.py [93:132]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    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)

  def read_file(self):
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



preprocess/asm_obj.py [135:179]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    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

    # edge types we support
    # self.edge_types[0] are edges between type 1 nodes
    # self.edge_types[1] are edges between nodes of type 1 and 2
    # self.edge_types[2] are edges between nodes of type 2 and 3
    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)

  def read_file(self):
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



