[pypy-commit] pypy ppc-backend-2: Save and restore volatile floats.

edelsohn noreply at buildbot.pypy.org
Wed Jun 6 03:24:07 CEST 2012


Author: edelsohn
Branch: ppc-backend-2
Changeset: r55423:bc0eb8165a75
Date: 2012-06-05 21:23 -0400
http://bitbucket.org/pypy/pypy/changeset/bc0eb8165a75/

Log:	Save and restore volatile floats.

diff --git a/pypy/jit/backend/ppc/helper/assembler.py b/pypy/jit/backend/ppc/helper/assembler.py
--- a/pypy/jit/backend/ppc/helper/assembler.py
+++ b/pypy/jit/backend/ppc/helper/assembler.py
@@ -77,9 +77,11 @@
         in ENCODING AREA around calls
     """
 
-    def __init__(self, codebuilder, save_RES=True):
+    def __init__(self, codebuilder, save_RES=True, save_FLOAT=True):
+        self.mc = codebuilder
         self.save_RES = save_RES
-        self.mc = codebuilder
+        self.save_FLOAT = save_FLOAT
+        self.FLOAT_OFFSET = len(r.VOLATILES)
 
     def __enter__(self):
         """ before a call, volatile registers are saved in ENCODING AREA
@@ -88,6 +90,10 @@
             if not self.save_RES and reg is r.RES:
                 continue
             self.mc.store(reg.value, r.SPP.value, i * WORD)
+        if self.save_FLOAT:
+            for i, reg in enumerate(r.VOLATILES_FLOAT):
+                self.mc.stfd(reg.value, r.SPP.value,
+                             (i + self.FLOAT_OFFSET) * WORD)
 
     def __exit__(self, *args):
         """ after call, volatile registers have to be restored
@@ -96,3 +102,7 @@
             if not self.save_RES and reg is r.RES:
                 continue
             self.mc.load(reg.value, r.SPP.value, i * WORD)
+        if self.save_FLOAT:
+            for i, reg in enumerate(r.VOLATILES_FLOAT):
+                self.mc.lfd(reg.value, r.SPP.value,
+                             (i + self.FLOAT_OFFSET) * WORD)


More information about the pypy-commit mailing list