From b23a7830d23b80bb3f78ec9a9416d3b8119733e7 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sun, 8 Jul 2012 22:20:11 +0200 Subject: Clean up ARM capability flags. Only set highest arch version. --- src/lib_jit.c | 20 ++++++++------------ src/lj_jit.h | 14 ++++++++++---- 2 files changed, 18 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/lib_jit.c b/src/lib_jit.c index 3687ad76..ba07ac29 100644 --- a/src/lib_jit.c +++ b/src/lib_jit.c @@ -590,27 +590,23 @@ static uint32_t jit_cpudetect(lua_State *L) #endif #elif LJ_TARGET_ARM #if LJ_HASJIT - /* Compile-time ARM CPU detection. */ -#if LJ_ARCH_VERSION >= 70 - flags |= JIT_F_ARMV6|JIT_F_ARMV6T2|JIT_F_ARMV7; -#elif LJ_ARCH_VERSION >= 61 - flags |= JIT_F_ARMV6|JIT_F_ARMV6T2; -#elif LJ_ARCH_VERSION >= 60 - flags |= JIT_F_ARMV6; -#endif - /* Runtime ARM CPU detection. */ + int ver = LJ_ARCH_VERSION; /* Compile-time ARM CPU detection. */ #if LJ_TARGET_LINUX - if (!(flags & JIT_F_ARMV7)) { + if (ver < 70) { /* Runtime ARM CPU detection. */ struct utsname ut; uname(&ut); if (strncmp(ut.machine, "armv", 4) == 0) { if (ut.machine[4] >= '7') - flags |= JIT_F_ARMV6|JIT_F_ARMV6T2|JIT_F_ARMV7; + ver = 70; else if (ut.machine[4] == '6') - flags |= JIT_F_ARMV6; + ver = 60; } } #endif + flags |= ver >= 70 ? JIT_F_ARMV7 : + ver >= 61 ? JIT_F_ARMV6T2_ : + ver >= 60 ? JIT_F_ARMV6_ : 0; + flags |= LJ_ARCH_HASFPU == 0 ? 0 : ver >= 70 ? JIT_F_VFPV3 : JIT_F_VFPV2; #endif #elif LJ_TARGET_PPC #if LJ_HASJIT diff --git a/src/lj_jit.h b/src/lj_jit.h index 517b3264..1ec54fe7 100644 --- a/src/lj_jit.h +++ b/src/lj_jit.h @@ -27,13 +27,19 @@ #define JIT_F_CPU_FIRST JIT_F_CMOV #define JIT_F_CPUSTRING "\4CMOV\4SSE2\4SSE3\6SSE4.1\2P4\3AMD\2K8\4ATOM" #elif LJ_TARGET_ARM -#define JIT_F_ARMV6 0x00000010 -#define JIT_F_ARMV6T2 0x00000020 +#define JIT_F_ARMV6_ 0x00000010 +#define JIT_F_ARMV6T2_ 0x00000020 #define JIT_F_ARMV7 0x00000040 +#define JIT_F_VFPV2 0x00000080 +#define JIT_F_VFPV3 0x00000100 + +#define JIT_F_ARMV6 (JIT_F_ARMV6_|JIT_F_ARMV6T2_|JIT_F_ARMV7) +#define JIT_F_ARMV6T2 (JIT_F_ARMV6T2_|JIT_F_ARMV7) +#define JIT_F_VFP (JIT_F_VFPV2|JIT_F_VFPV3) /* Names for the CPU-specific flags. Must match the order above. */ -#define JIT_F_CPU_FIRST JIT_F_ARMV6 -#define JIT_F_CPUSTRING "\5ARMv6\7ARMv6T2\5ARMv7" +#define JIT_F_CPU_FIRST JIT_F_ARMV6_ +#define JIT_F_CPUSTRING "\5ARMv6\7ARMv6T2\5ARMv7\5VFPv2\5VFPv3" #elif LJ_TARGET_PPC #define JIT_F_SQRT 0x00000010 #define JIT_F_ROUND 0x00000020 -- cgit v1.2.3-55-g6feb