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) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit