Author: David Schneider <[email protected]>
Branch:
Changeset: r63480:56f159906969
Date: 2013-04-18 18:04 +0200
http://bitbucket.org/pypy/pypy/changeset/56f159906969/
Log: detect the architecture and ABI during JIT-backend setup at runtime
diff --git a/rpython/jit/backend/arm/assembler.py
b/rpython/jit/backend/arm/assembler.py
--- a/rpython/jit/backend/arm/assembler.py
+++ b/rpython/jit/backend/arm/assembler.py
@@ -25,7 +25,6 @@
from rpython.rlib.rarithmetic import r_uint
from rpython.rtyper.annlowlevel import llhelper, cast_instance_to_gcref
from rpython.rtyper.lltypesystem import lltype, rffi
-from rpython.jit.backend.arm.detect import detect_hardfloat
class AssemblerARM(ResOpAssembler):
@@ -51,7 +50,6 @@
def setup_once(self):
BaseAssembler.setup_once(self)
- self.hf_abi = detect_hardfloat()
def setup(self, looptoken):
assert self.memcpy_addr != 0, 'setup_once() not called?'
diff --git a/rpython/jit/backend/arm/opassembler.py
b/rpython/jit/backend/arm/opassembler.py
--- a/rpython/jit/backend/arm/opassembler.py
+++ b/rpython/jit/backend/arm/opassembler.py
@@ -354,7 +354,7 @@
# whether to worry about a CALL that can collect; this
# is always true except in call_release_gil
can_collect=True):
- if self.hf_abi:
+ if self.cpu.hf_abi:
stack_args, adr = self._setup_call_hf(adr, arglocs, fcond,
resloc, result_info)
else:
@@ -382,7 +382,7 @@
# ensure the result is wellformed and stored in the correct location
if resloc is not None:
- if resloc.is_vfp_reg() and not self.hf_abi:
+ if resloc.is_vfp_reg() and not self.cpu.hf_abi:
# move result to the allocated register
self.mov_to_vfp_loc(r.r0, r.r1, resloc)
elif resloc.is_reg() and result_info != (-1, -1):
diff --git a/rpython/jit/backend/arm/runner.py
b/rpython/jit/backend/arm/runner.py
--- a/rpython/jit/backend/arm/runner.py
+++ b/rpython/jit/backend/arm/runner.py
@@ -7,6 +7,7 @@
from rpython.rlib.jit_hooks import LOOP_RUN_CONTAINER
from rpython.rtyper.lltypesystem import lltype, llmemory
from rpython.jit.backend.arm.detect import detect_hardfloat
+from rpython.jit.backend.arm.detect import detect_arch_version
jitframe.STATICSIZE = JITFRAME_FIXED_SIZE
@@ -26,7 +27,7 @@
frame_reg = fp
hf_abi = False # use hard float abi flag
- arch_version = 7
+ arch_version = 6 # assume ARMv6 as base case
def __init__(self, rtyper, stats, opts=None, translate_support_code=False,
gcdescr=None):
@@ -46,6 +47,8 @@
self.assembler = AssemblerARM(self, self.translate_support_code)
def setup_once(self):
+ self.arch_version = detect_arch_version()
+ self.hf_abi = detect_hardfloat()
self.assembler.setup_once()
def finish_once(self):
@@ -115,8 +118,3 @@
class CPU_ARM(AbstractARMCPU):
"""ARM v7"""
backend_name = "armv7"
-
-class CPU_ARMv6(AbstractARMCPU):
- """ ARM v6, uses hardfp ABI, requires vfp"""
- arch_version = 6
- backend_name = "armv6"
diff --git a/rpython/jit/backend/detect_cpu.py
b/rpython/jit/backend/detect_cpu.py
--- a/rpython/jit/backend/detect_cpu.py
+++ b/rpython/jit/backend/detect_cpu.py
@@ -33,8 +33,8 @@
'x86_64': 'x86',
'amd64': 'x86', # freebsd
'AMD64': 'x86', # win64
- 'armv7l': 'armv7',
- 'armv6l': 'armv6',
+ 'armv7l': 'arm',
+ 'armv6l': 'arm',
}[mach]
except KeyError:
return mach
@@ -75,9 +75,7 @@
return "rpython.jit.backend.x86.runner", "CPU_X86_64"
elif backend_name == 'cli':
return "rpython.jit.backend.cli.runner", "CliCPU"
- elif backend_name.startswith('armv6'):
- return "rpython.jit.backend.arm.runner", "CPU_ARMv6"
- elif backend_name.startswith('armv7'):
+ elif backend_name.startswith('arm'):
return "rpython.jit.backend.arm.runner", "CPU_ARM"
else:
raise ProcessorAutodetectError, (
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit