def getblackholeinterp(insns, descrs=[]): cw = FakeCodeWriter() cw.cpu = FakeCPU() cw.assembler = FakeAssembler() cw.assembler.insns = insns cw.assembler.descrs = descrs builder = BlackholeInterpBuilder(cw) return builder.acquire_interp()
def test_integration(): from pypy.jit.metainterp.blackhole import BlackholeInterpBuilder def f(a, b): while a > 2: b += a a -= 1 return b cw = CodeWriter() jitcode = cw.transform_func_to_jitcode(f, [5, 6]) blackholeinterpbuilder = BlackholeInterpBuilder(cw) blackholeinterp = blackholeinterpbuilder.acquire_interp() blackholeinterp.setposition(jitcode, 0) blackholeinterp.setarg_i(0, 6) blackholeinterp.setarg_i(1, 100) blackholeinterp.run() assert blackholeinterp.get_tmpreg_i() == 100 + 6 + 5 + 4 + 3
def _run_with_blackhole(testself, args): from pypy.jit.metainterp.blackhole import BlackholeInterpBuilder cw = testself.cw blackholeinterpbuilder = BlackholeInterpBuilder(cw) blackholeinterp = blackholeinterpbuilder.acquire_interp() count_i = count_r = count_f = 0 for value in args: T = lltype.typeOf(value) if T == lltype.Signed: blackholeinterp.setarg_i(count_i, value) count_i += 1 elif T == llmemory.GCREF: blackholeinterp.setarg_r(count_r, value) count_r += 1 elif T == lltype.Float: value = longlong.getfloatstorage(value) blackholeinterp.setarg_f(count_f, value) count_f += 1 else: raise TypeError(T) [jitdriver_sd] = cw.callcontrol.jitdrivers_sd blackholeinterp.setposition(jitdriver_sd.mainjitcode, 0) blackholeinterp.run() return blackholeinterp._final_result_anytype()