Index: src/cpu.cc |
diff --git a/src/cpu.cc b/src/cpu.cc |
index 2bf51a7f6c09498186e602fa1e8c3276af31883f..8a9aa970057f8271f0a079d01f282425c29e05be 100644 |
--- a/src/cpu.cc |
+++ b/src/cpu.cc |
@@ -33,6 +33,9 @@ |
#if V8_OS_POSIX |
#include <unistd.h> // sysconf() |
#endif |
+#if V8_OS_QNX |
+#include <sys/syspage.h> // cpuinfo |
+#endif |
#include <algorithm> |
#include <cctype> |
@@ -78,6 +81,8 @@ static V8_INLINE void __cpuid(int cpu_info[4], int info_type) { |
#elif V8_HOST_ARCH_ARM || V8_HOST_ARCH_MIPS |
+#if V8_OS_LINUX |
+ |
#if V8_HOST_ARCH_ARM |
// See <uapi/asm/hwcap.h> kernel header. |
@@ -249,6 +254,8 @@ static bool HasListItem(const char* list, const char* item) { |
return false; |
} |
+#endif // V8_OS_LINUX |
+ |
#endif // V8_HOST_ARCH_IA32 || V8_HOST_ARCH_X64 |
CPU::CPU() : stepping_(0), |
@@ -328,7 +335,11 @@ CPU::CPU() : stepping_(0), |
has_sahf_ = (cpu_info[2] & 0x00000001) != 0; |
#endif |
} |
+ |
#elif V8_HOST_ARCH_ARM |
+ |
+#if V8_OS_LINUX |
+ |
CPUInfo cpu_info; |
// Extract implementor from the "CPU implementer" field. |
@@ -438,7 +449,34 @@ CPU::CPU() : stepping_(0), |
// We don't support any FPUs other than VFP. |
has_fpu_ = has_vfp_; |
+ |
+#elif V8_OS_QNX |
+ |
+ uint32_t cpu_flags = SYSPAGE_ENTRY(cpuinfo)->flags; |
+ if (cpu_flags & ARM_CPU_FLAG_V7) { |
+ architecture_ = 7; |
+ has_thumbee_ = true; |
+ } else if (cpu_flags & ARM_CPU_FLAG_V6) { |
+ architecture_ = 6; |
+ // QNX doesn't say if ThumbEE is available. |
+ // Assume false for the architectures older than ARMv7. |
+ } |
+ ASSERT(architecture_ >= 6); |
+ has_fpu_ = (cpu_flags & CPU_FLAG_FPU) != 0; |
+ has_vfp_ = has_fpu_; |
+ if (cpu_flags & ARM_CPU_FLAG_NEON) { |
+ has_neon_ = true; |
+ has_vfp3_ = has_vfp_; |
+#ifdef ARM_CPU_FLAG_VFP_D32 |
+ has_vfp3_d32_ = (cpu_flags & ARM_CPU_FLAG_VFP_D32) != 0; |
+#endif |
+ } |
+ has_idiva_ = (cpu_flags & ARM_CPU_FLAG_IDIV) != 0; |
+ |
+#endif // V8_OS_LINUX |
+ |
#elif V8_HOST_ARCH_MIPS |
+ |
// Simple detection of FPU at runtime for Linux. |
// It is based on /proc/cpuinfo, which reveals hardware configuration |
// to user-space applications. According to MIPS (early 2010), no similar |
@@ -448,6 +486,7 @@ CPU::CPU() : stepping_(0), |
char* cpu_model = cpu_info.ExtractField("cpu model"); |
has_fpu_ = HasListItem(cpu_model, "FPU"); |
delete[] cpu_model; |
+ |
#endif |
} |