[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