Author: Maciej Fijalkowski <[email protected]>
Branch: even-more-jit-hooks
Changeset: r55903:64fb9d6766c1
Date: 2012-07-03 19:21 +0200
http://bitbucket.org/pypy/pypy/changeset/64fb9d6766c1/

Log:    general progress

diff --git a/pypy/jit/backend/model.py b/pypy/jit/backend/model.py
--- a/pypy/jit/backend/model.py
+++ b/pypy/jit/backend/model.py
@@ -65,9 +65,10 @@
         raise NotImplementedError
 
     def set_debug(self, value):
-        """ Enable or disable debugging info. Does nothing by default
+        """ Enable or disable debugging info. Does nothing by default. Returns
+        the previous setting.
         """
-        pass
+        return False
 
     def compile_loop(self, inputargs, operations, looptoken, log=True, 
name=''):
         """Assemble the given loop.
diff --git a/pypy/jit/backend/x86/assembler.py 
b/pypy/jit/backend/x86/assembler.py
--- a/pypy/jit/backend/x86/assembler.py
+++ b/pypy/jit/backend/x86/assembler.py
@@ -101,7 +101,9 @@
                                       llmemory.cast_ptr_to_adr(ptrs))
 
     def set_debug(self, v):
+        r = self._debug
         self._debug = v
+        return r
 
     def setup_once(self):
         # the address of the function called by 'new'
diff --git a/pypy/jit/backend/x86/runner.py b/pypy/jit/backend/x86/runner.py
--- a/pypy/jit/backend/x86/runner.py
+++ b/pypy/jit/backend/x86/runner.py
@@ -45,6 +45,9 @@
 
         self.profile_agent = profile_agent
 
+    def set_debug(self, flag):
+        return self.assembler.set_debug(flag)
+
     def setup(self):
         if self.opts is not None:
             failargs_limit = self.opts.failargs_limit
diff --git a/pypy/jit/metainterp/test/test_jitiface.py 
b/pypy/jit/metainterp/test/test_jitiface.py
--- a/pypy/jit/metainterp/test/test_jitiface.py
+++ b/pypy/jit/metainterp/test/test_jitiface.py
@@ -190,25 +190,32 @@
                 s+= 2
             return s
 
-        def main():
+        def main(b):
+            stats = jit_hooks.get_stats()
+            jit_hooks.stats_set_debug(stats, b)
             loop(30)
-            stats = jit_hooks.get_stats()
             l = jit_hooks.stats_get_loop_run_times(stats)
-            assert len(l) == 4
-            # completely specific test that would fail each time
-            # we change anything major. for now it's 4
-            # (loop, bridge, 2 entry points)
-            assert l[0].type == 'e'
-            assert l[0].number == 0
-            assert l[0].counter == 4
-            assert l[1].type == 'l'
-            assert l[1].counter == 4
-            assert l[2].type == 'l'
-            assert l[2].counter == 23
-            assert l[3].type == 'b'
-            assert l[3].number == 4
-            assert l[3].counter == 11
-        self.meta_interp(main, [], ProfilerClass=Profiler)
+            if b:
+                assert len(l) == 4
+                # completely specific test that would fail each time
+                # we change anything major. for now it's 4
+                # (loop, bridge, 2 entry points)
+                assert l[0].type == 'e'
+                assert l[0].number == 0
+                assert l[0].counter == 4
+                assert l[1].type == 'l'
+                assert l[1].counter == 4
+                assert l[2].type == 'l'
+                assert l[2].counter == 23
+                assert l[3].type == 'b'
+                assert l[3].number == 4
+                assert l[3].counter == 11
+            else:
+                assert len(l) == 0
+        self.meta_interp(main, [True], ProfilerClass=Profiler)
+        # this so far does not work because of the way setup_once is done,
+        # but fine, it's only about untranslated version anyway
+        #self.meta_interp(main, [False], ProfilerClass=Profiler)
         
 
 class TestJitHookInterface(JitHookInterfaceTests, LLJitMixin):
diff --git a/pypy/rlib/jit_hooks.py b/pypy/rlib/jit_hooks.py
--- a/pypy/rlib/jit_hooks.py
+++ b/pypy/rlib/jit_hooks.py
@@ -13,7 +13,8 @@
             _about_ = helper
 
             def compute_result_annotation(self, *args):
-                if isinstance(s_result, annmodel.SomeObject):
+                if (isinstance(s_result, annmodel.SomeObject) or
+                    s_result is None):
                     return s_result
                 return annmodel.lltype_to_annotation(s_result)
 
@@ -131,6 +132,10 @@
     ptr = lltype.cast_opaque_ptr(rclass.OBJECTPTR, llref)
     return cast_base_ptr_to_instance(WarmRunnerDesc, ptr)
 
+@register_helper(annmodel.SomeBool())
+def stats_set_debug(llref, flag):
+    return _cast_to_warmrunnerdesc(llref).metainterp_sd.cpu.set_debug(flag)
+
 @register_helper(annmodel.SomeFloat())
 def stats_get_counter_value(llref, no):
     return 
_cast_to_warmrunnerdesc(llref).metainterp_sd.profiler.get_counter(no)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to