[pypy-commit] pypy tealet: Untested JIT support.

arigo noreply at buildbot.pypy.org
Wed Jul 6 20:28:49 CEST 2011


Author: Armin Rigo <arigo at tunes.org>
Branch: tealet
Changeset: r45386:7a765de75f51
Date: 2011-06-13 10:51 +0200
http://bitbucket.org/pypy/pypy/changeset/7a765de75f51/

Log:	Untested JIT support.

diff --git a/pypy/config/translationoption.py b/pypy/config/translationoption.py
--- a/pypy/config/translationoption.py
+++ b/pypy/config/translationoption.py
@@ -32,8 +32,7 @@
                default=False, cmdline="--tealet",
                requires=[("translation.type_system", "lltype"),
                          ("translation.gctransformer", "framework"),
-                         ("translation.gcrootfinder", "shadowstack"),
-                         ("translation.thread", False)]),    # XXX temporary
+                         ("translation.gcrootfinder", "shadowstack")]),
     ChoiceOption("type_system", "Type system to use when RTyping",
                  ["lltype", "ootype"], cmdline=None, default="lltype",
                  requires={
diff --git a/pypy/rpython/memory/gctransform/framework.py b/pypy/rpython/memory/gctransform/framework.py
--- a/pypy/rpython/memory/gctransform/framework.py
+++ b/pypy/rpython/memory/gctransform/framework.py
@@ -152,13 +152,8 @@
             # for regular translation: pick the GC from the config
             GCClass, GC_PARAMS = choose_gc_from_config(translator.config)
 
-        self.root_stack_jit_hook = None
         if hasattr(translator, '_jit2gc'):
             self.layoutbuilder = translator._jit2gc['layoutbuilder']
-            try:
-                self.root_stack_jit_hook = translator._jit2gc['rootstackhook']
-            except KeyError:
-                pass
         else:
             self.layoutbuilder = TransformerLayoutBuilder(translator, GCClass)
         self.layoutbuilder.transformer = self
@@ -1372,8 +1367,10 @@
             return top
         self.decr_stack = decr_stack
 
-        self.rootstackhook = gctransformer.root_stack_jit_hook
-        if self.rootstackhook is None:
+        self.jit2gc = getattr(gctransformer.translator, '_jit2gc', {})
+        try:
+            self.rootstackhook = self.jit2gc['rootstackhook']
+        except KeyError:
             def collect_stack_root(callback, gc, addr):
                 if gc.points_to_valid_gc_object(addr):
                     callback(gc, addr)
@@ -1410,19 +1407,19 @@
             self.collect_stacks_from_other_threads(collect_stack_root)
 
     def need_tealet_support(self, gctransformer, getfn):
-        assert not gctransformer.translator.config.translation.jit, (
-            "XXX in-progress: tealet + jit + shadowstack")
-        assert not gctransformer.translator.config.translation.thread, (
-            "XXX check me: tealet + thread + shadowstack")
-        #
         GCPTR_ARRAY  = lltype.Ptr(lltype.GcArray(llmemory.GCREF))
         SIGNED_ARRAY = lltype.Ptr(lltype.GcArray(lltype.Signed))
         WALKER_PTR   = lltype.Ptr(lltype.Struct('walker',
                            ('gcptr_array', GCPTR_ARRAY),
                            ('signed_array', SIGNED_ARRAY)))
         gcdata = self.gcdata
+        jit_save_stack_roots = self.jit2gc.get('savestackhook')
+        jit_restore_stack_roots = self.jit2gc.get('restorestackhook')
         #
         def ll_save_stack_roots(walker):
+            if jit_save_stack_roots is not None:
+                jit_save_stack_roots(walker, gcdata)
+                return
             addr = gcdata.root_stack_base
             end = gcdata.root_stack_top
             count = (end - addr) // sizeofaddr
@@ -1434,6 +1431,9 @@
                 n += 1
         #
         def ll_restore_stack_roots(walker):
+            if jit_restore_stack_roots is not None:
+                jit_restore_stack_roots(walker, gcdata)
+                return
             array = walker.gcptr_array
             addr = gcdata.root_stack_base
             gcdata.root_stack_top = addr + len(array) * sizeofaddr


More information about the pypy-commit mailing list