From b23a7830d23b80bb3f78ec9a9416d3b8119733e7 Mon Sep 17 00:00:00 2001
From: Mike Pall <mike>
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(-)

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