[pypy-commit] pypy ppc-jit-backend: made first tests pass again on ppc64

hager noreply at buildbot.pypy.org
Sat Dec 3 00:24:45 CET 2011


Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r50081:7805074b94a4
Date: 2011-12-02 15:24 -0800
http://bitbucket.org/pypy/pypy/changeset/7805074b94a4/

Log:	made first tests pass again on ppc64

diff --git a/pypy/jit/backend/ppc/ppcgen/arch.py b/pypy/jit/backend/ppc/ppcgen/arch.py
--- a/pypy/jit/backend/ppc/ppcgen/arch.py
+++ b/pypy/jit/backend/ppc/ppcgen/arch.py
@@ -11,7 +11,7 @@
 else:
     WORD = 8
     IS_PPC_32 = False
-    BACKCHAIN_SIZE = 6
+    BACKCHAIN_SIZE = 4
 
 DWORD                   = 2 * WORD
 IS_PPC_64               = not IS_PPC_32
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
@@ -144,11 +144,9 @@
             if reg.value == r.SPP.value:
                 continue
             if IS_PPC_32:
-                #self.mc.stw(reg.value, r.SPP.value, WORD + WORD * i)
                 self.mc.stw(reg.value, r.SPP.value, 
                         self.OFFSET_SPP_TO_GPR_SAVE_AREA + WORD * i)
             else:
-                #self.mc.std(reg.value, r.SPP.value, WORD + WORD * i)
                 self.mc.std(reg.value, r.SPP.value, 
                         self.OFFSET_SPP_TO_GPR_SAVE_AREA + WORD * i)
 
@@ -157,30 +155,12 @@
         """
         for i, reg in enumerate(NONVOLATILES):
             if IS_PPC_32:
-                #mc.lwz(reg.value, spp_reg.value, WORD + WORD * i)
                 mc.lwz(reg.value, spp_reg.value, 
                         self.OFFSET_SPP_TO_GPR_SAVE_AREA + WORD * i)
             else:
-                #mc.ld(reg.value, spp_reg.value, WORD + WORD * i)
                 mc.ld(reg.value, spp_reg.value, 
                         self.OFFSET_SPP_TO_GPR_SAVE_AREA + WORD * i)
 
-    # Fetches the identifier from a descr object.
-    # If it has no identifier, then an unused identifier
-    # is generated
-    # XXX could be overwritten later on, better approach?
-    def _get_identifier_from_descr(self, descr):
-        try:
-            identifier = descr.identifier
-        except AttributeError:
-            identifier = None
-        if identifier is not None:
-            return identifier
-        keys = self.cpu.saved_descr.keys()
-        if keys == []:
-            return 1
-        return max(keys) + 1
-
     def get_asmmemmgr_blocks(self, looptoken):
         clt = looptoken.compiled_loop_token
         if clt.asmmemmgr_blocks is None:
@@ -211,8 +191,6 @@
             self.mc.std(r.SPP.value, r.SP.value, WORD)
 
         # compute spilling pointer (SPP)
-        #self.mc.addi(r.SPP.value, r.SP.value, frame_depth
-        #             - self.GPR_SAVE_AREA_AND_FORCE_INDEX)
         self.mc.addi(r.SPP.value, r.SP.value, 
                 frame_depth - self.OFFSET_SPP_TO_OLD_BACKCHAIN)
         self._save_nonvolatiles()
@@ -294,7 +272,6 @@
                 else:
                     value = decode32(spilling_area, spilling_depth - stack_location * WORD)
             else: # REG_LOC
-                #import pdb; pdb.set_trace()
                 reg = ord(enc[i])
                 if group == self.FLOAT_TYPE:
                     assert 0, "not implemented yet"
@@ -377,19 +354,7 @@
     #   - jump back to the calling code
     def _gen_exit_path(self):
         mc = PPCBuilder() 
-        # compute offset to new SP
-        ##size = WORD * (len(r.MANAGED_REGS)) + BACKCHAIN_SIZE
-        # set SP
-        ##if IS_PPC_32:
-        ##    mc.stwu(r.SP.value, r.SP.value, -size)
-        ##else:
-        ##    mc.stdu(r.SP.value, r.SP.value, -size)
         self._save_managed_regs(mc)
-        # adjust SP (r1)
-        # XXX do quadword alignment
-        #while size % (4 * WORD) != 0:
-        #    size += WORD
-        #
         decode_func_addr = llhelper(self.recovery_func_sign,
                 self.failure_recovery_func)
         if IS_PPC_32:
@@ -403,10 +368,9 @@
 
         # load parameters into parameter registers
         if IS_PPC_32:
-            #mc.lwz(r.r3.value, r.SPP.value, 0)     # address of state encoding 
             mc.lwz(r.r3.value, r.SPP.value, self.ENCODING_AREA)     # address of state encoding 
         else:
-            mc.ld(r.r3.value, r.SPP.value, 0)     
+            mc.ld(r.r3.value, r.SPP.value, self.ENCODING_AREA)     
         mc.mr(r.r4.value, r.SP.value)          # load stack pointer
         mc.mr(r.r5.value, r.SPP.value)         # load spilling pointer
         #
@@ -424,30 +388,19 @@
         if IS_PPC_64:
             mc.ld(r.r2.value, r.SP.value, 3 * WORD)
         #
-        ##mc.addi(r.SP.value, r.SP.value, size)
         # save SPP in r5
         # (assume that r5 has been written to failboxes)
         mc.mr(r.r5.value, r.SPP.value)
         self._restore_nonvolatiles(mc, r.r5)
         # load old backchain into r4
-        #offset_to_old_backchain = (  FPR_SAVE_AREA
-        #                           + GPR_SAVE_AREA
-        #                           + FLOAT_INT_CONVERSION
-        #                           + FORCE_INDEX
-        #                           + self.ENCODING_AREA)
         if IS_PPC_32:
-            #mc.lwz(r.r4.value, r.r5.value, offset_to_old_backchain) 
             mc.lwz(r.r4.value, r.r5.value, self.OFFSET_SPP_TO_OLD_BACKCHAIN + WORD) 
         else:
-            ##mc.ld(r.r4.value, r.r5.value, offset_to_old_backchain + WORD)
-            #mc.ld(r.r4.value, r.r5.value, offset_to_old_backchain)
             mc.ld(r.r4.value, r.r5.value, self.OFFSET_SPP_TO_OLD_BACKCHAIN + 2 * WORD)
         mc.mtlr(r.r4.value)     # restore LR
         # From SPP, we have a constant offset to the old backchain. We use the
         # SPP to re-establish the old backchain because this exit stub is
         # generated before we know how much space the entire frame will need.
-        ##mc.addi(r.SP.value, r.r5.value, self.GPR_SAVE_AREA_AND_FORCE_INDEX) # restore old SP
-        #mc.addi(r.SP.value, r.r5.value, offset_to_old_backchain) # restore old SP
         mc.addi(r.SP.value, r.r5.value, self.OFFSET_SPP_TO_OLD_BACKCHAIN) # restore old SP
         mc.blr()
         mc.prepare_insts_blocks()
@@ -460,10 +413,8 @@
         for i in range(len(r.MANAGED_REGS)):
             reg = r.MANAGED_REGS[i]
             if IS_PPC_32:
-                #mc.stw(reg.value, r.SP.value, i * WORD + BACKCHAIN_SIZE)
                 mc.stw(reg.value, r.SPP.value, i * WORD)
             else:
-                #mc.std(reg.value, r.SP.value, i * WORD + BACKCHAIN_SIZE)
                 mc.std(reg.value, r.SPP.value, i * WORD)
 
     # Load parameters from fail args into locations (stack or registers)
@@ -523,8 +474,6 @@
         self.mc.free_scratch_reg()
 
         # load values passed on the stack to the corresponding locations
-        #stack_position = self.GPR_SAVE_AREA_AND_FORCE_INDEX\
-        #                 + BACKCHAIN_SIZE
         stack_position = self.OFFSET_SPP_TO_OLD_BACKCHAIN\
                          + BACKCHAIN_SIZE
 
@@ -809,11 +758,6 @@
         return mc.materialize(self.cpu.asmmemmgr, [], 
                               self.cpu.gc_ll_descr.gcrootmap)
 
-    #def compute_frame_depth(self, regalloc):
-    #    frame_depth = (GPR_SAVE_AREA                        # GPR space
-    #                   + WORD                               # FORCE INDEX
-    #                   + regalloc.frame_manager.frame_depth * WORD)
-    #    return frame_depth
     def compute_frame_depth(self, regalloc):
         frame_depth = (  GPR_SAVE_AREA
                        + FPR_SAVE_AREA


More information about the pypy-commit mailing list