Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: jitframe-on-heap
Changeset: r60288:4bbbefa03c00
Date: 2013-01-21 11:31 +0200
http://bitbucket.org/pypy/pypy/changeset/4bbbefa03c00/

Log:    rpythonify realloc frame

diff --git a/rpython/jit/backend/llsupport/llmodel.py 
b/rpython/jit/backend/llsupport/llmodel.py
--- a/rpython/jit/backend/llsupport/llmodel.py
+++ b/rpython/jit/backend/llsupport/llmodel.py
@@ -1,7 +1,7 @@
 from rpython.rtyper.lltypesystem import lltype, llmemory, rffi, rclass, rstr
 from rpython.rtyper.lltypesystem.lloperation import llop
 from rpython.rtyper.llinterp import LLInterpreter
-from rpython.rtyper.annlowlevel import llhelper
+from rpython.rtyper.annlowlevel import llhelper, MixLevelHelperAnnotator
 from rpython.rlib.objectmodel import we_are_translated, specialize
 from rpython.jit.metainterp import history
 from rpython.jit.codewriter import heaptracker, longlong
@@ -13,6 +13,7 @@
     get_call_descr, get_interiorfield_descr,
     FieldDescr, ArrayDescr, CallDescr, InteriorFieldDescr)
 from rpython.jit.backend.llsupport.asmmemmgr import AsmMemoryManager
+from rpython.annotator import model as annmodel
 
 
 class AbstractLLCPU(AbstractCPU):
@@ -44,13 +45,13 @@
         else:
             self._setup_exception_handling_untranslated()
         self.asmmemmgr = AsmMemoryManager()
-        self._setup_frame_realloc()
+        self._setup_frame_realloc(translate_support_code)
         self.setup()
 
     def setup(self):
         pass
 
-    def _setup_frame_realloc(self):
+    def _setup_frame_realloc(self, translate_support_code):
         FUNC_TP = lltype.Ptr(lltype.FuncType([llmemory.GCREF],
                                              llmemory.GCREF))
 
@@ -69,9 +70,18 @@
             new_frame.jf_savedata = frame.jf_savedata
             # all other fields are empty
             return lltype.cast_opaque_ptr(llmemory.GCREF, new_frame)
-        
-        f = llhelper(FUNC_TP, realloc_frame)
-        self.realloc_frame = heaptracker.adr2int(llmemory.cast_ptr_to_adr(f))
+
+        if not translate_support_code:
+            fptr = llhelper(FUNC_TP, realloc_frame)
+        else:
+            FUNC = FUNC_TP.TO
+            args_s = [annmodel.lltype_to_annotation(ARG) for ARG in FUNC.ARGS]
+            s_result = annmodel.lltype_to_annotation(FUNC.RESULT)
+            mixlevelann = MixLevelHelperAnnotator(self.rtyper)
+            graph = mixlevelann.getgraph(realloc_frame, args_s, s_result)
+            fptr = mixlevelann.graph2delayed(graph, FUNC)
+            mixlevelann.finish()
+        self.realloc_frame = 
heaptracker.adr2int(llmemory.cast_ptr_to_adr(fptr))
 
     def _setup_exception_handling_untranslated(self):
         # for running un-translated only, all exceptions occurring in the
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to