[pypy-svn] r69676 - pypy/branch/virtual-forcing/pypy/jit/backend/x86

fijal at codespeak.net fijal at codespeak.net
Fri Nov 27 10:50:26 CET 2009


Author: fijal
Date: Fri Nov 27 10:50:25 2009
New Revision: 69676

Modified:
   pypy/branch/virtual-forcing/pypy/jit/backend/x86/assembler.py
   pypy/branch/virtual-forcing/pypy/jit/backend/x86/regalloc.py
   pypy/branch/virtual-forcing/pypy/jit/backend/x86/runner.py
Log:
* Use regular regalloc interface, no special support for ebp now
* Instead of virtualizable offset, store vable_loc on regalloc, returned
  by force token
* Not finished, XXX force() in runner


Modified: pypy/branch/virtual-forcing/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/jit/backend/x86/assembler.py	(original)
+++ pypy/branch/virtual-forcing/pypy/jit/backend/x86/assembler.py	Fri Nov 27 10:50:25 2009
@@ -210,8 +210,7 @@
         self.mc.PUSH(ebx)
         self.mc.PUSH(esi)
         self.mc.PUSH(edi)
-        # could be really PUSH(0), but that way is safer
-        self.mc.MOV(mem(ebp, self.cpu.virtualizable_ofs), imm(0))
+        self.mc.PUSH(imm(0)) # the virtualizable flag
         # NB. exactly 4 pushes above; if this changes, fix stack_pos().
         # You must also keep get_basic_shape() in sync.
         adr_stackadjust = self._patchable_stackadjust()
@@ -686,7 +685,7 @@
 
     def genop_guard_guard_not_forced(self, ign_1, guard_op, addr,
                                      locs, ign_2):
-        self.mc.CMP(mem(ebp, self.cpu.virtualizable_ofs), imm(0))
+        self.mc.CMP(locs[0], imm(0))
         return self.implement_guard(addr, self.mc.JNZ)
 
     def genop_guard_guard_exception(self, ign_1, guard_op, addr,
@@ -1142,6 +1141,9 @@
         assert 0 < offset <= 127
         mc.overwrite(jz_location-1, [chr(offset)])
 
+    def genop_force_token(self, op, arglocs, resloc):
+        self.mc.LEA(resloc, arglocs[0])
+
     def not_implemented_op_discard(self, op, arglocs):
         msg = "not implemented operation: %s" % op.getopname()
         print msg

Modified: pypy/branch/virtual-forcing/pypy/jit/backend/x86/regalloc.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/jit/backend/x86/regalloc.py	(original)
+++ pypy/branch/virtual-forcing/pypy/jit/backend/x86/regalloc.py	Fri Nov 27 10:50:25 2009
@@ -131,8 +131,7 @@
     def _prepare(self, inputargs, operations):
         self.sm = X86StackManager()
         # a bit of a hack - always grab one position at the beginning
-        loc = self.sm.loc(TempBox(), 1)
-        self.assembler.cpu.virtualizable_ofs = loc.ofs_relative_to_ebp()
+        self.vable_loc = self.sm.loc(TempBox(), 1)
         cpu = self.assembler.cpu
         cpu.gc_ll_descr.rewrite_assembler(cpu, operations)
         # compute longevity of variables
@@ -399,7 +398,7 @@
     consider_guard_isnull = _consider_guard
 
     def consider_guard_not_forced(self, op, ignored):
-        self.perform_guard(op, [], None)
+        self.perform_guard(op, [self.vable_loc], None)
 
     def consider_finish(self, op, ignored):
         locs = [self.loc(v) for v in op.args]
@@ -943,7 +942,8 @@
         return gcrootmap.compress_callshape(shape)
 
     def consider_force_token(self, op, ignored):
-        self.rm.reg_bindings[op.result] = ebp
+        loc = self.rm.force_allocate_reg(op.result)
+        self.Perform(op, [self.vable_loc], loc)
 
     def not_implemented_op(self, op, ignored):
         msg = "[regalloc] Not implemented operation: %s" % op.getopname()

Modified: pypy/branch/virtual-forcing/pypy/jit/backend/x86/runner.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/jit/backend/x86/runner.py	(original)
+++ pypy/branch/virtual-forcing/pypy/jit/backend/x86/runner.py	Fri Nov 27 10:50:25 2009
@@ -86,8 +86,9 @@
         adr = llmemory.cast_ptr_to_adr(x)
         return CPU386.cast_adr_to_int(adr)
 
-    def force(self, stack_base, descr, args):
+    def force(self, stack_base):
         # args parameter is there only for types
+        XXX # rewrite, kill
         TP = rffi.CArrayPtr(lltype.Signed)
         rffi.cast(TP, stack_base + self.virtualizable_ofs)[0] = 1
         # move things to latest values



More information about the Pypy-commit mailing list