[pypy-svn] r62734 - in pypy/trunk/pypy/jit: backend/llgraph backend/x86 metainterp
fijal at codespeak.net
fijal at codespeak.net
Sun Mar 8 18:32:22 CET 2009
Author: fijal
Date: Sun Mar 8 18:32:19 2009
New Revision: 62734
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:
Actually check for the correct number of args. I think it's fine by now....
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 Sun Mar 8 18:32:19 2009
@@ -216,7 +216,7 @@
return size*2 + bit
@staticmethod
- def calldescrof(ARGS, RESULT):
+ def calldescrof(ARGS, RESULT, ignored=None):
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 Sun Mar 8 18:32:19 2009
@@ -16,6 +16,7 @@
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))
@@ -590,7 +591,13 @@
return size_of_field, ofs
@staticmethod
- def calldescrof(argtypes, resulttype):
+ 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
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 Sun Mar 8 18:32:19 2009
@@ -666,7 +666,7 @@
args = [x for x in op.args[1:] if x.concretetype is not lltype.Void]
argtypes = [v.concretetype for v in args]
resulttype = op.result.concretetype
- calldescr = self.cpu.calldescrof(argtypes, resulttype)
+ calldescr = self.cpu.calldescrof(argtypes, resulttype, op.args[0])
self.emit('call')
self.emit(calldescr)
self.emit(self.get_position(jitbox))
@@ -679,7 +679,7 @@
args = [x for x in op.args if x.concretetype is not lltype.Void]
argtypes = [v.concretetype for v in args[1:]]
resulttype = op.result.concretetype
- calldescr = self.cpu.calldescrof(argtypes, resulttype)
+ calldescr = self.cpu.calldescrof(argtypes, resulttype, op.args[0])
self.emit('residual_call')
self.emit(calldescr)
self.emit_varargs(args)
@@ -725,7 +725,7 @@
opname = 'residual_call_pure' # XXX not for possibly-raising calls
else:
opname = 'residual_call'
- calldescr = self.cpu.calldescrof(argtypes, resulttype)
+ calldescr = self.cpu.calldescrof(argtypes, resulttype, None)
self.emit(opname)
self.emit(calldescr)
self.emit_varargs([c_func] + args)
More information about the Pypy-commit
mailing list