Author: David Schneider <[email protected]>
Branch: arm-backend-2
Changeset: r51309:bb83f459ff90
Date: 2012-01-13 14:58 +0100
http://bitbucket.org/pypy/pypy/changeset/bb83f459ff90/

Log:    Implement case of moving a const float to 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
@@ -856,12 +856,18 @@
             assert 0, 'unsupported case'
 
     def _mov_imm_float_to_loc(self, prev_loc, loc, cond=c.AL):
-        if not loc.is_vfp_reg():
+        if loc.is_vfp_reg():
+            self.mc.PUSH([r.ip.value], cond=cond)
+            self.mc.gen_load_int(r.ip.value, prev_loc.getint(), cond=cond)
+            self.mc.VLDR(loc.value, r.ip.value, cond=cond)
+            self.mc.POP([r.ip.value], cond=cond)
+        elif loc.is_stack():
+            self.regalloc_push(r.vfp_ip)
+            self.regalloc_mov(prev_loc, r.vfp_ip, cond)
+            self.regalloc_mov(r.vfp_ip, loc, cond)
+            self.regalloc_pop(r.vfp_ip)
+        else:
             assert 0, 'unsupported case'
-        self.mc.PUSH([r.ip.value], cond=cond)
-        self.mc.gen_load_int(r.ip.value, prev_loc.getint(), cond=cond)
-        self.mc.VLDR(loc.value, r.ip.value, cond=cond)
-        self.mc.POP([r.ip.value], cond=cond)
 
     def _mov_vfp_reg_to_loc(self, prev_loc, loc, cond=c.AL):
         if loc.is_vfp_reg():
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to