[pypy-commit] pypy ppc-backend-2: Save and restore floats in _build_malloc_slowpath.
edelsohn
noreply at buildbot.pypy.org
Mon Jun 11 16:24:15 CEST 2012
Author: edelsohn
Branch: ppc-backend-2
Changeset: r55585:c128a0e02421
Date: 2012-06-11 10:23 -0400
http://bitbucket.org/pypy/pypy/changeset/c128a0e02421/
Log: Save and restore floats in _build_malloc_slowpath.
diff --git a/pypy/jit/backend/ppc/ppc_assembler.py b/pypy/jit/backend/ppc/ppc_assembler.py
--- a/pypy/jit/backend/ppc/ppc_assembler.py
+++ b/pypy/jit/backend/ppc/ppc_assembler.py
@@ -328,7 +328,7 @@
if IS_PPC_64:
for _ in range(6):
mc.write32(0)
- frame_size = (# add space for floats later
+ frame_size = (len(r.MANAGED_FP_REGS) * WORD
+ (BACKCHAIN_SIZE + MAX_REG_PARAMS) * WORD)
with scratch_reg(mc):
@@ -342,7 +342,9 @@
mc.std(r.SCRATCH.value, r.SP.value, frame_size + 2 * WORD)
# managed volatiles are saved below
if self.cpu.supports_floats:
- assert 0, "make sure to save floats here"
+ for i in range(len(r.MANAGED_FP_REGS)):
+ mc.std(r.MANAGED_FP_REGS[i].value, r.SP.value,
+ (BACKCHAIN_SIZE + MAX_REG_PARAMS + i) * WORD)
# Values to compute size stored in r3 and r4
mc.subf(r.RES.value, r.RES.value, r.r4.value)
addr = self.cpu.gc_ll_descr.get_malloc_slowpath_addr()
@@ -351,6 +353,11 @@
mc.call(rffi.cast(lltype.Signed, addr))
for reg, ofs in PPCRegisterManager.REGLOC_TO_COPY_AREA_OFS.items():
mc.load(reg.value, r.SPP.value, ofs)
+ # restore floats
+ if self.cpu.supports_floats:
+ for i in range(len(r.MANAGED_FP_REGS)):
+ mc.lfd(r.MANAGED_FP_REGS[i].value, r.SP.value,
+ (BACKCHAIN_SIZE + MAX_REG_PARAMS + i) * WORD)
mc.cmp_op(0, r.RES.value, 0, imm=True)
jmp_pos = mc.currpos()
More information about the pypy-commit
mailing list