[pypy-svn] r74570 - in pypy/branch/blackhole-improvement/pypy/jit: backend/llgraph codewriter metainterp metainterp/test

arigo at codespeak.net arigo at codespeak.net
Wed May 19 11:28:32 CEST 2010


Author: arigo
Date: Wed May 19 11:28:30 2010
New Revision: 74570

Modified:
   pypy/branch/blackhole-improvement/pypy/jit/backend/llgraph/llimpl.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/heaptracker.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py
Log:
new_with_vtable.


Modified: pypy/branch/blackhole-improvement/pypy/jit/backend/llgraph/llimpl.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/backend/llgraph/llimpl.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/backend/llgraph/llimpl.py	Wed May 19 11:28:30 2010
@@ -10,6 +10,7 @@
 from pypy.jit.metainterp.history import (ConstInt, ConstPtr,
                                          BoxInt, BoxPtr, BoxObj, BoxFloat,
                                          REF, INT, FLOAT)
+from pypy.jit.codewriter import heaptracker
 from pypy.rpython.lltypesystem import lltype, llmemory, rclass, rstr
 from pypy.rpython.ootypesystem import ootype
 from pypy.rpython.module.support import LLSupport, OOSupport
@@ -728,9 +729,8 @@
 
     def op_new_with_vtable(self, descr, vtable):
         assert descr is None
-        xxxxxxxxxxxx
-        size = get_class_size(self.memocast, vtable)
-        result = do_new(size)
+        descr = heaptracker.vtable2descr(self.cpu, vtable)
+        result = do_new(descr.ofs)
         value = lltype.cast_opaque_ptr(rclass.OBJECTPTR, result)
         value.typeptr = cast_from_int(rclass.CLASSTYPE, vtable)
         return result

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/heaptracker.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/heaptracker.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/heaptracker.py	Wed May 19 11:28:30 2010
@@ -1,4 +1,4 @@
-from pypy.rpython.lltypesystem import lltype, rclass
+from pypy.rpython.lltypesystem import lltype, llmemory, rclass
 from pypy.rlib.objectmodel import we_are_translated
 
 
@@ -52,7 +52,9 @@
         sizedescr._corresponding_vtable = vtable
 
 def vtable2descr(cpu, vtable):
-    assert lltype.typeOf(vtable) == VTABLETYPE
+    assert lltype.typeOf(vtable) is lltype.Signed
+    vtable = llmemory.cast_int_to_adr(vtable)
+    vtable = llmemory.cast_adr_to_ptr(vtable, VTABLETYPE)
     if we_are_translated():
         # Build the dict {vtable: sizedescr} at runtime.
         # This is necessary because the 'vtables' are just pointers to
@@ -67,4 +69,7 @@
 def descr2vtable(cpu, descr):
     from pypy.jit.metainterp import history
     assert isinstance(descr, history.AbstractDescr)
-    return descr._corresponding_vtable
+    vtable = descr._corresponding_vtable
+    vtable = llmemory.cast_ptr_to_adr(vtable)
+    vtable = llmemory.cast_adr_to_int(vtable)
+    return vtable

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py	Wed May 19 11:28:30 2010
@@ -899,7 +899,6 @@
     @arguments("cpu", "d", returns="r")
     def bhimpl_new_with_vtable(cpu, descr):
         vtable = heaptracker.descr2vtable(cpu, descr)
-        vtable = llmemory.cast_adr_to_int(llmemory.cast_ptr_to_adr(vtable))
         return cpu.bh_new_with_vtable(descr, vtable)
 
     @arguments("cpu", "r", returns="i")

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py	Wed May 19 11:28:30 2010
@@ -154,9 +154,7 @@
 def exec_new_with_vtable(cpu, clsbox):
     from pypy.jit.codewriter import heaptracker
     vtable = clsbox.getint()
-    vtableadr = llmemory.cast_int_to_adr(vtable)
-    vtableptr = llmemory.cast_adr_to_ptr(vtableadr, heaptracker.VTABLETYPE)
-    descr = heaptracker.vtable2descr(cpu, vtableptr)
+    descr = heaptracker.vtable2descr(cpu, vtable)
     return cpu.bh_new_with_vtable(descr, vtable)
 
 def do_new_with_vtable(metainterp, clsbox):

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py	Wed May 19 11:28:30 2010
@@ -320,11 +320,9 @@
     @arguments("descr")
     def opimpl_new_with_vtable(self, sizedescr):
         from pypy.jit.codewriter import heaptracker
-        from pypy.jit.metainterp.warmstate import wrap
         cpu = self.metainterp.cpu
         cls = heaptracker.descr2vtable(cpu, sizedescr)
-        clsbox = wrap(cpu, cls, in_const_box=True)
-        return self.execute(rop.NEW_WITH_VTABLE, clsbox)
+        return self.execute(rop.NEW_WITH_VTABLE, ConstInt(cls))
 
     @FixME  #arguments("box")
     def opimpl_runtimenew(self, classbox):

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/resume.py	Wed May 19 11:28:30 2010
@@ -715,7 +715,7 @@
 
     def allocate_with_vtable(self, known_class):
         from pypy.jit.metainterp.executor import exec_new_with_vtable
-        return exec_new_with_vtable(self.cpu, self.known_class)
+        return exec_new_with_vtable(self.cpu, known_class)
 
     def setfield(self, descr, struct, fieldnum):
         if descr.is_pointer_field():

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_basic.py	Wed May 19 11:28:30 2010
@@ -636,10 +636,9 @@
         self.check_tree_loop_count(2)      # the loop and the entry path
         # we get:
         #    ENTER             - compile the new loop
-        #    ENTER (BlackHole) - leave
         #    ENTER             - compile the entry bridge
         #    ENTER             - compile the leaving path
-        self.check_enter_count(4)
+        self.check_enter_count(3)
 
     def test_bridge_from_interpreter_2(self):
         # one case for backend - computing of framesize on guard failure



More information about the Pypy-commit mailing list