[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