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

Reply via email to