[pypy-svn] pypy arm-backed-float: fix an issue when pushing a vfp value to the stack that was stored in the spilling area of the stack
bivab
commits-noreply at bitbucket.org
Tue Apr 19 12:01:15 CEST 2011
Author: David Schneider <david.schneider at picle.org>
Branch: arm-backed-float
Changeset: r43474:f5141bd3ac45
Date: 2011-04-19 10:43 +0200
http://bitbucket.org/pypy/pypy/changeset/f5141bd3ac45/
Log: fix an issue when pushing a vfp value to the stack that was stored
in the spilling area of the stack
diff --git a/pypy/jit/backend/arm/assembler.py b/pypy/jit/backend/arm/assembler.py
--- a/pypy/jit/backend/arm/assembler.py
+++ b/pypy/jit/backend/arm/assembler.py
@@ -757,8 +757,12 @@
def regalloc_push(self, loc):
if loc.is_stack():
- self.regalloc_mov(loc, r.ip)
- self.mc.PUSH([r.ip.value])
+ if loc.type != FLOAT:
+ scratch_reg = r.ip
+ else:
+ scratch_reg = r.vfp_ip
+ self.regalloc_mov(loc, scratch_reg)
+ self.regalloc_push(scratch_reg)
elif loc.is_reg():
self.mc.PUSH([loc.value])
elif loc.is_vfp_reg():
@@ -771,8 +775,12 @@
def regalloc_pop(self, loc):
if loc.is_stack():
- self.mc.POP([r.ip.value])
- self.regalloc_mov(r.ip, loc)
+ if loc.type != FLOAT:
+ scratch_reg = r.ip
+ else:
+ scratch_reg = r.vfp_ip
+ self.regalloc_pop(scratch_reg)
+ self.regalloc_mov(scratch_reg, loc)
elif loc.is_reg():
self.mc.POP([loc.value])
elif loc.is_vfp_reg():
More information about the Pypy-commit
mailing list