[pypy-svn] r33184 - in pypy/dist/pypy/jit/codegen/i386: . test

pedronis at codespeak.net pedronis at codespeak.net
Wed Oct 11 19:29:40 CEST 2006


Author: pedronis
Date: Wed Oct 11 19:29:38 2006
New Revision: 33184

Modified:
   pypy/dist/pypy/jit/codegen/i386/rgenop.py
   pypy/dist/pypy/jit/codegen/i386/test/test_genc_promotion.py
Log:
(arre, pedronis)

some progress on running the promotion tests with the i386 backend. 

some are still skipped, test_more_promotes gives sometimes a bus error :(



Modified: pypy/dist/pypy/jit/codegen/i386/rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/i386/rgenop.py	(original)
+++ pypy/dist/pypy/jit/codegen/i386/rgenop.py	Wed Oct 11 19:29:38 2006
@@ -298,8 +298,11 @@
             gv_arg = args_gv[i]
             if gv_arg is not None:
                 self.push(gv_arg.operand(self))
-        target = gv_fnptr.revealconst(lltype.Signed)
-        self.mc.CALL(rel32(target))
+        if gv_fnptr.is_const:
+            target = gv_fnptr.revealconst(lltype.Signed)
+            self.mc.CALL(rel32(target))
+        else:
+            self.mc.CALL(gv_fnptr.operand(self))
         # XXX only for int return_kind
         return self.returnvar(eax)
 
@@ -357,6 +360,9 @@
         self._close()
         return result
 
+    def show_incremental_progress(self):
+        pass
+
     # ____________________________________________________________
 
     def stack_access(self, stackpos):
@@ -704,11 +710,94 @@
         builder.stackdepth = N
 
 
+#
+
+dummy_var = Var(0)
+
+class ReplayFlexSwitch(CodeGenSwitch):
+
+    def __init__(self, replay_builder):
+        self.replay_builder = replay_builder
+
+    def add_case(self, gv_case):
+        return self.replay_builder
+
+    def add_default(self):
+        return self.replay_builder
+
+class ReplayBuilder(CodeGenerator):
+
+    def __init__(self, rgenop):
+        self.rgenop = rgenop
+
+    @specialize.arg(1)
+    def genop1(self, opname, gv_arg):
+        return dummy_var
+
+    @specialize.arg(1)
+    def genop2(self, opname, gv_arg1, gv_arg2):
+        return dummy_var
+
+    def genop_getfield(self, offset, gv_ptr):
+        return dummy_var
+
+    def genop_setfield(self, offset, gv_ptr, gv_value):
+        return dummy_var
+
+    def genop_getsubstruct(self, offset, gv_ptr):
+        return dummy_var
+
+    def genop_getarrayitem(self, arraytoken, gv_ptr, gv_index):
+        return dummy_var
+
+    def genop_getarraysize(self, arraytoken, gv_ptr):
+        return dummy_var
+
+    def genop_setarrayitem(self, arraytoken, gv_ptr, gv_index, gv_value):
+        return dummy_var
+
+    def genop_malloc_fixedsize(self, size):
+        return dummy_var
+
+    def genop_malloc_varsize(self, varsizealloctoken, gv_size):
+        return dummy_var
+        
+    def genop_call(self, sigtoken, gv_fnptr, args_gv):
+        return dummy_var
+
+    def genop_same_as(self, kind, gv_x):
+        return dummy_var
+
+    def genop_debug_pdb(self):    # may take an args_gv later
+        pass
+
+    def enter_next_block(self, kinds, args_gv):
+        return None
+
+    def jump_if_false(self, gv_condition):
+        return self
+
+    def jump_if_true(self, gv_condition):
+        return self
+
+    def finish_and_return(self, sigtoken, gv_returnvar):
+        pass
+
+    def finish_and_goto(self, outputargs_gv, targetblock):
+        pass
+
+    def flexswitch(self, gv_exitswitch):
+        return ReplayFlexSwitch(self)
+
+    def show_incremental_progress(self):
+        pass
+
 class RI386GenOp(AbstractRGenOp):
     from pypy.jit.codegen.i386.codebuf import MachineCodeBlock
 
     def __init__(self):
         self.mcs = []   # machine code blocks where no-one is currently writing
+        self.keepalive_addrs = []
 
     def open_mc(self):
         if self.mcs:
@@ -734,18 +823,25 @@
         inputargs_gv = builder._write_prologue(sigtoken)
         return builder, entrypoint, inputargs_gv
 
-    @staticmethod
-    @specialize.genconst(0)
-    def genconst(llvalue):
+    def replay(self, block, kinds):
+        return ReplayBuilder(self), [dummy_var] * len(kinds)
+
+    @specialize.genconst(1)
+    def genconst(self, llvalue):
         T = lltype.typeOf(llvalue)
-        if isinstance(T, lltype.Primitive):
-            return IntConst(lltype.cast_primitive(lltype.Signed, llvalue))
-        elif T is llmemory.Address:
+        if T is llmemory.Address:
+            self.keepalive_addrs.append(llvalue)
             return AddrConst(llvalue)
+        elif isinstance(T, lltype.Primitive):
+            return IntConst(lltype.cast_primitive(lltype.Signed, llvalue))
         elif isinstance(T, lltype.Ptr):
-            return AddrConst(llmemory.cast_ptr_to_adr(llvalue))
+            lladdr = llmemory.cast_ptr_to_adr(llvalue)
+            self.keepalive_addrs.append(lladdr)
+            return AddrConst(lladdr)
         else:
             assert 0, "XXX not implemented"
+    
+    # attached later constPrebuiltGlobal = global_rgenop.genconst
 
     @staticmethod
     @specialize.memo()
@@ -790,20 +886,19 @@
     def sigToken(FUNCTYPE):
         return len(FUNCTYPE.ARGS)     # for now
 
-    constPrebuiltGlobal = genconst
-
-
     def gencallableconst(self, sigtoken, name, entrypointaddr):
         return IntConst(entrypointaddr)
 
     @staticmethod
     def erasedType(T):
+        if T is llmemory.Address:
+            return llmemory.Address
         if isinstance(T, lltype.Primitive):
             return lltype.Signed
-        elif T is llmemory.Address:
-            return llmemory.Address
         elif isinstance(T, lltype.Ptr):
             return llmemory.Address
         else:
             assert 0, "XXX not implemented"
 
+global_rgenop = RI386GenOp()
+RI386GenOp.constPrebuiltGlobal = global_rgenop.genconst

Modified: pypy/dist/pypy/jit/codegen/i386/test/test_genc_promotion.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/i386/test/test_genc_promotion.py	(original)
+++ pypy/dist/pypy/jit/codegen/i386/test/test_genc_promotion.py	Wed Oct 11 19:29:38 2006
@@ -2,12 +2,17 @@
 from pypy.jit.timeshifter.test import test_promotion
 from pypy.jit.codegen.i386.test.test_genc_ts import I386TimeshiftingTestMixin
 
-py.test.skip("in-progress")
-
-class TestVList(I386TimeshiftingTestMixin,
+class TestPromotion(I386TimeshiftingTestMixin,
                 test_promotion.TestPromotion):
 
     # for the individual tests see
     # ====> ../../../timeshifter/test/test_promotion.py
 
-    pass
+    def test_many_promotions(self):
+        py.test.skip("in-progress")
+
+    def test_multiple_portal_calls(self):
+        py.test.skip("in-progress")
+
+    def test_more_promotes(self):
+        py.test.skip("in-progress :(")



More information about the Pypy-commit mailing list