[pypy-svn] r62772 - in pypy/trunk/pypy/jit: backend/llgraph backend/x86 metainterp
arigo at codespeak.net
arigo at codespeak.net
Mon Mar 9 18:48:35 CET 2009
Author: arigo
Date: Mon Mar 9 18:48:34 2009
New Revision: 62772
Modified:
pypy/trunk/pypy/jit/backend/llgraph/runner.py
pypy/trunk/pypy/jit/backend/x86/runner.py
pypy/trunk/pypy/jit/metainterp/codewriter.py
Log:
Clean-up: don't push the sanity-checking during codewriter.py to the backend.
Modified: pypy/trunk/pypy/jit/backend/llgraph/runner.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llgraph/runner.py (original)
+++ pypy/trunk/pypy/jit/backend/llgraph/runner.py Mon Mar 9 18:48:34 2009
@@ -216,7 +216,7 @@
return size*2 + bit
@staticmethod
- def calldescrof(ARGS, RESULT, ignored=None):
+ def calldescrof(ARGS, RESULT):
if RESULT is lltype.Void:
return sys.maxint
token = history.getkind(RESULT)
Modified: pypy/trunk/pypy/jit/backend/x86/runner.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/runner.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/runner.py Mon Mar 9 18:48:34 2009
@@ -16,7 +16,6 @@
from pypy.jit.metainterp.resoperation import rop, opname
from pypy.jit.backend.x86.executor import execute
from pypy.jit.backend.x86.support import gc_malloc_fnaddr
-from pypy.objspace.flow.model import Constant
GC_MALLOC = lltype.Ptr(lltype.FuncType([lltype.Signed], lltype.Signed))
@@ -591,13 +590,7 @@
return size_of_field, ofs
@staticmethod
- def calldescrof(argtypes, resulttype, funcobj=None):
- if isinstance(funcobj, Constant):
- ARGS = lltype.typeOf(funcobj.value).TO.ARGS
- lgt = len([arg for arg in ARGS if arg is not lltype.Void])
- assert lgt == len(argtypes)
- else:
- assert funcobj is None
+ def calldescrof(argtypes, resulttype):
if resulttype is lltype.Void:
size = 0
else:
Modified: pypy/trunk/pypy/jit/metainterp/codewriter.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/codewriter.py (original)
+++ pypy/trunk/pypy/jit/metainterp/codewriter.py Mon Mar 9 18:48:34 2009
@@ -114,6 +114,18 @@
IndirectCallset(self, graphs)
return result
+ def getcalldescr(self, v_func, args, result):
+ non_void_args = [x for x in args if x.concretetype is not lltype.Void]
+ NON_VOID_ARGS = [x.concretetype for x in non_void_args]
+ RESULT = result.concretetype
+ # check the number and type of arguments
+ ARGS = v_func.concretetype.TO.ARGS
+ assert NON_VOID_ARGS == [T for T in ARGS if T is not lltype.Void]
+ assert RESULT == v_func.concretetype.TO.RESULT
+ # ok
+ calldescr = self.cpu.calldescrof(NON_VOID_ARGS, RESULT)
+ return calldescr, non_void_args
+
if 0: # disabled
def fixed_list_descr_for_tp(self, TP):
@@ -668,13 +680,12 @@
def handle_residual_call(self, op):
self.minimize_variables()
- args = [x for x in op.args if x.concretetype is not lltype.Void]
- argtypes = [v.concretetype for v in args]
- resulttype = op.result.concretetype
- calldescr = self.cpu.calldescrof(argtypes[1:], resulttype, op.args[0])
+ calldescr, non_void_args = self.codewriter.getcalldescr(op.args[0],
+ op.args[1:],
+ op.result)
self.emit('residual_call')
self.emit(calldescr)
- self.emit_varargs(args)
+ self.emit_varargs([op.args[0]] + non_void_args)
self.register_var(op.result)
def handle_builtin_call(self, op):
@@ -717,10 +728,12 @@
opname = 'residual_call_pure' # XXX not for possibly-raising calls
else:
opname = 'residual_call'
- calldescr = self.cpu.calldescrof(argtypes, resulttype, None)
+
+ calldescr, non_void_args = self.codewriter.getcalldescr(c_func, args,
+ op.result)
self.emit(opname)
self.emit(calldescr)
- self.emit_varargs([c_func] + args)
+ self.emit_varargs([c_func] + non_void_args)
self.register_var(op.result)
def handle_list_call(self, op, oopspec_name, args, TP):
More information about the Pypy-commit
mailing list