예제 #1
0
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)
예제 #2
0
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