Index: src/mips/assembler-mips.cc |
diff --git a/src/mips/assembler-mips.cc b/src/mips/assembler-mips.cc |
index 28ac5577605146d0d3bf127523987b81dbac0c3a..f30f38bb7581877fe97d053ead59e6b517094f3a 100644 |
--- a/src/mips/assembler-mips.cc |
+++ b/src/mips/assembler-mips.cc |
@@ -49,11 +49,47 @@ bool CpuFeatures::initialized_ = false; |
unsigned CpuFeatures::supported_ = 0; |
unsigned CpuFeatures::found_by_runtime_probing_ = 0; |
+ |
+// Get the CPU features enabled by the build. For cross compilation the |
+// preprocessor symbols CAN_USE_FPU_INSTRUCTIONS |
+// can be defined to enable FPU instructions when building the |
+// snapshot. |
+static uint64_t CpuFeaturesImpliedByCompiler() { |
+ uint64_t answer = 0; |
+#ifdef CAN_USE_FPU_INSTRUCTIONS |
+ answer |= 1u << FPU; |
+#endif // def CAN_USE_FPU_INSTRUCTIONS |
+ |
+#ifdef __mips__ |
+ // If the compiler is allowed to use FPU then we can use FPU too in our code |
+ // generation even when generating snapshots. This won't work for cross |
+ // compilation. |
+#if(defined(__mips_hard_float) && __mips_hard_float != 0) |
+ answer |= 1u << FPU; |
+#endif // defined(__mips_hard_float) && __mips_hard_float != 0 |
+#endif // def __mips__ |
+ |
+ return answer; |
+} |
+ |
+ |
void CpuFeatures::Probe() { |
ASSERT(!initialized_); |
#ifdef DEBUG |
initialized_ = true; |
#endif |
+ |
+ // Get the features implied by the OS and the compiler settings. This is the |
+ // minimal set of features which is also allowed for generated code in the |
+ // snapshot. |
+ supported_ |= OS::CpuFeaturesImpliedByPlatform(); |
+ supported_ |= CpuFeaturesImpliedByCompiler(); |
+ |
+ if (Serializer::enabled()) { |
+ // No probing for features if we might serialize (generate snapshot). |
+ return; |
+ } |
+ |
// If the compiler is allowed to use fpu then we can use fpu too in our |
// code generation. |
#if !defined(__mips__) |
@@ -62,11 +98,7 @@ void CpuFeatures::Probe() { |
supported_ |= 1u << FPU; |
} |
#else |
- if (Serializer::enabled()) { |
- supported_ |= OS::CpuFeaturesImpliedByPlatform(); |
- return; // No features if we might serialize. |
- } |
- |
+ // Probe for additional features not already known to be available. |
if (OS::MipsCpuHasFeature(FPU)) { |
// This implementation also sets the FPU flags if |
// runtime detection of FPU returns true. |