Author: Ivan Sichmann Freitas <ivansichfrei...@gmail.com>
Branch: ppc-updated-backend
Changeset: r71752:3fe6019555b7
Date: 2014-05-28 14:25 +0000
http://bitbucket.org/pypy/pypy/changeset/3fe6019555b7/

Log:    Add _push_all_regs_to_jitframe and _pop_all_regs_from_jitframe

        They still need to be fixed for fpr's

diff --git a/rpython/jit/backend/ppc/ppc_assembler.py 
b/rpython/jit/backend/ppc/ppc_assembler.py
--- a/rpython/jit/backend/ppc/ppc_assembler.py
+++ b/rpython/jit/backend/ppc/ppc_assembler.py
@@ -199,6 +199,47 @@
     recovery_func_sign = lltype.Ptr(lltype.FuncType([lltype.Signed] * 3,
             lltype.Signed))
 
+    # TODO: see with we really need the ignored_regs argument
+    def _push_all_regs_to_jitframe(self, mc, ignored_regs, withfloats,
+                                   callee_only=False):
+        base_ofs = self.cpu.get_baseofs_of_frame_field()
+        if callee_only:
+            # Only push registers used to pass arguments to the callee
+            regs = r.VOLATILES
+        else:
+            regs = r.ALL_REGS
+        # For now, just push all regs to the jitframe
+        for i, reg in enumerate(regs):
+            # XXX should we progress to higher addresses?
+            mc.store_reg(reg, base_ofs - (i * WORD))
+
+        if withfloats:
+            if callee_only:
+                regs = r.VOLATILES_FLOAT
+            else:
+                regs = r.ALL_FLOAT_REGS
+            for i, reg in enumerate(regs):
+                pass # TODO find or create the proper store indexed for fpr's
+
+    def _pop_all_regs_from_jitframe(self, mc, ignored_regs, withfloats,
+                                    callee_only=False):
+        base_ofs = self.cpu.get_baseofs_of_frame_field()
+        if callee_only:
+            regs = r.VOLATILES
+        else:
+            regs = r.ALL_REGS
+        for i, reg in enumerate(regs):
+            # XXX should we progress to higher addressess
+            mc.load_from_addr(reg, base_ofs - (i * WORD))
+
+        if withfloats:
+            if callee_only:
+                regs = r.VOLATILES_FLOAT
+            else:
+                regs = r.ALL_FLOAT_REGS
+            for i, reg in enumerate(regs):
+                pass # TODO find or create the proper load indexed for fpr's
+
     @rgc.no_collect
     def decode_registers_and_descr(self, mem_loc, spp, registers, 
fp_registers):
         """Decode locations encoded in memory at mem_loc and write the values
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to