[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