mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-12 17:24:09 +00:00
ARM: Add CPU detection.
This commit is contained in:
parent
185554b682
commit
ae3179926a
@ -520,6 +520,10 @@ JIT_PARAMDEF(JIT_PARAMINIT)
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if LJ_TARGET_ARM && LJ_TARGET_LINUX
|
||||||
|
#include <sys/utsname.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Arch-dependent CPU detection. */
|
/* Arch-dependent CPU detection. */
|
||||||
static uint32_t jit_cpudetect(lua_State *L)
|
static uint32_t jit_cpudetect(lua_State *L)
|
||||||
{
|
{
|
||||||
@ -563,7 +567,27 @@ static uint32_t jit_cpudetect(lua_State *L)
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#elif LJ_TARGET_ARM
|
#elif LJ_TARGET_ARM
|
||||||
/* NYI */
|
/* Compile-time ARM CPU detection. */
|
||||||
|
#if __ARM_ARCH_7__ || __ARM_ARCH_7A__ || __ARM_ARCH_7R__
|
||||||
|
flags |= JIT_F_ARMV6|JIT_F_ARMV6T2|JIT_F_ARMV7;
|
||||||
|
#elif __ARM_ARCH_6T2__
|
||||||
|
flags |= JIT_F_ARMV6|JIT_F_ARMV6T2;
|
||||||
|
#elif __ARM_ARCH_6__ || __ARM_ARCH_6J__ || __ARM_ARCH_6Z__ || __ARM_ARCH_6ZK__
|
||||||
|
flags |= JIT_F_ARMV6;
|
||||||
|
#endif
|
||||||
|
/* Runtime ARM CPU detection. */
|
||||||
|
#if LJ_TARGET_LINUX
|
||||||
|
if (!(flags & JIT_F_ARMV7)) {
|
||||||
|
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;
|
||||||
|
else if (ut.machine[4] == '6')
|
||||||
|
flags |= JIT_F_ARMV6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#elif LJ_TARGET_PPC
|
#elif LJ_TARGET_PPC
|
||||||
/* Nothing to do. */
|
/* Nothing to do. */
|
||||||
#else
|
#else
|
||||||
|
@ -136,7 +136,7 @@ static LJ_AINLINE uint32_t lj_bswap(uint32_t x)
|
|||||||
{
|
{
|
||||||
uint32_t r;
|
uint32_t r;
|
||||||
#if __ARM_ARCH_6__ || __ARM_ARCH_6J__ || __ARM_ARCH_6T2__ || __ARM_ARCH_6Z__ ||\
|
#if __ARM_ARCH_6__ || __ARM_ARCH_6J__ || __ARM_ARCH_6T2__ || __ARM_ARCH_6Z__ ||\
|
||||||
__ARM_ARCH_7__ || __ARM_ARCH_7A__ || __ARM_ARCH_7R__
|
__ARM_ARCH_6ZK__ || __ARM_ARCH_7__ || __ARM_ARCH_7A__ || __ARM_ARCH_7R__
|
||||||
__asm__("rev %0, %1" : "=r" (r) : "r" (x));
|
__asm__("rev %0, %1" : "=r" (r) : "r" (x));
|
||||||
return r;
|
return r;
|
||||||
#else
|
#else
|
||||||
|
@ -26,6 +26,14 @@
|
|||||||
/* Names for the CPU-specific flags. Must match the order above. */
|
/* Names for the CPU-specific flags. Must match the order above. */
|
||||||
#define JIT_F_CPU_FIRST JIT_F_CMOV
|
#define JIT_F_CPU_FIRST JIT_F_CMOV
|
||||||
#define JIT_F_CPUSTRING "\4CMOV\4SSE2\4SSE3\6SSE4.1\2P4\3AMD\2K8\4ATOM"
|
#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_ARMV7 0x00000040
|
||||||
|
|
||||||
|
/* 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"
|
||||||
#else
|
#else
|
||||||
#define JIT_F_CPU_FIRST 0
|
#define JIT_F_CPU_FIRST 0
|
||||||
#define JIT_F_CPUSTRING ""
|
#define JIT_F_CPUSTRING ""
|
||||||
|
Loading…
Reference in New Issue
Block a user