[pypy-commit] pypy resume-refactor: (fijal, rguillebert) finish resume2.py refactoring for now
fijal
noreply at buildbot.pypy.org
Sun Jan 12 12:01:37 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r68602:6cc1ba9ae765
Date: 2014-01-12 11:44 +0100
http://bitbucket.org/pypy/pypy/changeset/6cc1ba9ae765/
Log: (fijal, rguillebert) finish resume2.py refactoring for now
diff --git a/rpython/jit/metainterp/resume2.py b/rpython/jit/metainterp/resume2.py
--- a/rpython/jit/metainterp/resume2.py
+++ b/rpython/jit/metainterp/resume2.py
@@ -34,7 +34,7 @@
elif op.getopnum() == rop.LEAVE_FRAME:
self.leave_frame()
elif op.getopnum() == rop.RESUME_PUT:
- self.resume_put(op.getarg(0), op.getarg(1).getint(),
+ self.resume_put(op.getarg(0).getint(), op.getarg(1).getint(),
op.getarg(2).getint())
elif op.getopnum() == rop.RESUME_NEW:
self.resume_new(op.result, op.getdescr())
@@ -48,27 +48,30 @@
xxx
pos += 1
- def resume_put(self, box, depth, frontend_position):
+ def resume_put(self, jitframe_pos, depth, frontend_position):
jitcode = self.metainterp.framestack[-1].jitcode
- frame = self.metainterp.framestack[- depth - 1]
+ frame = self.metainterp.framestack[depth]
if frontend_position < jitcode.num_regs_i():
- self.put_box_int(frame, frontend_position, box)
+ self.put_box_int(frame, frontend_position, jitframe_pos)
elif frontend_position < (jitcode.num_regs_r() + jitcode.num_regs_i()):
self.put_box_ref(frame, frontend_position - jitcode.num_regs_i(),
- box)
+ jitframe_pos)
else:
assert frontend_position < jitcode.num_regs()
self.put_box_float(frame, frontend_position - jitcode.num_regs_r()
- - jitcode.num_regs_i(), box)
+ - jitcode.num_regs_i(), jitframe_pos)
+
+ def read_int(self, jitframe_pos):
+ return self.metainterp.cpu.get_int_value(self.deadframe, jitframe_pos)
class DirectResumeReader(AbstractResumeReader):
- pass
+ def __init__(self, *args):
+ xxx
class BoxResumeReader(AbstractResumeReader):
def __init__(self, metainterp, deadframe):
self.metainterp = metainterp
self.deadframe = deadframe
- self.backend_values = {}
def enter_frame(self, pc, jitcode):
if pc != -1:
@@ -78,24 +81,19 @@
def leave_frame(self):
self.metainterp.popframe()
- def put_box_int(self, frame, position, box):
- frame.registers_i[position] = box
+ def put_box_int(self, frame, position, jitframe_pos):
+ frame.registers_i[position] = BoxInt(self.read_int(jitframe_pos))
- def put_box_ref(self, frame, position, box):
- frame.registers_r[position] = box
+ def put_box_ref(self, frame, position, jitframe_pos):
+ xxx
+ frame.registers_r[position] = self.read_ref(jitframe_pos)
- def put_box_float(self, frame, position, box):
- frame.registers_f[position] = box
+ def put_box_float(self, frame, position, jitframe_pos):
+ xxx
+ frame.registers_f[position] = self.read_float(jitframe_pos)
def finish(self):
- cpu = self.metainterp.cpu
- for box, position in self.backend_values.iteritems():
- if box.type == 'i':
- intval = cpu.get_int_value(self.deadframe, position)
- assert isinstance(box, BoxInt)
- box.value = intval
- else:
- xxx
+ pass
def rebuild_from_resumedata(metainterp, deadframe, faildescr):
BoxResumeReader(metainterp, deadframe).rebuild(faildescr)
diff --git a/rpython/jit/metainterp/test/test_resume2.py b/rpython/jit/metainterp/test/test_resume2.py
--- a/rpython/jit/metainterp/test/test_resume2.py
+++ b/rpython/jit/metainterp/test/test_resume2.py
@@ -62,15 +62,14 @@
jitcode = JitCode("jitcode")
jitcode.setup(num_regs_i=13)
resume_loop = parse("""
- [i0]
+ []
enter_frame(-1, descr=jitcode1)
- resume_put(i0, 0, 1)
- backend_attach(i0, 10)
+ resume_put(10, 0, 1)
leave_frame()
""", namespace={'jitcode1': jitcode})
descr = Descr()
descr.rd_resume_bytecode = ResumeBytecode(resume_loop.operations)
- descr.rd_bytecode_position = 3
+ descr.rd_bytecode_position = 2
metainterp = MockMetaInterp()
metainterp.cpu = MockCPU()
rebuild_from_resumedata(metainterp, "myframe", descr)
@@ -84,25 +83,21 @@
jitcode2 = JitCode("jitcode2")
jitcode2.setup(num_regs_i=9)
resume_loop = parse("""
- [i0, i1, i2, i3]
+ []
enter_frame(-1, descr=jitcode1)
- resume_put(i0, 0, 2)
- backend_attach(i0, 11)
+ resume_put(11, 0, 2)
enter_frame(12, descr=jitcode2)
- resume_put(i1, 0, 3)
- resume_put(i2, 1, 4)
- backend_attach(i1, 12)
- backend_attach(i2, 8)
+ resume_put(12, 1, 3)
+ resume_put(8, 0, 4)
leave_frame()
- backend_attach(i3, 10)
- resume_put(i3, 0, 1)
+ resume_put(10, 0, 1)
leave_frame()
""", namespace={'jitcode1': jitcode1, 'jitcode2': jitcode2})
metainterp = MockMetaInterp()
metainterp.cpu = MockCPU()
descr = Descr()
descr.rd_resume_bytecode = ResumeBytecode(resume_loop.operations)
- descr.rd_bytecode_position = 8
+ descr.rd_bytecode_position = 5
rebuild_from_resumedata(metainterp, "myframe", descr)
assert len(metainterp.framestack) == 2
f = metainterp.framestack[-1]
@@ -113,7 +108,7 @@
assert f2.registers_i[4].getint() == 8 + 3
assert f2.registers_i[2].getint() == 11 + 3
- descr.rd_bytecode_position = 11
+ descr.rd_bytecode_position = 7
metainterp.framestack = []
rebuild_from_resumedata(metainterp, "myframe", descr)
assert len(metainterp.framestack) == 1
@@ -127,24 +122,22 @@
jitcode1 = JitCode("jitcode")
jitcode1.setup(num_regs_i=13)
base = parse("""
- [i0, i1]
+ []
enter_frame(-1, descr=jitcode1)
- resume_put(i0, 0, 0)
- backend_attach(i0, 42)
+ resume_put(42, 0, 0)
# here is the split caused by a guard
- resume_put(i1, 0, 1)
- backend_attach(i1, 1)
+ resume_put(1, 0, 1)
+ leave_frame()
""", namespace={'jitcode1': jitcode1})
bridge = parse("""
- [i2]
- resume_put(i2, 0, 1)
- backend_attach(i2, 2)
+ []
+ resume_put(2, 0, 1)
""")
descr = Descr()
- descr.rd_bytecode_position = 2
+ descr.rd_bytecode_position = 1
parent = ResumeBytecode(base.operations)
b = ResumeBytecode(bridge.operations, parent=parent,
- parent_position=3)
+ parent_position=2)
descr.rd_resume_bytecode = b
metainterp = MockMetaInterp()
metainterp.cpu = MockCPU()
@@ -168,6 +161,7 @@
""", namespace={'jitcode':jitcode1})
def test_reconstructing_resume_reader(self):
+ py.test.skip("xxx")
jitcode1 = JitCode("jitcode")
jitcode1.setup(num_regs_i=2, num_regs_f=0, num_regs_r=0)
jitcode2 = JitCode("jitcode2")
More information about the pypy-commit
mailing list