Author: hager <sven.ha...@uni-duesseldorf.de> Branch: ppc-jit-backend Changeset: r49842:62d08e2b17fc Date: 2011-11-26 15:44 -0800 http://bitbucket.org/pypy/pypy/changeset/62d08e2b17fc/
Log: Add ugly way to avoid problems with holes in MANAGED_REGS 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 @@ -270,10 +270,7 @@ if group == self.FLOAT_TYPE: assert 0, "not implemented yet" else: - if IS_PPC_32: - value = decode32(spilling_area, spilling_depth - stack_location * WORD) - else: - value = decode64(spilling_area, spilling_depth - stack_location * WORD) + value = decode32(spilling_area, spilling_depth - stack_location * WORD) else: # REG_LOC reg = ord(enc[i]) if group == self.FLOAT_TYPE: @@ -281,10 +278,12 @@ self.fail_boxes_float.setitem(fail_index, value) continue else: + # XXX dirty, fix + sub = r.managed_regs_sub(reg) if IS_PPC_32: - value = decode32(regs, (reg - 3) * WORD) + value = decode32(regs, (reg - sub) * WORD) else: - value = decode64(regs, (reg - 3) * WORD) + value = decode64(regs, (reg - sub) * WORD) if group == self.INT_TYPE: self.fail_boxes_int.setitem(fail_index, value) @@ -325,8 +324,10 @@ loc = regalloc.frame_manager.frame_pos(stack_loc, INT) j += 4 else: # REG_LOC - #loc = r.all_regs[ord(res)] - loc = r.MANAGED_REGS[ord(res) - 3] + reg = ord(res) + # XXX dirty, fix + sub = r.managed_regs_sub(reg) + loc = r.MANAGED_REGS[reg - sub] j += 1 locs.append(loc) return locs 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 @@ -16,8 +16,14 @@ RES = r3 MANAGED_REGS = [r3, r4, r5, r6, r7, r8, r9, r10, - r11, r12, r13, r14, r15, r16, r17, r18, + r11, r12, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30] PARAM_REGS = [r3, r4, r5, r6, r7, r8, r9, r10] + +# XXX fix this at some point +def managed_regs_sub(reg): + if reg > r13.value: + return 4 + return 3 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit