[pypy-svn] pypy arm-backed-float: use d15 as vfp scratch register and use it instead of temporarily pushing some register
bivab
commits-noreply at bitbucket.org
Tue Apr 19 12:01:13 CEST 2011
Author: David Schneider <david.schneider at picle.org>
Branch: arm-backed-float
Changeset: r43473:8c20c87901d7
Date: 2011-04-19 10:41 +0200
http://bitbucket.org/pypy/pypy/changeset/8c20c87901d7/
Log: use d15 as vfp scratch register and use it instead of temporarily
pushing some register
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
@@ -388,10 +388,8 @@
if loc.is_vfp_reg():
self.mc.VLDR(loc.value, r.ip.value)
else:
- tmpreg = r.d0
- with saved_registers(self.mc, [], [tmpreg]):
- self.mc.VLDR(tmpreg.value, r.ip.value)
- self.mov_loc_loc(tmpreg, loc)
+ self.mc.VLDR(r.vfp_ip.value, r.ip.value)
+ self.mov_loc_loc(r.vfp_ip, loc)
def _count_reg_args(self, args):
reg_args = 0
@@ -442,9 +440,8 @@
self.mc.VLDR(loc.value, r.fp.value, stack_position)
elif loc.is_stack():
if loc.type == FLOAT:
- with saved_registers(self.mc, [], [r.d0]):
- self.mc.VLDR(r.d0.value, r.fp.value, stack_position)
- self.mov_loc_loc(r.d0, loc)
+ self.mc.VLDR(r.vfp_ip.value, r.fp.value, stack_position)
+ self.mov_loc_loc(r.vfp_ip, loc)
elif loc.type == INT or loc.type == REF:
self.mc.LDR_ri(r.ip.value, r.fp.value, stack_position)
self.mov_loc_loc(r.ip, loc)
diff --git a/pypy/jit/backend/arm/registers.py b/pypy/jit/backend/arm/registers.py
--- a/pypy/jit/backend/arm/registers.py
+++ b/pypy/jit/backend/arm/registers.py
@@ -13,9 +13,10 @@
sp = r13
lr = r14
pc = r15
+vfp_ip = d15
all_regs = [r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10]
-all_vfp_regs = vfpregisters
+all_vfp_regs = vfpregisters[:-1]
caller_resp = [r0, r1, r2, r3]
callee_resp = [r4, r5, r6, r7, r8, r9, r10, fp]
More information about the Pypy-commit
mailing list