[pypy-svn] r51862 - in pypy/branch/jit-refactoring/pypy/jit/rainbow: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Mon Feb 25 21:28:43 CET 2008
Author: cfbolz
Date: Mon Feb 25 21:28:43 2008
New Revision: 51862
Modified:
pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py
pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py
Log:
more indirect_call tests passing
Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py (original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py Mon Feb 25 21:28:43 2008
@@ -675,38 +675,38 @@
def serialize_op_indirect_call(self, op):
kind, withexc = self.guess_call_kind(op)
+ targets = dict(self.graphs_from(op))
+ fnptrindex = self.serialize_oparg("red", op.args[0])
+ self.emit("goto_if_constant", fnptrindex, tlabel(("direct call", op)))
+ emitted_args = []
+ for v in op.args[1:-1]:
+ emitted_args.append(self.serialize_oparg("red", v))
+ self.emit("red_residual_call")
+ calldescindex = self.calldesc_position(op.args[0].concretetype)
+ self.emit(fnptrindex, calldescindex, withexc)
+ self.emit(len(emitted_args), *emitted_args)
+ self.emit(self.promotiondesc_position(lltype.Signed))
+ self.emit("goto", tlabel(("after indirect call", op)))
+
+ self.emit(label(("direct call", op)))
+ args = targets.values()[0].getargs()
+ emitted_args = self.args_of_call(op.args[1:-1], args)
+ self.emit("indirect_call_const")
+ self.emit(*emitted_args)
+ setdescindex = self.indirectcalldesc_position(targets)
+ self.emit(fnptrindex, setdescindex)
+
if kind == "red":
- XXX
- if kind == "yellow":
- targets = dict(self.graphs_from(op))
- fnptrindex = self.serialize_oparg("red", op.args[0])
- self.emit("goto_if_constant", fnptrindex, tlabel(("direct call", op)))
- emitted_args = []
- for v in op.args[1:-1]:
- emitted_args.append(self.serialize_oparg("red", v))
- self.emit("red_residual_call")
- calldescindex = self.calldesc_position(op.args[0].concretetype)
- self.emit(fnptrindex, calldescindex, withexc)
- self.emit(len(emitted_args), *emitted_args)
- self.emit(self.promotiondesc_position(lltype.Signed))
- self.emit("goto", tlabel(("after indirect call", op)))
-
- self.emit(label(("direct call", op)))
- args = targets.values()[0].getargs()
- emitted_args = self.args_of_call(op.args[1:-1], args)
- self.emit("indirect_call_const")
- self.emit(*emitted_args)
- setdescindex = self.indirectcalldesc_position(targets)
- self.emit(fnptrindex, setdescindex)
+ self.emit("red_after_direct_call")
+ elif kind == "yellow":
self.emit("yellow_after_direct_call")
self.emit("yellow_retrieve_result_as_red")
self.emit(self.type_position(op.result.concretetype))
-
+ else:
+ XXX
- self.emit(label(("after indirect call", op)))
- self.register_redvar(op.result)
- return
- XXX
+ self.emit(label(("after indirect call", op)))
+ self.register_redvar(op.result)
def handle_oopspec_call(self, op, withexc):
from pypy.jit.timeshifter.oop import Index
Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py (original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py Mon Feb 25 21:28:43 2008
@@ -1066,7 +1066,6 @@
self.check_insns(indirect_call=0)
def test_simple_red_meth(self):
- py.test.skip("needs promote")
class Base(object):
def m(self, n):
raise NotImplementedError
@@ -1089,7 +1088,6 @@
self.check_insns({'int_mul': 1})
def test_simple_red_meth_vars_around(self):
- py.test.skip("needs promote")
class Base(object):
def m(self, n):
raise NotImplementedError
More information about the Pypy-commit
mailing list