Index: src/mips/assembler-mips.h |
diff --git a/src/mips/assembler-mips.h b/src/mips/assembler-mips.h |
index 3a0ea4020375505c6435831d248451cbd3b1d9ee..2468c3c340c7b8a9ec5dfe331b0b3ae0d2f6a941 100644 |
--- a/src/mips/assembler-mips.h |
+++ b/src/mips/assembler-mips.h |
@@ -411,27 +411,47 @@ class CpuFeatures : public AllStatic { |
// Check whether a feature is supported by the target CPU. |
static bool IsSupported(CpuFeature f) { |
ASSERT(initialized_); |
- return (supported_ & (1u << f)) != 0; |
+ return Check(f, supported_); |
} |
static bool IsFoundByRuntimeProbingOnly(CpuFeature f) { |
ASSERT(initialized_); |
- return (found_by_runtime_probing_only_ & |
- (static_cast<uint64_t>(1) << f)) != 0; |
+ return Check(f, found_by_runtime_probing_only_); |
} |
static bool IsSafeForSnapshot(CpuFeature f) { |
- return (IsSupported(f) && |
+ return Check(f, cross_compile_) || |
+ (IsSupported(f) && |
(!Serializer::enabled() || !IsFoundByRuntimeProbingOnly(f))); |
} |
+ static bool VerifyCrossCompiling() { |
+ return cross_compile_ == 0; |
+ } |
+ |
+ static bool VerifyCrossCompiling(CpuFeature f) { |
+ unsigned mask = flag2set(f); |
+ return cross_compile_ == 0 || |
+ (cross_compile_ & mask) == mask; |
+ } |
+ |
private: |
+ static bool Check(CpuFeature f, unsigned set) { |
+ return (set & flag2set(f)) != 0; |
+ } |
+ |
+ static unsigned flag2set(CpuFeature f) { |
+ return 1u << f; |
+ } |
+ |
#ifdef DEBUG |
static bool initialized_; |
#endif |
static unsigned supported_; |
static unsigned found_by_runtime_probing_only_; |
+ static unsigned cross_compile_; |
+ |
friend class ExternalReference; |
friend class PlatformFeatureScope; |
DISALLOW_COPY_AND_ASSIGN(CpuFeatures); |