[pypy-svn] r70775 - in pypy/branch/direct-assembler-call/pypy/jit: backend/x86 backend/x86/test metainterp/test

fijal at codespeak.net fijal at codespeak.net
Fri Jan 22 14:05:03 CET 2010


Author: fijal
Date: Fri Jan 22 14:05:03 2010
New Revision: 70775

Modified:
   pypy/branch/direct-assembler-call/pypy/jit/backend/x86/assembler.py
   pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_runner.py
   pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_ztranslation.py
   pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_basic.py
Log:
fix a variety of tests


Modified: pypy/branch/direct-assembler-call/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/direct-assembler-call/pypy/jit/backend/x86/assembler.py	(original)
+++ pypy/branch/direct-assembler-call/pypy/jit/backend/x86/assembler.py	Fri Jan 22 14:05:03 2010
@@ -120,10 +120,13 @@
                 ll_new_unicode = gc_ll_descr.get_funcptr_for_newunicode()
                 self.malloc_unicode_func_addr = rffi.cast(lltype.Signed,
                                                           ll_new_unicode)
-            if self.cpu.assembler_helper_ptr:
+            if we_are_translated():
                 self.assembler_helper_adr = self.cpu.cast_ptr_to_int(
                     self.cpu.assembler_helper_ptr)
-                
+            else:
+                if getattr(self.cpu, 'assembler_helper_ptr', None):
+                    self.assembler_helper_adr = self.cpu.cast_ptr_to_int(
+                        self.cpu.assembler_helper_ptr)
         
             # done
             # we generate the loop body in 'mc'

Modified: pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_runner.py
==============================================================================
--- pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_runner.py	(original)
+++ pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_runner.py	Fri Jan 22 14:05:03 2010
@@ -27,7 +27,6 @@
     
     def setup_method(self, meth):
         self.cpu = CPU(rtyper=None, stats=FakeStats())
-        self.cpu.assembler_helper_ptr = None
 
     def test_execute_ptr_operation(self):
         cpu = self.cpu
@@ -73,45 +72,41 @@
         func = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int)(f)
         addr = ctypes.cast(func, ctypes.c_void_p).value
         
-        try:
-            saved_addr = self.cpu.assembler.malloc_func_addr
-            self.cpu.assembler.malloc_func_addr = addr
-            ofs = symbolic.get_field_token(rstr.STR, 'chars', False)[0]
-
-            res = self.execute_operation(rop.NEWSTR, [ConstInt(7)], 'ref')
-            assert allocs[0] == 7 + ofs + WORD
-            resbuf = self._resbuf(res)
-            assert resbuf[ofs/WORD] == 7
-            
-            # ------------------------------------------------------------
-
-            res = self.execute_operation(rop.NEWSTR, [BoxInt(7)], 'ref')
-            assert allocs[0] == 7 + ofs + WORD
-            resbuf = self._resbuf(res)
-            assert resbuf[ofs/WORD] == 7
-
-            # ------------------------------------------------------------
-
-            TP = lltype.GcArray(lltype.Signed)
-            ofs = symbolic.get_field_token(TP, 'length', False)[0]
-            descr = self.cpu.arraydescrof(TP)
-
-            res = self.execute_operation(rop.NEW_ARRAY, [ConstInt(10)],
-                                             'ref', descr)
-            assert allocs[0] == 10*WORD + ofs + WORD
-            resbuf = self._resbuf(res)            
-            assert resbuf[ofs/WORD] == 10
-
-            # ------------------------------------------------------------
-
-            res = self.execute_operation(rop.NEW_ARRAY, [BoxInt(10)],
-                                             'ref', descr)
-            assert allocs[0] == 10*WORD + ofs + WORD
-            resbuf = self._resbuf(res)                        
-            assert resbuf[ofs/WORD] == 10
-            
-        finally:
-            self.cpu.assembler.malloc_func_addr = saved_addr
+        self.cpu.assembler.make_sure_mc_exists()
+        self.cpu.assembler.malloc_func_addr = addr
+        ofs = symbolic.get_field_token(rstr.STR, 'chars', False)[0]
+
+        res = self.execute_operation(rop.NEWSTR, [ConstInt(7)], 'ref')
+        assert allocs[0] == 7 + ofs + WORD
+        resbuf = self._resbuf(res)
+        assert resbuf[ofs/WORD] == 7
+
+        # ------------------------------------------------------------
+
+        res = self.execute_operation(rop.NEWSTR, [BoxInt(7)], 'ref')
+        assert allocs[0] == 7 + ofs + WORD
+        resbuf = self._resbuf(res)
+        assert resbuf[ofs/WORD] == 7
+
+        # ------------------------------------------------------------
+
+        TP = lltype.GcArray(lltype.Signed)
+        ofs = symbolic.get_field_token(TP, 'length', False)[0]
+        descr = self.cpu.arraydescrof(TP)
+
+        res = self.execute_operation(rop.NEW_ARRAY, [ConstInt(10)],
+                                         'ref', descr)
+        assert allocs[0] == 10*WORD + ofs + WORD
+        resbuf = self._resbuf(res)            
+        assert resbuf[ofs/WORD] == 10
+
+        # ------------------------------------------------------------
+
+        res = self.execute_operation(rop.NEW_ARRAY, [BoxInt(10)],
+                                         'ref', descr)
+        assert allocs[0] == 10*WORD + ofs + WORD
+        resbuf = self._resbuf(res)                        
+        assert resbuf[ofs/WORD] == 10
 
     def test_stringitems(self):
         from pypy.rpython.lltypesystem.rstr import STR
@@ -318,9 +313,9 @@
 
 class TestX86OverflowMC(TestX86):
 
-    def setup_class(cls):
-        cls.cpu = CPU(rtyper=None, stats=FakeStats())
-        cls.cpu.assembler.mc_size = 1024
+    def setup_method(self, meth):
+        self.cpu = CPU(rtyper=None, stats=FakeStats())
+        self.cpu.assembler.mc_size = 1024
 
     def test_overflow_mc(self):
         ops = []
@@ -333,6 +328,7 @@
         ops.append(ResOperation(rop.FINISH, [v], None,
                                 descr=BasicFailDescr()))
         looptoken = LoopToken()
+        self.cpu.assembler.make_sure_mc_exists()
         old_mc_mc = self.cpu.assembler.mc._mc
         self.cpu.compile_loop([base_v], ops, looptoken)
         assert self.cpu.assembler.mc._mc != old_mc_mc   # overflowed

Modified: pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_ztranslation.py
==============================================================================
--- pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_ztranslation.py	(original)
+++ pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_ztranslation.py	Fri Jan 22 14:05:03 2010
@@ -4,6 +4,7 @@
 from pypy.jit.metainterp.jitprof import Profiler
 from pypy.jit.backend.x86.runner import CPU386
 from pypy.jit.backend.test.support import CCompiledMixin
+from pypy.jit.metainterp.policy import StopAtXPolicy
 
 class TestTranslationX86(CCompiledMixin):
     CPUClass = CPU386
@@ -94,3 +95,52 @@
             return total * 10
         res = self.meta_interp(main, [40])
         assert res == main(40)
+
+    def test_direct_assembler_call_translates(self):
+        class Thing(object):
+            def __init__(self, val):
+                self.val = val
+        
+        class Frame(object):
+            _virtualizable2_ = ['thing']
+        
+        driver = JitDriver(greens = ['codeno'], reds = ['frame', 'i'],
+                           virtualizables = ['frame'],
+                           get_printable_location = lambda codeno : str(codeno),
+                           can_inline = lambda codeno : False)
+        class SomewhereElse(object):
+            pass
+
+        somewhere_else = SomewhereElse()
+
+        def change(newthing):
+            somewhere_else.frame.thing = newthing
+
+        def main(codeno):
+            frame = Frame()
+            somewhere_else.frame = frame
+            frame.thing = Thing(0)
+            portal(codeno, frame)
+            return frame.thing.val
+
+        def portal(codeno, frame):
+            i = 0
+            while i < 10:
+                driver.can_enter_jit(frame=frame, codeno=codeno, i=i)
+                driver.jit_merge_point(frame=frame, codeno=codeno, i=i)
+                nextval = frame.thing.val
+                if codeno == 0:
+                    subframe = Frame()
+                    subframe.thing = Thing(nextval)
+                    nextval = portal(1, subframe)
+                elif frame.thing.val > 40:
+                    change(Thing(13))
+                    nextval = 13
+                frame.thing = Thing(nextval + 1)
+                i += 1
+            return frame.thing.val
+
+        res = self.meta_interp(main, [0], inline=True,
+                               policy=StopAtXPolicy(change))
+        assert res == main(0)
+

Modified: pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_basic.py	(original)
+++ pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_basic.py	Fri Jan 22 14:05:03 2010
@@ -22,7 +22,6 @@
 
     stats = history.Stats()
     cpu = CPUClass(rtyper, stats, None, False)
-    cpu.assembler_helper_ptr = None
     graphs = rtyper.annotator.translator.graphs
     opt = history.Options(listops=listops)
     metainterp_sd = pyjitpl.MetaInterpStaticData(graphs[0], cpu, stats, opt)



More information about the Pypy-commit mailing list