#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
#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