[pypy-svn] r68021 - in pypy/branch/kill-jumptarget/pypy/jit/backend: . llsupport llsupport/test test
arigo at codespeak.net
arigo at codespeak.net
Wed Sep 30 14:18:23 CEST 2009
Author: arigo
Date: Wed Sep 30 14:18:23 2009
New Revision: 68021
Modified:
pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/descr.py
pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/llmodel.py
pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/test/test_runner.py
pypy/branch/kill-jumptarget/pypy/jit/backend/model.py
pypy/branch/kill-jumptarget/pypy/jit/backend/test/test_random.py
Log:
Fixes to the interface.
Modified: pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/descr.py
==============================================================================
--- pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/descr.py (original)
+++ pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/descr.py Wed Sep 30 14:18:23 2009
@@ -1,7 +1,7 @@
from pypy.rpython.lltypesystem import lltype
from pypy.jit.backend.llsupport import symbolic
from pypy.jit.metainterp.history import AbstractDescr, getkind, BoxInt, BoxPtr
-from pypy.jit.metainterp.history import BasicFailDescr
+from pypy.jit.metainterp.history import BasicFailDescr, LoopToken
from pypy.jit.metainterp.resoperation import ResOperation, rop
# The point of the class organization in this file is to make instances
@@ -165,7 +165,7 @@
class BaseCallDescr(AbstractDescr):
_clsname = ''
- executable_token = None
+ loop_token = None
arg_classes = '' # <-- annotation hack
def __init__(self, arg_classes):
@@ -186,8 +186,8 @@
raise NotImplementedError
def get_token_for_call(self, cpu):
- if self.executable_token is not None:
- return self.executable_token
+ if self.loop_token is not None:
+ return self.loop_token
args = [BoxInt()] + self.instantiate_arg_classes()
if self.get_result_size(cpu.translate_support_code) == 0:
result = None
@@ -205,9 +205,10 @@
ResOperation(rop.FINISH, result_list, None,
descr=BasicFailDescr())]
operations[1].fail_args = []
- executable_token = cpu.compile_loop(args, operations)
- self.executable_token = executable_token
- return executable_token
+ loop_token = LoopToken()
+ cpu.compile_loop(args, operations, loop_token)
+ self.loop_token = loop_token
+ return loop_token
def repr_of_descr(self):
return '<%s>' % self._clsname
Modified: pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/llmodel.py (original)
+++ pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/llmodel.py Wed Sep 30 14:18:23 2009
@@ -409,9 +409,9 @@
if not we_are_translated():
assert (list(calldescr.arg_classes) ==
[arg.type for arg in args[1:]])
- executable_token = calldescr.get_token_for_call(self)
+ loop_token = calldescr.get_token_for_call(self)
set_future_values(self, args)
- self.execute_token(executable_token)
+ self.execute_token(loop_token)
# Note: if an exception is set, the rest of the code does a bit of
# nonsense but nothing wrong (the return value should be ignored)
if calldescr.returns_a_pointer():
Modified: pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/test/test_runner.py
==============================================================================
--- pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/test/test_runner.py (original)
+++ pypy/branch/kill-jumptarget/pypy/jit/backend/llsupport/test/test_runner.py Wed Sep 30 14:18:23 2009
@@ -7,7 +7,7 @@
pass
class MyLLCPU(AbstractLLCPU):
- def compile_loop(self, inputargs, operations):
+ def compile_loop(self, inputargs, operations, looptoken):
py.test.skip("llsupport test: cannot compile operations")
Modified: pypy/branch/kill-jumptarget/pypy/jit/backend/model.py
==============================================================================
--- pypy/branch/kill-jumptarget/pypy/jit/backend/model.py (original)
+++ pypy/branch/kill-jumptarget/pypy/jit/backend/model.py Wed Sep 30 14:18:23 2009
@@ -8,17 +8,21 @@
"""Called once by the front-end when the program starts."""
pass
- def compile_loop(self, inputargs, operations):
+ def compile_loop(self, inputargs, operations, looptoken):
"""Assemble the given loop.
- Return an opaque token to be consumed by execute_token"""
+ Extra attributes should be put in the LoopToken to
+ point to the compiled loop in assembler.
+ """
raise NotImplementedError
def compile_bridge(self, faildescr, inputargs, operations):
- """Assemble the bridge"""
+ """Assemble the bridge.
+ The FailDescr is the descr of the original guard that failed.
+ """
raise NotImplementedError
- def execute_token(self, executable_token):
- """Execute the generated code referenced by the executable_token
+ def execute_token(self, looptoken):
+ """Execute the generated code referenced by the looptoken.
Returns the ResOperation that failed, of type rop.FAIL.
Use set_future_value_xxx() before, and get_latest_value_xxx() after.
"""
Modified: pypy/branch/kill-jumptarget/pypy/jit/backend/test/test_random.py
==============================================================================
--- pypy/branch/kill-jumptarget/pypy/jit/backend/test/test_random.py (original)
+++ pypy/branch/kill-jumptarget/pypy/jit/backend/test/test_random.py Wed Sep 30 14:18:23 2009
@@ -159,12 +159,13 @@
#print >>s, ' operations[%d].suboperations = [' % i
#print >>s, ' ResOperation(rop.FAIL, [%s], None)]' % (
# ', '.join([names[v] for v in op.args]))
- print >>s, ' executable_token = cpu.compile_loop(inputargs, operations)'
+ print >>s, ' looptoken = LoopToken()'
+ print >>s, ' cpu.compile_loop(inputargs, operations, looptoken)'
if hasattr(self.loop, 'inputargs'):
for i, v in enumerate(self.loop.inputargs):
print >>s, ' cpu.set_future_value_int(%d, %d)' % (i,
v.value)
- print >>s, ' op = cpu.execute_token(executable_token)'
+ print >>s, ' op = cpu.execute_token(looptoken)'
if self.should_fail_by is None:
for i, v in enumerate(self.loop.operations[-1].args):
print >>s, ' assert cpu.get_latest_value_int(%d) == %d' % (
@@ -401,13 +402,13 @@
loop = TreeLoop('test_random_function')
loop.inputargs = startvars[:]
loop.operations = []
+ loop.token = LoopToken()
builder = builder_factory(cpu, loop, startvars[:])
self.generate_ops(builder, r, loop, startvars)
self.builder = builder
self.loop = loop
- self.executable_token = cpu.compile_loop(loop.inputargs,
- loop.operations)
+ cpu.compile_loop(loop.inputargs, loop.operations, loop.token)
def generate_ops(self, builder, r, loop, startvars):
block_length = demo_conftest.option.block_length
@@ -469,7 +470,7 @@
for i, v in enumerate(self.values):
cpu.set_future_value_int(i, v)
- fail = cpu.execute_token(self.executable_token)
+ fail = cpu.execute_token(self.loop.token)
assert fail is self.should_fail_by.descr
for i, v in enumerate(self.get_fail_args()):
value = cpu.get_latest_value_int(i)
@@ -536,17 +537,15 @@
args = [x.clonebox() for x in subset]
rl = RandomLoop(self.builder.cpu, self.builder.fork,
r, args)
- executable_token = self.cpu.compile_loop(rl.loop.inputargs,
- rl.loop.operations)
+ self.cpu.compile_loop(rl.loop.inputargs, rl.loop.operations,
+ rl.loop.token)
# done
- jump_op = ResOperation(rop.JUMP, subset, None)
- jump_op.jump_target = LoopToken()
- jump_op.jump_target.executable_token = executable_token
self.should_fail_by = rl.should_fail_by
self.expected = rl.expected
assert len(rl.loop.inputargs) == len(args)
# The new bridge's execution will end normally at its FINISH.
# Just replace the FINISH with the JUMP to the new loop.
+ jump_op = ResOperation(rop.JUMP, subset, None, descr=rl.loop.token)
subloop.operations[-1] = jump_op
self.guard_op = rl.guard_op
self.prebuilt_ptr_consts += rl.prebuilt_ptr_consts
More information about the Pypy-commit
mailing list