Author: Maciej Fijalkowski <[email protected]> Branch: vmprof Changeset: r75722:51a273f1d8e1 Date: 2015-02-05 13:21 +0200 http://bitbucket.org/pypy/pypy/changeset/51a273f1d8e1/
Log: shuffle the imports around diff --git a/rpython/jit/backend/llsupport/asmmemmgr.py b/rpython/jit/backend/llsupport/asmmemmgr.py --- a/rpython/jit/backend/llsupport/asmmemmgr.py +++ b/rpython/jit/backend/llsupport/asmmemmgr.py @@ -4,86 +4,11 @@ from rpython.rlib import rmmap from rpython.rlib.debug import debug_start, debug_print, debug_stop from rpython.rlib.debug import have_debug_prints -from rpython.rtyper.lltypesystem import lltype, llmemory, rffi +from rpython.rtyper.lltypesystem import lltype, rffi from rpython.rlib.rbisect import bisect, bisect_tuple -from rpython.rlib import rgc -from rpython.rlib.entrypoint import jit_entrypoint _memmngr = None # global reference so we can use @entrypoint :/ -@jit_entrypoint([lltype.Signed], lltype.Signed, - c_name='pypy_jit_stack_depth_at_loc') [email protected]_collect -def stack_depth_at_loc(loc): - global _memmngr - - pos = bisect(_memmngr.jit_addr_map, loc) - if pos == 0 or pos == len(_memmngr.jit_addr_map): - return -1 - return _memmngr.jit_frame_depth_map[pos-1] - -@jit_entrypoint([], lltype.Signed, c_name='pypy_jit_start_addr') -def jit_start_addr(): - global _memmngr - - return _memmngr.jit_addr_map[0] - -@jit_entrypoint([], lltype.Signed, c_name='pypy_jit_end_addr') -def jit_end_addr(): - global _memmngr - - return _memmngr.jit_addr_map[-1] - -@jit_entrypoint([lltype.Signed], lltype.Signed, - c_name='pypy_find_codemap_at_addr') -def find_codemap_at_addr(addr): - global _memmngr - - res = bisect_tuple(_memmngr.jit_codemap, addr) - 1 - if res == len(_memmngr.jit_codemap): - return -1 - return res - -@jit_entrypoint([lltype.Signed, lltype.Signed, - rffi.CArrayPtr(lltype.Signed)], lltype.Signed, - c_name='pypy_yield_codemap_at_addr') -def yield_bytecode_at_addr(codemap_no, addr, current_pos_addr): - """ will return consecutive unique_ids from codemap, starting from position - `pos` until addr - """ - global _memmngr - - codemap = _memmngr.jit_codemap[codemap_no] - current_pos = current_pos_addr[0] - start_addr = codemap[0] - rel_addr = addr - start_addr - while True: - if current_pos >= len(codemap[2]): - return 0 - next_start = codemap[2][current_pos + 1] - if next_start > rel_addr: - return 0 - next_stop = codemap[2][current_pos + 2] - if next_stop > rel_addr: - current_pos_addr[0] = current_pos + 4 - return codemap[2][current_pos] - # we need to skip potentially more than one - current_pos = codemap[2][current_pos + 3] - -def unpack_traceback(addr): - codemap_pos = find_codemap_at_addr(addr) - assert codemap_pos >= 0 - storage = lltype.malloc(rffi.CArray(lltype.Signed), 1, flavor='raw') - storage[0] = 0 - res = [] - while True: - item = yield_bytecode_at_addr(codemap_pos, addr, storage) - if item == 0: - break - res.append(item) - lltype.free(storage, flavor='raw') - return res - class AsmMemoryManager(object): LARGE_ALLOC_SIZE = 1024 * 1024 # 1MB diff --git a/rpython/jit/backend/llsupport/codemap.py b/rpython/jit/backend/llsupport/codemap.py --- a/rpython/jit/backend/llsupport/codemap.py +++ b/rpython/jit/backend/llsupport/codemap.py @@ -9,7 +9,85 @@ """ -from rpython.jit.backend.llsupport.asmmemmgr import unpack_traceback +from rpython.rlib import rgc +from rpython.rlib.entrypoint import jit_entrypoint +from rpython.jit.backend.llsupport import asmmemmgr +from rpython.rlib.rbisect import bisect, bisect_tuple +from rpython.rtyper.lltypesystem import lltype, rffi + +@jit_entrypoint([lltype.Signed], lltype.Signed, + c_name='pypy_jit_stack_depth_at_loc') [email protected]_collect +def stack_depth_at_loc(loc): + _memmngr = asmmemmgr._memmngr + + pos = bisect(_memmngr.jit_addr_map, loc) + if pos == 0 or pos == len(_memmngr.jit_addr_map): + return -1 + return _memmngr.jit_frame_depth_map[pos-1] + +@jit_entrypoint([], lltype.Signed, c_name='pypy_jit_start_addr') +def jit_start_addr(): + _memmngr = asmmemmgr._memmngr + + return _memmngr.jit_addr_map[0] + +@jit_entrypoint([], lltype.Signed, c_name='pypy_jit_end_addr') +def jit_end_addr(): + _memmngr = asmmemmgr._memmngr + + return _memmngr.jit_addr_map[-1] + +@jit_entrypoint([lltype.Signed], lltype.Signed, + c_name='pypy_find_codemap_at_addr') +def find_codemap_at_addr(addr): + _memmngr = asmmemmgr._memmngr + + res = bisect_tuple(_memmngr.jit_codemap, addr) - 1 + if res == len(_memmngr.jit_codemap): + return -1 + return res + +@jit_entrypoint([lltype.Signed, lltype.Signed, + rffi.CArrayPtr(lltype.Signed)], lltype.Signed, + c_name='pypy_yield_codemap_at_addr') +def yield_bytecode_at_addr(codemap_no, addr, current_pos_addr): + """ will return consecutive unique_ids from codemap, starting from position + `pos` until addr + """ + _memmngr = asmmemmgr._memmngr + + codemap = _memmngr.jit_codemap[codemap_no] + current_pos = current_pos_addr[0] + start_addr = codemap[0] + rel_addr = addr - start_addr + while True: + if current_pos >= len(codemap[2]): + return 0 + next_start = codemap[2][current_pos + 1] + if next_start > rel_addr: + return 0 + next_stop = codemap[2][current_pos + 2] + if next_stop > rel_addr: + current_pos_addr[0] = current_pos + 4 + return codemap[2][current_pos] + # we need to skip potentially more than one + current_pos = codemap[2][current_pos + 3] + +def unpack_traceback(addr): + codemap_pos = find_codemap_at_addr(addr) + assert codemap_pos >= 0 + storage = lltype.malloc(rffi.CArray(lltype.Signed), 1, flavor='raw') + storage[0] = 0 + res = [] + while True: + item = yield_bytecode_at_addr(codemap_pos, addr, storage) + if item == 0: + break + res.append(item) + lltype.free(storage, flavor='raw') + return res + class CodemapBuilder(object): def __init__(self): diff --git a/rpython/jit/backend/x86/test/test_recursive.py b/rpython/jit/backend/x86/test/test_recursive.py --- a/rpython/jit/backend/x86/test/test_recursive.py +++ b/rpython/jit/backend/x86/test/test_recursive.py @@ -2,7 +2,7 @@ from rpython.jit.metainterp.test.test_recursive import RecursiveTests from rpython.jit.backend.x86.test.test_basic import Jit386Mixin from rpython.jit.backend.llsupport import asmmemmgr -from rpython.jit.backend.llsupport.asmmemmgr import unpack_traceback +from rpython.jit.backend.llsupport.codemap import unpack_traceback from rpython.jit.backend.x86.arch import WORD class TestRecursive(Jit386Mixin, RecursiveTests): _______________________________________________ pypy-commit mailing list [email protected] https://mail.python.org/mailman/listinfo/pypy-commit
