[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