Author: David Schneider <[email protected]>
Branch: arm-backend-2
Changeset: r51785:db27ab55d51b
Date: 2012-01-26 10:20 +0100
http://bitbucket.org/pypy/pypy/changeset/db27ab55d51b/
Log: add more checks for floating point support
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
@@ -207,8 +207,11 @@
def _gen_leave_jitted_hook_code(self, save_exc):
mc = ARMv7Builder()
- # XXX add a check if cpu supports floats
- with saved_registers(mc, r.caller_resp + [r.lr], r.caller_vfp_resp):
+ if self.cpu.supports_floats:
+ floats = r.caller_vfp_resp
+ else:
+ floats = []
+ with saved_registers(mc, r.caller_resp + [r.lr], floats):
addr = self.cpu.get_on_leave_jitted_int(save_exception=save_exc)
mc.BL(addr)
assert self._exit_code_addr != 0
@@ -222,8 +225,11 @@
#
mc = ARMv7Builder()
# call on_leave_jitted_save_exc()
- # XXX add a check if cpu supports floats
- with saved_registers(mc, r.caller_resp + [r.ip], r.caller_vfp_resp):
+ if self.cpu.supports_floats:
+ floats = r.caller_vfp_resp
+ else:
+ floats = []
+ with saved_registers(mc, r.caller_resp + [r.lr], floats):
addr = self.cpu.get_on_leave_jitted_int(save_exception=True,
default_to_memoryerror=True)
mc.BL(addr)
diff --git a/pypy/jit/backend/arm/helper/assembler.py
b/pypy/jit/backend/arm/helper/assembler.py
--- a/pypy/jit/backend/arm/helper/assembler.py
+++ b/pypy/jit/backend/arm/helper/assembler.py
@@ -145,6 +145,7 @@
class saved_registers(object):
def __init__(self, assembler, regs_to_save, vfp_regs_to_save=None):
self.assembler = assembler
+ self.supports_floats = assembler.cpu.supports_floats
if vfp_regs_to_save is None:
vfp_regs_to_save = []
self.regs = regs_to_save
@@ -153,11 +154,11 @@
def __enter__(self):
if len(self.regs) > 0:
self.assembler.PUSH([r.value for r in self.regs])
- if len(self.vfp_regs) > 0:
+ if self.supports_floats and len(self.vfp_regs) > 0:
self.assembler.VPUSH([r.value for r in self.vfp_regs])
def __exit__(self, *args):
- if len(self.vfp_regs) > 0:
+ if self.supports_floats and len(self.vfp_regs) > 0:
self.assembler.VPOP([r.value for r in self.vfp_regs])
if len(self.regs) > 0:
self.assembler.POP([r.value for r in self.regs])
diff --git a/pypy/jit/backend/arm/opassembler.py
b/pypy/jit/backend/arm/opassembler.py
--- a/pypy/jit/backend/arm/opassembler.py
+++ b/pypy/jit/backend/arm/opassembler.py
@@ -1068,8 +1068,11 @@
# Path B: use assembler helper
asm_helper_adr = self.cpu.cast_adr_to_int(jd.assembler_helper_adr)
- with saved_registers(self.mc, r.caller_resp[1:] + [r.ip],
- r.caller_vfp_resp):
+ if self.cpu.supports_floats:
+ floats = r.caller_vfp_resp
+ else:
+ floats = []
+ with saved_registers(self.mc, r.caller_resp[1:] + [r.ip], floats):
# result of previous call is in r0
self.mov_loc_loc(arglocs[0], r.r1)
self.mc.BL(asm_helper_adr)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit