[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