[pypy-svn] r51280 - in pypy/branch/jit-refactoring/pypy/jit: rainbow rainbow/test timeshifter
cfbolz at codespeak.net
cfbolz at codespeak.net
Tue Feb 5 00:23:28 CET 2008
Author: cfbolz
Date: Tue Feb 5 00:23:28 2008
New Revision: 51280
Modified:
pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py
pypy/branch/jit-refactoring/pypy/jit/rainbow/interpreter.py
pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py
pypy/branch/jit-refactoring/pypy/jit/timeshifter/rtimeshift.py
Log:
start supporting malloc_varsize
Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py (original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py Tue Feb 5 00:23:28 2008
@@ -481,6 +481,21 @@
self.emit("red_malloc", index)
self.register_redvar(op.result)
+ def serialize_op_malloc_varsize(self, op):
+
+ PTRTYPE = op.result.concretetype
+ TYPE = PTRTYPE.TO
+ v_size = op.args[2]
+ sizeindex = self.serialize_oparg("red", v_size)
+ if isinstance(TYPE, lltype.Struct):
+ index = self.structtypedesc_position(op.args[0].value)
+ self.emit("red_malloc_varsize_struct")
+ else:
+ index = self.arrayfielddesc_position(TYPE)
+ self.emit("red_malloc_varsize_array")
+ self.emit(index, sizeindex)
+ self.register_redvar(op.result)
+
def serialize_op_zero_gc_pointers_inside(self, op):
pass # XXX is that right?
Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/interpreter.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/interpreter.py (original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/interpreter.py Tue Feb 5 00:23:28 2008
@@ -341,6 +341,20 @@
redbox = rcontainer.create(self.jitstate, structtypedesc)
self.red_result(redbox)
+ def opimpl_red_malloc_varsize_struct(self):
+ structtypedesc = self.frame.bytecode.structtypedescs[self.load_2byte()]
+ sizebox = self.get_redarg()
+ redbox = rcontainer.create_varsize(self.jitstate, structtypedesc,
+ sizebox)
+ self.red_result(redbox)
+
+ def opimpl_red_malloc_varsize_array(self):
+ arraytypedesc = self.frame.bytecode.arrayfielddescs[self.load_2byte()]
+ sizebox = self.get_redarg()
+ redbox = rtimeshift.genmalloc_varsize(self.jitstate, arraytypedesc,
+ sizebox)
+ self.red_result(redbox)
+
def opimpl_red_getfield(self):
structbox = self.get_redarg()
fielddesc = self.frame.bytecode.fielddescs[self.load_2byte()]
@@ -365,7 +379,6 @@
arraybox, indexbox)
self.red_result(resbox)
-
def opimpl_red_setarrayitem(self):
destbox = self.get_redarg()
fielddesc = self.frame.bytecode.arrayfielddescs[self.load_2byte()]
@@ -373,6 +386,7 @@
valuebox = self.get_redarg()
resbox = rtimeshift.gensetarrayitem(self.jitstate, fielddesc, destbox,
indexbox, valuebox)
+
# ____________________________________________________________
# construction-time interface
Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py (original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/test/test_interpreter.py Tue Feb 5 00:23:28 2008
@@ -791,7 +791,6 @@
getinteriorarraysize=1)
def test_array_of_voids(self):
- py.test.skip("arrays and structs are not working")
A = lltype.GcArray(lltype.Void)
def ll_function(n):
a = lltype.malloc(A, 3)
@@ -800,10 +799,9 @@
res = a, b
keepalive_until_here(b) # to keep getarrayitem around
return res
- ll_function.convert_result = lambda x: str(len(x.item0))
- res = self.interpret(ll_function, [2], [], policy=P_NOVIRTUAL)
- assert res == "3"
+ res = self.interpret(ll_function, [2], [])
+ assert len(res.item0) == 3
def test_red_propagate(self):
S = lltype.GcStruct('S', ('n', lltype.Signed))
Modified: pypy/branch/jit-refactoring/pypy/jit/timeshifter/rtimeshift.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/timeshifter/rtimeshift.py (original)
+++ pypy/branch/jit-refactoring/pypy/jit/timeshifter/rtimeshift.py Tue Feb 5 00:23:28 2008
@@ -189,7 +189,7 @@
return fielddesc.makebox(jitstate, genvar)
-def ll_gensetarrayitem(jitstate, fielddesc, destbox, indexbox, valuebox):
+def gensetarrayitem(jitstate, fielddesc, destbox, indexbox, valuebox):
genvar = jitstate.curbuilder.genop_setarrayitem(
fielddesc.arraytoken,
destbox.getgenvar(jitstate),
More information about the Pypy-commit
mailing list