Author: hager <[email protected]>
Branch: ppc-jit-backend
Changeset: r49437:9b6289cbf90b
Date: 2011-11-15 18:13 +0100
http://bitbucket.org/pypy/pypy/changeset/9b6289cbf90b/

Log:    Use r0 as one-element stack

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
@@ -455,6 +455,7 @@
         allblocks = self.get_asmmemmgr_blocks(looptoken)
         self.datablockwrapper = MachineDataBlockWrapper(self.cpu.asmmemmgr,
                                                         allblocks)
+        self.stack_in_use = False
 
     def setup_once(self):
         gc_ll_descr = self.cpu.gc_ll_descr
@@ -593,6 +594,7 @@
         self.mc = None
         self._regalloc = None
         assert self.datablockwrapper is None
+        self.stack_in_use = False
 
     def _walk_operations(self, operations, regalloc):
         self._regalloc = regalloc
@@ -790,12 +792,12 @@
         loc"""
 
         if loc.is_stack():
-            if loc.type != FLOAT:
-                scratch_reg = r.r0
-            else:
+            if loc.type == FLOAT:
                 assert 0, "not implemented yet"
-            self.regalloc_mov(loc, scratch_reg)
-            self.regalloc_push(scratch_reg)
+            # XXX this code has to be verified
+            assert not self.stack_in_use
+            self.regalloc_mov(loc, r.r0)
+            self.stack_in_use = True
         elif loc.is_reg():
             self.mc.addi(r.SP.value, r.SP.value, -WORD) # decrease stack 
pointer
             # push value
@@ -814,12 +816,12 @@
         """Pops the value on top of the stack to loc. Can trash the current
         value of r0 when popping to a stack loc"""
         if loc.is_stack():
-            if loc.type != FLOAT:
-                scratch_reg = r.r0
-            else:
+            if loc.type == FLOAT:
                 assert 0, "not implemented yet"
-            self.regalloc_pop(scratch_reg)
-            self.regalloc_mov(scratch_reg, loc)
+            # XXX this code has to be verified
+            assert self.stack_in_use
+            self.regalloc_mov(r.r0, loc)
+            self.stack_in_use = False
         elif loc.is_reg():
             # pop value
             if IS_PPC_32:
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to