[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