[pypy-commit] pypy resume-refactor: (fijal, rguillebert) pass some more runner tests

fijal noreply at buildbot.pypy.org
Sun Jan 12 14:16:27 CET 2014


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r68608:7824261c8a31
Date: 2014-01-12 12:12 +0100
http://bitbucket.org/pypy/pypy/changeset/7824261c8a31/

Log:	(fijal, rguillebert) pass some more runner tests

diff --git a/rpython/jit/backend/llsupport/assembler.py b/rpython/jit/backend/llsupport/assembler.py
--- a/rpython/jit/backend/llsupport/assembler.py
+++ b/rpython/jit/backend/llsupport/assembler.py
@@ -110,27 +110,35 @@
         self._debug = v
         return r
 
-    def rebuild_faillocs_from_descr(self, descr, inputargs, loc_positions):
-        locs = [None] * len(loc_positions)
+    def rebuild_faillocs_from_descr(self, descr, inputframes, loc_positions):
+        lgt = 0
+        for frame in inputframes:
+            lgt += len(frame)
+        locs = [None] * lgt
         GPR_REGS = len(self.cpu.gen_regs)
         XMM_REGS = len(self.cpu.float_regs)
-        input_i = 0
         if self.cpu.IS_64_BIT:
             coeff = 1
         else:
             coeff = 2
-        for item, pos in enumerate(loc_positions):
-            if pos < GPR_REGS:
-                locs[item] = self.cpu.gen_regs[pos]
-            elif pos < (GPR_REGS + XMM_REGS * coeff):
-                pos = (pos - GPR_REGS) // coeff
-                locs[item] = self.cpu.float_regs[pos]
-            else:
-                i = pos - self.cpu.JITFRAME_FIXED_SIZE
-                assert i >= 0
-                tp = inputargs[input_i].type
-                locs[item] = self.new_stack_loc(i, pos * WORD, tp)
-            input_i += 1
+        locs_index = 0
+        for i, frame in enumerate(inputframes):
+            inputlocs = loc_positions[i]
+            assert len(inputlocs) == len(frame)
+            for j, item in enumerate(frame):
+                pos = inputlocs[j]
+                if pos < GPR_REGS:
+                    locs[locs_index] = self.cpu.gen_regs[pos]
+                elif pos < (GPR_REGS + XMM_REGS * coeff):
+                    pos = (pos - GPR_REGS) // coeff
+                    locs[locs_index] = self.cpu.float_regs[pos]
+                else:
+                    stack_pos = pos - self.cpu.JITFRAME_FIXED_SIZE
+                    assert stack_pos >= 0
+                    tp = item.type
+                    locs[locs_index] = self.new_stack_loc(stack_pos,
+                                                          pos * WORD, tp)
+                locs_index += 1
         return locs
 
     def store_info_on_descr(self, startspos, guardtok, resume_bytecode):
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
@@ -252,7 +252,7 @@
         fail = self.cpu.get_latest_descr(deadframe)
         assert fail.identifier == 2
         locs = rebuild_locs_from_resumedata(fail)
-        res = self.cpu.get_int_value(deadframe, locs, 0)
+        res = self.cpu.get_int_value(deadframe, 0)
         assert res == 20
 
         assert self.cpu.tracker.total_compiled_loops == 1
@@ -285,7 +285,7 @@
             bridge.append(ResOperation(rop.INT_ADD, [iprev, ConstInt(1)], i1))
             iprev = i1
         for i, i1 in enumerate(i1list):
-            bridge.append(ResOperation(rop.RESUME_PUT, [i1, ConstInt(0), ConstInt(i)], None))
+            bridge.append(ResOperation(rop.RESUME_PUT, [i1, ConstInt(1), ConstInt(i)], None))
         bridge.append(ResOperation(rop.GUARD_FALSE, [i0], None,
                                    descr=BasicFailDescr(3)))
         bridge.append(ResOperation(rop.FINISH, [], None,
@@ -299,7 +299,7 @@
         locs = rebuild_locs_from_resumedata(fail)
         assert fail.identifier == 3
         for i in range(len(i1list)):
-            res = self.cpu.get_int_value(deadframe, locs, i + 1)
+            res = self.cpu.get_int_value(deadframe, locs[1][i])
             assert res == 2 + i
 
     def test_finish(self):
@@ -321,7 +321,7 @@
         deadframe = self.cpu.execute_token(looptoken, 99)
         fail = self.cpu.get_latest_descr(deadframe)
         assert fail is faildescr
-        res = self.cpu.get_int_value(deadframe, None, 0)
+        res = self.cpu.get_int_value(deadframe, 0)
         assert res == 99
 
         looptoken = JitCellToken()
@@ -332,7 +332,7 @@
         deadframe = self.cpu.execute_token(looptoken)
         fail = self.cpu.get_latest_descr(deadframe)
         assert fail is faildescr
-        res = self.cpu.get_int_value(deadframe, None, 0)
+        res = self.cpu.get_int_value(deadframe, 0)
         assert res == 42
 
         looptoken = JitCellToken()
@@ -397,8 +397,8 @@
         deadframe = self.cpu.execute_token(looptoken, 0, 10)
         fail = self.cpu.get_latest_descr(deadframe)
         locs = rebuild_locs_from_resumedata(fail)
-        assert self.cpu.get_int_value(deadframe, locs, 0) == 0
-        assert self.cpu.get_int_value(deadframe, locs, 1) == 55
+        assert self.cpu.get_int_value(deadframe, locs[0][0]) == 0
+        assert self.cpu.get_int_value(deadframe, locs[0][1]) == 55
 
     def test_int_operations(self):
         from rpython.jit.metainterp.test.test_executor import get_int_tests
@@ -469,12 +469,13 @@
                 fail = self.cpu.get_latest_descr(deadframe)
                 if (z == boom) ^ reversed:
                     locs = rebuild_locs_from_resumedata(fail)
+                    pos = locs[0][0]
                     assert fail.identifier == 1
                 else:
-                    locs = None
+                    pos = 0
                     assert fail.identifier == 2
                 if z != boom:
-                    assert self.cpu.get_int_value(deadframe, locs, 0) == z
+                    assert self.cpu.get_int_value(deadframe, pos) == z
                 excvalue = self.cpu.grab_exc_value(deadframe)
                 assert not excvalue
 
diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -522,8 +522,9 @@
             operations = self._inject_debugging_code(faildescr, operations,
                                                      'b', descr_number)
 
+        arglocs = self.rebuild_faillocs_from_descr(faildescr, inputframes,
+                                                   backend_positions)
         inputargs = flatten(inputframes)
-        arglocs = self.rebuild_faillocs_from_descr(faildescr, inputargs, backend_positions)
         regalloc = RegAlloc(self, self.cpu.translate_support_code)
         startpos = self.mc.get_relative_pos()
         operations = regalloc.prepare_bridge(inputframes, arglocs,


More information about the pypy-commit mailing list