[pypy-commit] pypy resume-refactor: (fijal, arigo) refactor test_jump

fijal noreply at buildbot.pypy.org
Wed Oct 16 18:38:15 CEST 2013


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r67432:17dfffc116ff
Date: 2013-10-16 18:25 +0200
http://bitbucket.org/pypy/pypy/changeset/17dfffc116ff/

Log:	(fijal, arigo) refactor test_jump

diff --git a/rpython/jit/backend/test/runner_test.py b/rpython/jit/backend/test/runner_test.py
--- a/rpython/jit/backend/test/runner_test.py
+++ b/rpython/jit/backend/test/runner_test.py
@@ -1270,14 +1270,21 @@
             print 'Passing %d arguments around...' % nb_args
             #
             inputargs = []
+            floatargs = []
+            intargs = []
+            refargs = []
             for k in range(nb_args):
                 kind = r.randrange(0, numkinds)
                 if kind == 0:
-                    inputargs.append(BoxInt())
+                    box = BoxInt()
+                    intargs.append(box)
                 elif kind == 1:
-                    inputargs.append(BoxPtr())
+                    box = BoxPtr()
+                    refargs.append(box)
                 else:
-                    inputargs.append(BoxFloat())
+                    box = BoxFloat()
+                    floatargs.append(box)
+                inputargs.append(box)
             jumpargs = []
             remixing = []
             for srcbox in inputargs:
@@ -1289,25 +1296,46 @@
                     otherbox = srcbox
                 jumpargs.append(otherbox)
             #
-            index_counter = r.randrange(0, len(inputargs)+1)
+            index_counter = 0 #r.randrange(0, len(inputargs)+1)
             i0 = BoxInt()
             i1 = BoxInt()
             i2 = BoxInt()
             inputargs.insert(index_counter, i0)
+            intargs.insert(index_counter, i0)
             jumpargs.insert(index_counter, i1)
             #
             looptoken = JitCellToken()
             targettoken = TargetToken()
             faildescr = BasicFailDescr(15)
+            jitcode = JitCode("jitcode")
+            jitcode.setup(num_regs_i=len(intargs), num_regs_r=len(refargs),
+                          num_regs_f=len(floatargs))
             operations = [
+                ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None,
+                             descr=jitcode),
                 ResOperation(rop.LABEL, inputargs, None, descr=targettoken),
                 ResOperation(rop.INT_SUB, [i0, ConstInt(1)], i1),
                 ResOperation(rop.INT_GE, [i1, ConstInt(0)], i2),
+            ]
+            for i in range(len(intargs)):
+                operations.append(ResOperation(rop.RESUME_PUT,
+                                               [intargs[i], ConstInt(0),
+                                                ConstInt(i)], None))
+            for i in range(len(refargs)):
+                pos = i + len(intargs)
+                operations.append(ResOperation(rop.RESUME_PUT,
+                                               [refargs[i], ConstInt(0),
+                                                ConstInt(pos)], None))
+            for i in range(len(floatargs)):
+                pos = i + len(intargs) + len(refargs)
+                operations.append(ResOperation(rop.RESUME_PUT,
+                                               [floatargs[i], ConstInt(0),
+                                                ConstInt(pos)], None))
+            operations.extend([
                 ResOperation(rop.GUARD_TRUE, [i2], None),
                 ResOperation(rop.JUMP, jumpargs, None, descr=targettoken),
-                ]
-            operations[3].setfailargs(inputargs[:])
-            operations[3].setdescr(faildescr)
+                ])
+            operations[-2].setdescr(faildescr)
             #
             self.cpu.compile_loop(None, inputargs, operations, looptoken)
             #
@@ -1315,14 +1343,15 @@
             S = lltype.GcStruct('S')
             for box in inputargs:
                 if isinstance(box, BoxInt):
-                    values.append(r.randrange(-10000, 10000))
+                    v = r.randrange(-10000, 10000)
                 elif isinstance(box, BoxPtr):
                     p = lltype.malloc(S)
-                    values.append(lltype.cast_opaque_ptr(llmemory.GCREF, p))
+                    v = lltype.cast_opaque_ptr(llmemory.GCREF, p)
                 elif isinstance(box, BoxFloat):
-                    values.append(longlong.getfloatstorage(r.random()))
+                    v = longlong.getfloatstorage(r.random())
                 else:
                     assert 0
+                values.append(v)
             values[index_counter] = 11
             #
             deadframe = self.cpu.execute_token(looptoken, *values)
@@ -1339,16 +1368,26 @@
             #
             assert dstvalues[index_counter] == 11
             dstvalues[index_counter] = 0
-            for i, (box, val) in enumerate(zip(inputargs, dstvalues)):
-                if isinstance(box, BoxInt):
-                    got = self.cpu.get_int_value(deadframe, i)
-                elif isinstance(box, BoxPtr):
-                    got = self.cpu.get_ref_value(deadframe, i)
-                elif isinstance(box, BoxFloat):
-                    got = self.cpu.get_float_value(deadframe, i)
+            locs = rebuild_locs_from_resumedata(fail)
+            intvals = []
+            refvals = []
+            floatvals = []
+            for val in dstvalues:
+                if isinstance(val, int):
+                    intvals.append(val)
+                elif isinstance(val, float):
+                    floatvals.append(val)
                 else:
-                    assert 0
-                assert type(got) == type(val)
+                    refvals.append(val)
+            for i, val in enumerate(intvals):
+                got = self.cpu.get_int_value(deadframe, locs, i)
+                assert got == val
+            for i, val in enumerate(refvals):
+                got = self.cpu.get_ref_value(deadframe, locs, i + len(intvals))
+                assert got == val
+            for i, val in enumerate(floatvals):
+                got = self.cpu.get_float_value(deadframe, locs,
+                                               i + len(intvals) + len(refvals))
                 assert got == val
 
     def test_compile_bridge_float(self):
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
@@ -56,7 +56,8 @@
         if frontend_position < jitcode.num_regs_i():
             self.put_box_int(frame, frontend_position, box)
         elif frontend_position < (jitcode.num_regs_r() + jitcode.num_regs_i()):
-            xxx
+            self.put_box_ref(frame, frontend_position - jitcode.num_regs_i(),
+                             box)
         else:
             assert frontend_position < jitcode.num_regs()
             self.put_box_float(frame, frontend_position - jitcode.num_regs_r()
@@ -85,6 +86,9 @@
     def put_box_int(self, frame, position, box):
         frame.registers_i[position] = box
 
+    def put_box_ref(self, frame, position, box):
+        frame.registers_r[position] = box
+
     def put_box_float(self, frame, position, box):
         frame.registers_f[position] = box
 


More information about the pypy-commit mailing list