Index: src/ia32/assembler-ia32.cc |
diff --git a/src/ia32/assembler-ia32.cc b/src/ia32/assembler-ia32.cc |
index 984de00e485269766f80afd677b06060a46a1602..fea67e3c7b24280ede21a9df3a7d6aec72e861cc 100644 |
--- a/src/ia32/assembler-ia32.cc |
+++ b/src/ia32/assembler-ia32.cc |
@@ -48,53 +48,26 @@ namespace internal { |
// ----------------------------------------------------------------------------- |
// Implementation of CpuFeatures |
-#ifdef DEBUG |
-bool CpuFeatures::initialized_ = false; |
-#endif |
-uint64_t CpuFeatures::supported_ = 0; |
-uint64_t CpuFeatures::found_by_runtime_probing_only_ = 0; |
-uint64_t CpuFeatures::cross_compile_ = 0; |
- |
- |
-ExternalReference ExternalReference::cpu_features() { |
- ASSERT(CpuFeatures::initialized_); |
- return ExternalReference(&CpuFeatures::supported_); |
-} |
- |
- |
-void CpuFeatures::Probe(bool serializer_enabled) { |
- ASSERT(!initialized_); |
- ASSERT(supported_ == 0); |
-#ifdef DEBUG |
- initialized_ = true; |
-#endif |
- if (serializer_enabled) { |
- supported_ |= OS::CpuFeaturesImpliedByPlatform(); |
- return; // No features if we might serialize. |
- } |
- |
- uint64_t probed_features = 0; |
+void CpuFeatures::ProbeImpl(bool cross_compile) { |
CPU cpu; |
- if (cpu.has_sse41()) { |
- probed_features |= static_cast<uint64_t>(1) << SSE4_1; |
- } |
- if (cpu.has_sse3()) { |
- probed_features |= static_cast<uint64_t>(1) << SSE3; |
- } |
- |
CHECK(cpu.has_sse2()); // SSE2 support is mandatory. |
CHECK(cpu.has_cmov()); // CMOV support is mandatory. |
+ CHECK(cpu.has_sahf()); // SAHF must be available in compat/legacy mode. |
+ supported_ |= 1u << SAHF; |
+ supported_ |= OS::CpuFeaturesImpliedByPlatform(); |
- // SAHF must be available in compat/legacy mode. |
- ASSERT(cpu.has_sahf()); |
- probed_features |= static_cast<uint64_t>(1) << SAHF; |
+ // Only use statically determined features for cross compile (snapshot). |
+ if (cross_compile) return; |
- uint64_t platform_features = OS::CpuFeaturesImpliedByPlatform(); |
- supported_ = probed_features | platform_features; |
- found_by_runtime_probing_only_ = probed_features & ~platform_features; |
+ if (cpu.has_sse41() && FLAG_enable_sse4_1) supported_ |= 1u << SSE4_1; |
+ if (cpu.has_sse3() && FLAG_enable_sse3) supported_ |= 1u << SSE3; |
} |
+void CpuFeatures::PrintTarget() { } |
+void CpuFeatures::PrintFeatures() { } |
+ |
+ |
// ----------------------------------------------------------------------------- |
// Implementation of Displacement |
@@ -2613,10 +2586,9 @@ void Assembler::dd(uint32_t data) { |
void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) { |
ASSERT(!RelocInfo::IsNone(rmode)); |
// Don't record external references unless the heap will be serialized. |
- if (rmode == RelocInfo::EXTERNAL_REFERENCE) { |
- if (!Serializer::enabled(isolate()) && !emit_debug_code()) { |
- return; |
- } |
+ if (rmode == RelocInfo::EXTERNAL_REFERENCE && |
+ !serializer_enabled() && !emit_debug_code()) { |
+ return; |
} |
RelocInfo rinfo(pc_, rmode, data, NULL); |
reloc_info_writer.Write(&rinfo); |