[pypy-svn] r75774 - in pypy/trunk/pypy/jit/codewriter: . test
fijal at codespeak.net
fijal at codespeak.net
Fri Jul 2 17:10:50 CEST 2010
Author: fijal
Date: Fri Jul 2 17:10:48 2010
New Revision: 75774
Modified:
pypy/trunk/pypy/jit/codewriter/jtransform.py
pypy/trunk/pypy/jit/codewriter/support.py
pypy/trunk/pypy/jit/codewriter/test/test_codewriter.py
Log:
Support more raw operations: getitem, setitem, malloc and free
Modified: pypy/trunk/pypy/jit/codewriter/jtransform.py
==============================================================================
--- pypy/trunk/pypy/jit/codewriter/jtransform.py (original)
+++ pypy/trunk/pypy/jit/codewriter/jtransform.py Fri Jul 2 17:10:48 2010
@@ -420,9 +420,14 @@
return SpaceOperation('new_array', [arraydescr, op.args[2]],
op.result)
+ def rewrite_op_free(self, op):
+ assert op.args[1].value == 'raw'
+ ARRAY = op.args[0].concretetype.TO
+ return self._do_builtin_call(op, 'raw_free', [op.args[0]],
+ extra = (ARRAY,), extrakey = ARRAY)
+
def rewrite_op_getarrayitem(self, op):
ARRAY = op.args[0].concretetype.TO
- assert ARRAY._gckind == 'gc'
if self._array_of_voids(ARRAY):
return []
if op.args[0] in self.vable_array_vars: # for virtualizables
@@ -436,13 +441,12 @@
# normal case follows
arraydescr = self.cpu.arraydescrof(ARRAY)
kind = getkind(op.result.concretetype)
- return SpaceOperation('getarrayitem_gc_%s' % kind[0],
+ return SpaceOperation('getarrayitem_%s_%s' % (ARRAY._gckind, kind[0]),
[op.args[0], arraydescr, op.args[1]],
op.result)
def rewrite_op_setarrayitem(self, op):
ARRAY = op.args[0].concretetype.TO
- assert ARRAY._gckind == 'gc'
if self._array_of_voids(ARRAY):
return []
if op.args[0] in self.vable_array_vars: # for virtualizables
@@ -455,7 +459,7 @@
op.args[1], op.args[2]], None)]
arraydescr = self.cpu.arraydescrof(ARRAY)
kind = getkind(op.args[2].concretetype)
- return SpaceOperation('setarrayitem_gc_%s' % kind[0],
+ return SpaceOperation('setarrayitem_%s_%s' % (ARRAY._gckind, kind[0]),
[op.args[0], arraydescr, op.args[1], op.args[2]],
None)
Modified: pypy/trunk/pypy/jit/codewriter/support.py
==============================================================================
--- pypy/trunk/pypy/jit/codewriter/support.py (original)
+++ pypy/trunk/pypy/jit/codewriter/support.py Fri Jul 2 17:10:48 2010
@@ -297,6 +297,11 @@
return lltype.malloc(ARRAY, n, flavor='raw')
return _ll_1_raw_malloc
+ def build_ll_1_raw_free(ARRAY):
+ def _ll_1_raw_free(p):
+ lltype.free(p, flavor='raw')
+ return _ll_1_raw_free
+
class OOtypeHelpers:
# ---------- dict ----------
Modified: pypy/trunk/pypy/jit/codewriter/test/test_codewriter.py
==============================================================================
--- pypy/trunk/pypy/jit/codewriter/test/test_codewriter.py (original)
+++ pypy/trunk/pypy/jit/codewriter/test/test_codewriter.py Fri Jul 2 17:10:48 2010
@@ -24,12 +24,17 @@
def as_vtable_size_descr(self):
return self
+class FakeArrayDescr(AbstractDescr):
+ def __init__(self, ARRAY):
+ self.ARRAY = ARRAY
+
class FakeCPU:
def __init__(self, rtyper):
self.rtyper = rtyper
calldescrof = FakeCallDescr
fielddescrof = FakeFieldDescr
sizeof = FakeSizeDescr
+ arraydescrof = FakeArrayDescr
class FakePolicy:
def look_inside_graph(self, graph):
@@ -163,10 +168,10 @@
def f(n):
a = lltype.malloc(TP, n, flavor='raw')
- #a[0] = n
- #res = a[0]
- #lltype.free(a, flavor='raw')
- #return res
+ a[0] = n
+ res = a[0]
+ lltype.free(a, flavor='raw')
+ return res
rtyper = support.annotate(f, [35])
jitdriver_sd = FakeJitDriverSD(rtyper.annotator.translator.graphs[0])
@@ -176,3 +181,6 @@
#
s = jitdriver_sd.mainjitcode.dump()
assert 'residual_call_ir_i $<* fn _ll_1_raw_malloc__Signed>' in s
+ assert 'setarrayitem_raw_i' in s
+ assert 'getarrayitem_raw_i' in s
+ assert 'residual_call_ir_v $<* fn _ll_1_raw_free__arrayPtr>' in s
More information about the Pypy-commit
mailing list