Author: Maciej Fijalkowski <[email protected]>
Branch: resume-refactor
Changeset: r67422:8604e65fa007
Date: 2013-10-16 15:16 +0200
http://bitbucket.org/pypy/pypy/changeset/8604e65fa007/
Log: (fijal, agaynor) rebuild faillocs for the bridge
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
@@ -111,9 +111,7 @@
self._debug = v
return r
- def rebuild_faillocs_from_descr(self, descr, inputargs):
- XXX
- loc_positions = rebuild_locs_from_resumedata(descr)
+ def rebuild_faillocs_from_descr(self, descr, inputargs, loc_positions):
locs = [None] * len(loc_positions)
GPR_REGS = len(self.cpu.gen_regs)
XMM_REGS = len(self.cpu.float_regs)
diff --git a/rpython/jit/backend/model.py b/rpython/jit/backend/model.py
--- a/rpython/jit/backend/model.py
+++ b/rpython/jit/backend/model.py
@@ -68,8 +68,8 @@
"""
raise NotImplementedError
- def compile_bridge(self, logger, faildescr, inputargs, operations,
- original_loop_token, log=True):
+ def compile_bridge(self, logger, faildescr, inputargs, backend_positions,
+ operations, original_loop_token, log=True):
"""Assemble the bridge.
The FailDescr is the descr of the original guard that failed.
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
@@ -9,7 +9,7 @@
BoxFloat, ConstFloat)
from rpython.jit.metainterp.resoperation import ResOperation, rop
from rpython.jit.metainterp.typesystem import deref
-from rpython.jit.metainterp.resume2 import rebuild_faillocs_from_resumedata
+from rpython.jit.metainterp.test.test_resume2 import
rebuild_locs_from_resumedata
from rpython.jit.codewriter.effectinfo import EffectInfo
from rpython.jit.codewriter.jitcode import JitCode
from rpython.jit.tool.oparser import parse
@@ -246,7 +246,8 @@
ResOperation(rop.JUMP, [i1b], None, descr=targettoken),
]
- self.cpu.compile_bridge(None, faildescr1, [i1b], bridge, looptoken)
+ locs = rebuild_locs_from_resumedata(faildescr1)
+ self.cpu.compile_bridge(None, faildescr1, [i1b], locs, bridge,
looptoken)
deadframe = self.cpu.execute_token(looptoken, 2)
fail = self.cpu.get_latest_descr(deadframe)
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
@@ -514,8 +514,8 @@
return AsmInfo(ops_offset, rawstart + looppos,
size_excluding_failure_stuff - looppos)
- def assemble_bridge(self, logger, faildescr, inputargs, operations,
- original_loop_token, log):
+ def assemble_bridge(self, logger, faildescr, inputargs, backend_positions,
+ operations, original_loop_token, log):
if not we_are_translated():
# Arguments should be unique
assert len(set(inputargs)) == len(inputargs)
@@ -526,7 +526,7 @@
operations = self._inject_debugging_code(faildescr, operations,
'b', descr_number)
- arglocs = self.rebuild_faillocs_from_descr(faildescr, inputargs)
+ 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(inputargs, arglocs,
@@ -538,7 +538,7 @@
frame_depth_no_fixed_size = self._assemble(regalloc, inputargs,
operations)
codeendpos = self.mc.get_relative_pos()
self.resume_bytecode = regalloc.resumebuilder.finish(
- faildescr.rd_bytecode, original_loop_token)
+ faildescr.rd_resume_bytecode, original_loop_token)
self.write_pending_failure_recoveries()
fullsize = self.mc.get_relative_pos()
#
diff --git a/rpython/jit/backend/x86/runner.py
b/rpython/jit/backend/x86/runner.py
--- a/rpython/jit/backend/x86/runner.py
+++ b/rpython/jit/backend/x86/runner.py
@@ -93,12 +93,12 @@
return self.assembler.assemble_loop(logger, name, inputargs,
operations,
looptoken, log=log)
- def compile_bridge(self, logger, faildescr, inputargs, operations,
- original_loop_token, log=True):
+ def compile_bridge(self, logger, faildescr, inputargs, backend_positions,
+ operations, original_loop_token, log=True):
clt = original_loop_token.compiled_loop_token
clt.compiling_a_bridge()
return self.assembler.assemble_bridge(logger, faildescr, inputargs,
- operations,
+ backend_positions, operations,
original_loop_token, log=log)
def clear_latest_values(self, count):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit