[pypy-commit] pypy ppc-jit-backend: correct offset computations due to new stack frames and handle holes in register array more properly
hager
noreply at buildbot.pypy.org
Wed Dec 7 15:42:42 CET 2011
Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r50247:60ddbddadec5
Date: 2011-12-07 15:41 +0100
http://bitbucket.org/pypy/pypy/changeset/60ddbddadec5/
Log: correct offset computations due to new stack frames and handle holes
in register array more properly
diff --git a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
--- a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
+++ b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
@@ -237,7 +237,7 @@
assert spilling_depth >= 0
assert spp_loc > stack_loc
- regs = rffi.cast(rffi.CCHARP, stack_loc + BACKCHAIN_SIZE)
+ regs = rffi.cast(rffi.CCHARP, spp_loc)
i = -1
fail_index = -1
while(True):
@@ -258,12 +258,7 @@
value = decode32(enc, i+1)
i += 4
else:
- assert group == self.FLOAT_TYPE
- adr = decode32(enc, i+1)
- value = rffi.cast(rffi.CArrayPtr(longlong.FLOATSTORAGE), adr)[0]
- self.fail_boxes_float.setitem(fail_index, value)
- i += 4
- continue
+ assert 0, "not implemented yet"
elif res == self.STACK_LOC:
stack_location = decode32(enc, i+1)
i += 4
@@ -276,12 +271,11 @@
if group == self.FLOAT_TYPE:
assert 0, "not implemented yet"
else:
- # XXX dirty, fix
- #sub = r.managed_regs_sub(reg)
+ regindex = r.get_managed_reg_index(reg)
if IS_PPC_32:
- value = decode32(regs, (reg - 3) * WORD)
+ value = decode32(regs, regindex * WORD)
else:
- value = decode64(regs, (reg - 3) * WORD)
+ value = decode64(regs, regindex * WORD)
if group == self.INT_TYPE:
self.fail_boxes_int.setitem(fail_index, value)
@@ -323,9 +317,7 @@
j += 4
else: # REG_LOC
reg = ord(res)
- # XXX dirty, fix
- sub = r.managed_regs_sub(reg)
- loc = r.MANAGED_REGS[reg - sub]
+ loc = r.MANAGED_REGS[r.get_managed_reg_index(reg)]
j += 1
locs.append(loc)
return locs
@@ -656,8 +648,7 @@
mem[j] = self.REF_TYPE
j += 1
elif arg.type == FLOAT:
- mem[j] = self.FLOAT_TYPE
- j += 1
+ assert 0, "not implemented yet"
else:
assert 0, 'unknown type'
@@ -678,7 +669,6 @@
mem[j] = self.EMPTY_LOC
j += 1
i += 1
- # XXX 64 bit adjustment needed
mem[j] = chr(0xFF)
@@ -909,7 +899,7 @@
assert 0, "not implemented yet"
# XXX this code has to be verified
assert not self.stack_in_use
- target = StackLocation(0) # write to force index field
+ target = StackLocation(self.ENCODING_AREA) # write to force index field
self.regalloc_mov(loc, target)
self.stack_in_use = True
elif loc.is_reg():
@@ -934,7 +924,7 @@
assert 0, "not implemented yet"
# XXX this code has to be verified
assert self.stack_in_use
- from_loc = StackLocation(0)
+ from_loc = StackLocation(self.ENCODING_AREA)
self.regalloc_mov(from_loc, loc)
self.stack_in_use = False
elif loc.is_reg():
@@ -996,9 +986,9 @@
def _write_fail_index(self, fail_index):
self.mc.load_imm(r.r0, fail_index)
if IS_PPC_32:
- self.mc.stw(r.r0.value, r.SPP.value, 0)
+ self.mc.stw(r.r0.value, r.SPP.value, self.ENCODING_AREA)
else:
- self.mc.std(r.r0.value, r.SPP.value, 0)
+ self.mc.std(r.r0.value, r.SPP.value, self.ENCODING_AREA)
def load(self, loc, value):
assert loc.is_reg() and value.is_imm()
diff --git a/pypy/jit/backend/ppc/ppcgen/register.py b/pypy/jit/backend/ppc/ppcgen/register.py
--- a/pypy/jit/backend/ppc/ppcgen/register.py
+++ b/pypy/jit/backend/ppc/ppcgen/register.py
@@ -32,8 +32,7 @@
PARAM_REGS = [r3, r4, r5, r6, r7, r8, r9, r10]
-# XXX fix this at some point
-def managed_regs_sub(reg):
+def get_managed_reg_index(reg):
if reg > r13.value:
- return 4
- return 3
+ return reg - 4
+ return reg - 3
More information about the pypy-commit
mailing list