MIPS: Serializer enable/disable flags need thread safety.
Port r20855 (ac70e129) BUG= R=plind44@gmail.com Review URL: https://codereview.chromium.org/239173004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20859 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
1572115483
commit
c8c951204c
@ -46,6 +46,7 @@ namespace internal {
|
||||
#ifdef DEBUG
|
||||
bool CpuFeatures::initialized_ = false;
|
||||
#endif
|
||||
bool CpuFeatures::hint_creating_snapshot_ = false;
|
||||
unsigned CpuFeatures::supported_ = 0;
|
||||
unsigned CpuFeatures::found_by_runtime_probing_only_ = 0;
|
||||
unsigned CpuFeatures::cross_compile_ = 0;
|
||||
@ -102,7 +103,23 @@ const char* DoubleRegister::AllocationIndexToString(int index) {
|
||||
}
|
||||
|
||||
|
||||
void CpuFeatures::SetHintCreatingSnapshot() {
|
||||
hint_creating_snapshot_ = true;
|
||||
}
|
||||
|
||||
|
||||
void CpuFeatures::ProbeWithoutIsolate() {
|
||||
Probe(hint_creating_snapshot_);
|
||||
}
|
||||
|
||||
|
||||
void CpuFeatures::Probe() {
|
||||
// The Serializer can only be queried after isolate initialization.
|
||||
Probe(Serializer::enabled());
|
||||
}
|
||||
|
||||
|
||||
void CpuFeatures::Probe(bool serializer_enabled) {
|
||||
unsigned standard_features = (OS::CpuFeaturesImpliedByPlatform() |
|
||||
CpuFeaturesImpliedByCompiler());
|
||||
ASSERT(supported_ == 0 ||
|
||||
@ -116,7 +133,7 @@ void CpuFeatures::Probe() {
|
||||
// snapshot.
|
||||
supported_ |= standard_features;
|
||||
|
||||
if (Serializer::enabled()) {
|
||||
if (serializer_enabled) {
|
||||
// No probing for features if we might serialize (generate snapshot).
|
||||
return;
|
||||
}
|
||||
@ -2080,11 +2097,6 @@ void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) {
|
||||
if (!RelocInfo::IsNone(rinfo.rmode())) {
|
||||
// Don't record external references unless the heap will be serialized.
|
||||
if (rmode == RelocInfo::EXTERNAL_REFERENCE) {
|
||||
#ifdef DEBUG
|
||||
if (!Serializer::enabled()) {
|
||||
Serializer::TooLateToEnableNow();
|
||||
}
|
||||
#endif
|
||||
if (!Serializer::enabled() && !emit_debug_code()) {
|
||||
return;
|
||||
}
|
||||
|
@ -427,6 +427,11 @@ class CpuFeatures : public AllStatic {
|
||||
// is enabled (snapshots must be portable).
|
||||
static void Probe();
|
||||
|
||||
// A special case for printing target and features, which we want to do
|
||||
// before initializing the isolate
|
||||
static void SetHintCreatingSnapshot();
|
||||
static void ProbeWithoutIsolate();
|
||||
|
||||
// Check whether a feature is supported by the target CPU.
|
||||
static bool IsSupported(CpuFeature f) {
|
||||
ASSERT(initialized_);
|
||||
@ -455,6 +460,9 @@ class CpuFeatures : public AllStatic {
|
||||
}
|
||||
|
||||
private:
|
||||
static void Probe(bool serializer_enabled);
|
||||
static bool hint_creating_snapshot_;
|
||||
|
||||
static bool Check(CpuFeature f, unsigned set) {
|
||||
return (set & flag2set(f)) != 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user