Example #1
0
def r_to_r_id(items):
    fix_items = []
    v_pattern = re.compile('b\d+|h\d+|s\d+|d\d+|q\d+')
    v2_pattern = re.compile('v\d+')
    r_pattern = re.compile('r\d+|x\d+|w\d+')
    for item in items:
        if item in ['xzr', 'wzr']:
            continue
        if item in ['sp', 'wsp']:
            fix_items.append('sp')
            continue
        m = v_pattern.match(item, 0)
        if m:
            r = m.group()
            id = int(r[1:]) + 3000
            fix_items.append(str(id))
            continue
        m = v2_pattern.match(item, 0)
        if m:
            r = m.group()
            id = int(r[1:]) + 3000
            fix_items.append(str(id))
            continue
        m = r_pattern.match(item, 0)
        if m:
            r = m.group()
            id = int(r[1:]) + 2000
            fix_items.append(str(id))
            continue
        if item in ['MEM', 'NZCV']:
            fix_items.append(item)
            continue
        driver.internal_error('get_use_and_def_items: 3')
    return fix_items
Example #2
0
def get_pre_or_post_index_reg(term_a_list):
    address_mode = 0
    base = None
    for term in term_a_list:
        (tag, item) = term
        if tag == 'AS':
            address_mode = 1
        elif tag == 'AE':
            address_mode = 2
        elif tag == 'AE!':
            if base == None:
                driver.internal_error('get_pre_or_post_index_reg 1')
            return base
        elif address_mode == 1:
            if tag == 'REG':
                base = (tag, item)
                address_mode = 3
            else:
                driver.internal_error('get_pre_or_post_index_reg 2')
        elif address_mode == 2:
            if tag == 'TERM':
                return base
        else:
            pass
    return None
Example #3
0
def test_metric(target_config, metric_filename, asm_filename, function_name, db_filename):
    (bb_list, column_list) = driver.cfg_work(target_config, asm_filename, function_name)
    m = importlib.import_module(metric_filename)
    cls = find_class(m)
    if cls == None:
        driver.internal_error('No metric worker class')
    metric_worker = cls()
    driver.metric_work_body(target_config, db_filename, bb_list, column_list, metric_worker)
Example #4
0
def make_term_a_list(line):
    size = len(line)
    term_a_list = []
    pos = 0
    a_part_p = False
    b_part_p = False
    start_pos = None
    while pos < size:
        c = line[pos]
        if c == ',':
            start_pos = make_term_a_list_sub(line, term_a_list, start_pos, pos)
            if a_part_p or b_part_p:
                term_a_list.append(('c', None))
            else:
                term_a_list.append(('C', None))
        elif c == ' ' or c == '\t':
            start_pos = make_term_a_list_sub(line, term_a_list, start_pos, pos)
        elif c == '[':
            start_pos = make_term_a_list_sub(line, term_a_list, start_pos, pos)
            a_part_p = True
            term_a_list.append(('AS', None))
        elif c == ']':
            start_pos = make_term_a_list_sub(line, term_a_list, start_pos, pos)
            a_part_p = False
            term_a_list.append(('AE', None))
        elif c == '{':
            start_pos = make_term_a_list_sub(line, term_a_list, start_pos, pos)
            b_part_p = True
            term_a_list.append(('BS', None))
        elif c == '}':
            start_pos = make_term_a_list_sub(line, term_a_list, start_pos, pos)
            b_part_p = False
            term_a_list.append(('BE', None))
        elif c == '!':
            start_pos = make_term_a_list_sub(line, term_a_list, start_pos, pos)
            term_a_list.append(('BANG', None))
        elif c == '-' and b_part_p:
            start_pos = make_term_a_list_sub(line, term_a_list, start_pos, pos)
            term_a_list.append(('BAR', None))
        else:
            if start_pos == None:
                start_pos = pos
        pos += 1
    if a_part_p or b_part_p:
        driver.internal_error('make_term_a_list')
    make_term_a_list_sub(line, term_a_list, start_pos, pos)
    return term_a_list
Example #5
0
def fix_term_a_list(term_a_list):
    fix_term_a_list = []
    prev_tag = None
    prev_term = None
    for term in term_a_list:
        (tag, item) = term
        if tag == 'BANG':
            if prev_tag == 'AE':
                fix_term_a_list.append(('AE!', None))
            else:
                driver.internal_error('fix_term_a_list')
            prev_tag = None
            prev_term = None
        else:
            if prev_term:
                fix_term_a_list.append(prev_term)
            prev_tag = tag
            prev_term = term
    if prev_term:
        fix_term_a_list.append(prev_term)
    return fix_term_a_list
Example #6
0
def add_dependence(dg, execution_trace_map, index, use_items, def_items):
    for item in use_items:
        trace_list = get_execution_trace(execution_trace_map, item)
        for (tag, p_index) in trace_list:
            if tag == 'def':
                add_dependence_edge(dg, p_index, index)
                break
    for item in def_items:
        trace_list = get_execution_trace(execution_trace_map, item)
        for (tag, p_index) in trace_list:
            add_dependence_edge(dg, p_index, index)
            if tag == 'def':
                break
    trace_list = get_execution_trace(execution_trace_map, 'CALL')
    for (tag, p_index) in trace_list:
        add_dependence_edge(dg, p_index, index)
        if tag != 'def':
            driver.internal_error('add_dependence')
        break
    for item in use_items:
        put_execution_trace(execution_trace_map, index, 'use', item)
    for item in def_items:
        put_execution_trace(execution_trace_map, index, 'def', item)
Example #7
0
def get_register_id(item):
    v_pattern = re.compile('b\d+|h\d+|s\d+|d\d+|q\d+')
    v2_pattern = re.compile('v\d+')
    r_pattern = re.compile('r\d+|x\d+|w\d+')
    if item in ['xzr', 'wzr']:
        return None
    if item in ['sp', 'wsp']:
        return 'sp'
    m = v_pattern.match(item, 0)
    if m:
        r = m.group()
        id = int(r[1:]) + 3000
        return str(id)
    m = v2_pattern.match(item, 0)
    if m:
        r = m.group()
        id = int(r[1:]) + 3000
        return str(id)
    m = r_pattern.match(item, 0)
    if m:
        r = m.group()
        id = int(r[1:]) + 2000
        return str(id)
    driver.internal_error('get_register_id: ' + item)