def test_loop(): def f(a, b): while a > 0: b += a a -= 1 return b cw = CodeWriter() jitcode = cw.transform_func_to_jitcode(f, [5, 6]) assert jitcode.code == ( "\x00\x00\x00\x10\x00" "\x01\x01\x00\x01" "\x02\x00\x01\x00" "\x03\x00\x00" "\x04\x01" # ends at 5 ) assert cw.assembler.insns == { "goto_if_not_int_gt/icL": 0, "int_add/ii>i": 1, "int_sub/ic>i": 2, "goto/L": 3, "int_return/i": 4, } assert jitcode.num_regs_i() == 2 assert jitcode.num_regs_r() == 0 assert jitcode.num_regs_f() == 0 assert jitcode._live_vars(5) == "%i0 %i1" # from pypy.jit.codewriter.jitcode import MissingLiveness for i in range(len(jitcode.code) + 1): if i != 5: py.test.raises(MissingLiveness, jitcode._live_vars, i)
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