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

arigo at codespeak.net arigo at codespeak.net
Wed Apr 28 13:04:39 CEST 2010


Author: arigo
Date: Wed Apr 28 13:04:38 2010
New Revision: 74155

Modified:
   pypy/branch/blackhole-improvement/pypy/jit/backend/llgraph/runner.py
   pypy/branch/blackhole-improvement/pypy/jit/backend/model.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitter.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jitter.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py
Log:
getfield('typeptr').


Modified: pypy/branch/blackhole-improvement/pypy/jit/backend/llgraph/runner.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/backend/llgraph/runner.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/backend/llgraph/runner.py	Wed Apr 28 13:04:38 2010
@@ -434,6 +434,12 @@
                                   self.class_vtables_as_int[sizevtabledescr])
         return result
 
+    def bh_classof(self, struct):
+        struct = lltype.cast_opaque_ptr(rclass.OBJECTPTR, struct)
+        result = struct.typeptr
+        result_adr = llmemory.cast_ptr_to_adr(struct.typeptr)
+        return llmemory.cast_adr_to_int(result_adr)
+
     def do_new_array(self, countbox, size):
         assert isinstance(size, Descr)
         count = countbox.getint()

Modified: pypy/branch/blackhole-improvement/pypy/jit/backend/model.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/backend/model.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/backend/model.py	Wed Apr 28 13:04:38 2010
@@ -215,6 +215,9 @@
     def bh_new_with_vtable(self, sizevtabledescr):
         raise NotImplementedError
 
+    def bh_classof(self, struct):
+        raise NotImplementedError
+
     def do_new_array(self, lengthbox, arraydescr):
         raise NotImplementedError
 

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitter.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitter.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/jitter.py	Wed Apr 28 13:04:38 2010
@@ -240,7 +240,7 @@
 
     def rewrite_op_getfield(self, op):
         if self.is_typeptr_getset(op):
-            XXX
+            return self.handle_getfield_typeptr(op)
         # turn the flow graph 'getfield' operation into our own version
         [v_inst, c_fieldname] = op.args
         RESULT = op.result.concretetype
@@ -293,6 +293,9 @@
         return (op.args[1].value == 'typeptr' and
                 op.args[0].concretetype.TO._hints.get('typeptr'))
 
+    def handle_getfield_typeptr(self, op):
+        return SpaceOperation('classof', [op.args[0]], op.result)
+
     def rewrite_op_malloc(self, op):
         assert op.args[1].value == {'flavor': 'gc'}
         STRUCT = op.args[0].value

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jitter.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jitter.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_jitter.py	Wed Apr 28 13:04:38 2010
@@ -171,6 +171,16 @@
         assert op1.args == [v_parent, fielddescr]
         assert op1.result == v_result
 
+def test_getfield_typeptr():
+    v_parent = varoftype(rclass.OBJECTPTR)
+    c_name = Constant('typeptr', lltype.Void)
+    v_result = varoftype(rclass.OBJECT.typeptr)
+    op = SpaceOperation('getfield', [v_parent, c_name], v_result)
+    op1 = Transformer(FakeCPU()).rewrite_operation(op)
+    assert op1.opname == 'classof'
+    assert op1.args == [v_parent]
+    assert op1.result == v_result
+
 def test_malloc_new():
     S = lltype.GcStruct('S')
     v = varoftype(lltype.Ptr(S))

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 Apr 28 13:04:38 2010
@@ -508,3 +508,7 @@
     @arguments("d", returns="r")
     def opimpl_new_with_vtable(self, descr):
         return self.cpu.bh_new_with_vtable(descr)
+
+    @arguments("r", returns="i")
+    def opimpl_classof(self, struct):
+        return self.cpu.bh_classof(struct)



More information about the Pypy-commit mailing list