Update V8 to version 4.1.0.21
This is a cherry-pick of all commits up to and including the
4.1.0.21 cherry-pick in Chromium.
Original commit message:
Version 4.1.0.21 (cherry-pick)
Merged 206e9136bde0f2b5ae8cb77afbb1e7833e5bd412
Unlink pages from the space page list after evacuation.
BUG=430201
LOG=N
R=jkummerow@chromium.org
Review URL: https://codereview.chromium.org/953813002
Cr-Commit-Position: refs/branch-heads/4.1@{#22}
Cr-Branched-From: 2e08d2a7aa9d65d269d8c57aba82eb38a8cb0a18-refs/heads/candidates@{#25353}
---
FPIIM-449
Change-Id: I8c23c7bbb70772b4858fe8a47b64fa97ee0d1f8c
diff --git a/src/compiler/linkage.cc b/src/compiler/linkage.cc
index 465a667..fc6b19e 100644
--- a/src/compiler/linkage.cc
+++ b/src/compiler/linkage.cc
@@ -2,10 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "src/compiler/linkage.h"
-
#include "src/code-stubs.h"
#include "src/compiler.h"
+#include "src/compiler/linkage.h"
#include "src/compiler/node.h"
#include "src/compiler/pipeline.h"
#include "src/scopes.h"
@@ -15,7 +14,7 @@
namespace compiler {
-OStream& operator<<(OStream& os, const CallDescriptor::Kind& k) {
+std::ostream& operator<<(std::ostream& os, const CallDescriptor::Kind& k) {
switch (k) {
case CallDescriptor::kCallCodeObject:
os << "Code";
@@ -31,7 +30,7 @@
}
-OStream& operator<<(OStream& os, const CallDescriptor& d) {
+std::ostream& operator<<(std::ostream& os, const CallDescriptor& d) {
// TODO(svenpanne) Output properties etc. and be less cryptic.
return os << d.kind() << ":" << d.debug_name() << ":r" << d.ReturnCount()
<< "j" << d.JSParameterCount() << "i" << d.InputCount() << "f"
@@ -39,28 +38,33 @@
}
-Linkage::Linkage(CompilationInfo* info) : info_(info) {
+CallDescriptor* Linkage::ComputeIncoming(Zone* zone, CompilationInfo* info) {
if (info->function() != NULL) {
// If we already have the function literal, use the number of parameters
// plus the receiver.
- incoming_ = GetJSCallDescriptor(1 + info->function()->parameter_count());
- } else if (!info->closure().is_null()) {
+ return GetJSCallDescriptor(1 + info->function()->parameter_count(), zone,
+ CallDescriptor::kNoFlags);
+ }
+ if (!info->closure().is_null()) {
// If we are compiling a JS function, use a JS call descriptor,
// plus the receiver.
SharedFunctionInfo* shared = info->closure()->shared();
- incoming_ = GetJSCallDescriptor(1 + shared->formal_parameter_count());
- } else if (info->code_stub() != NULL) {
+ return GetJSCallDescriptor(1 + shared->formal_parameter_count(), zone,
+ CallDescriptor::kNoFlags);
+ }
+ if (info->code_stub() != NULL) {
// Use the code stub interface descriptor.
CallInterfaceDescriptor descriptor =
info->code_stub()->GetCallInterfaceDescriptor();
- incoming_ = GetStubCallDescriptor(descriptor);
- } else {
- incoming_ = NULL; // TODO(titzer): ?
+ return GetStubCallDescriptor(descriptor, 0, CallDescriptor::kNoFlags,
+ Operator::kNoProperties, zone);
}
+ return NULL; // TODO(titzer): ?
}
-FrameOffset Linkage::GetFrameOffset(int spill_slot, Frame* frame, int extra) {
+FrameOffset Linkage::GetFrameOffset(int spill_slot, Frame* frame,
+ int extra) const {
if (frame->GetSpillSlotCount() > 0 || incoming_->IsJSFunctionCall() ||
incoming_->kind() == CallDescriptor::kCallAddress) {
int offset;
@@ -87,24 +91,24 @@
}
-CallDescriptor* Linkage::GetJSCallDescriptor(int parameter_count) {
- return GetJSCallDescriptor(parameter_count, this->info_->zone());
+CallDescriptor* Linkage::GetJSCallDescriptor(
+ int parameter_count, CallDescriptor::Flags flags) const {
+ return GetJSCallDescriptor(parameter_count, zone_, flags);
}
CallDescriptor* Linkage::GetRuntimeCallDescriptor(
Runtime::FunctionId function, int parameter_count,
- Operator::Properties properties) {
- return GetRuntimeCallDescriptor(function, parameter_count, properties,
- this->info_->zone());
+ Operator::Properties properties) const {
+ return GetRuntimeCallDescriptor(function, parameter_count, properties, zone_);
}
CallDescriptor* Linkage::GetStubCallDescriptor(
- CallInterfaceDescriptor descriptor, int stack_parameter_count,
- CallDescriptor::Flags flags) {
+ const CallInterfaceDescriptor& descriptor, int stack_parameter_count,
+ CallDescriptor::Flags flags, Operator::Properties properties) const {
return GetStubCallDescriptor(descriptor, stack_parameter_count, flags,
- this->info_->zone());
+ properties, zone_);
}
@@ -116,16 +120,98 @@
// TODO(jarin) At the moment, we only add frame state for
// few chosen runtime functions.
switch (function) {
- case Runtime::kDebugBreak:
- case Runtime::kDebugGetLoadedScripts:
- case Runtime::kDeoptimizeFunction:
- case Runtime::kInlineCallFunction:
- case Runtime::kPrepareStep:
- case Runtime::kSetScriptBreakPoint:
- case Runtime::kStackGuard:
+ case Runtime::kApply:
+ case Runtime::kArrayBufferNeuter:
+ case Runtime::kArrayConcat:
+ case Runtime::kBasicJSONStringify:
case Runtime::kCheckExecutionState:
- case Runtime::kDebugEvaluate:
case Runtime::kCollectStackTrace:
+ case Runtime::kCompileLazy:
+ case Runtime::kCompileOptimized:
+ case Runtime::kCompileString:
+ case Runtime::kCreateObjectLiteral:
+ case Runtime::kDebugBreak:
+ case Runtime::kDataViewSetInt8:
+ case Runtime::kDataViewSetUint8:
+ case Runtime::kDataViewSetInt16:
+ case Runtime::kDataViewSetUint16:
+ case Runtime::kDataViewSetInt32:
+ case Runtime::kDataViewSetUint32:
+ case Runtime::kDataViewSetFloat32:
+ case Runtime::kDataViewSetFloat64:
+ case Runtime::kDataViewGetInt8:
+ case Runtime::kDataViewGetUint8:
+ case Runtime::kDataViewGetInt16:
+ case Runtime::kDataViewGetUint16:
+ case Runtime::kDataViewGetInt32:
+ case Runtime::kDataViewGetUint32:
+ case Runtime::kDataViewGetFloat32:
+ case Runtime::kDataViewGetFloat64:
+ case Runtime::kDebugEvaluate:
+ case Runtime::kDebugEvaluateGlobal:
+ case Runtime::kDebugGetLoadedScripts:
+ case Runtime::kDebugGetPropertyDetails:
+ case Runtime::kDebugPromiseEvent:
+ case Runtime::kDefineAccessorPropertyUnchecked:
+ case Runtime::kDefineDataPropertyUnchecked:
+ case Runtime::kDeleteProperty:
+ case Runtime::kDeoptimizeFunction:
+ case Runtime::kFunctionBindArguments:
+ case Runtime::kGetDefaultReceiver:
+ case Runtime::kGetFrameCount:
+ case Runtime::kGetOwnProperty:
+ case Runtime::kGetOwnPropertyNames:
+ case Runtime::kGetPropertyNamesFast:
+ case Runtime::kGetPrototype:
+ case Runtime::kInlineArguments:
+ case Runtime::kInlineCallFunction:
+ case Runtime::kInlineDateField:
+ case Runtime::kInlineRegExpExec:
+ case Runtime::kInternalSetPrototype:
+ case Runtime::kInterrupt:
+ case Runtime::kIsPropertyEnumerable:
+ case Runtime::kIsSloppyModeFunction:
+ case Runtime::kLiveEditGatherCompileInfo:
+ case Runtime::kLoadLookupSlot:
+ case Runtime::kLoadLookupSlotNoReferenceError:
+ case Runtime::kMaterializeRegExpLiteral:
+ case Runtime::kNewObject:
+ case Runtime::kNewObjectFromBound:
+ case Runtime::kNewObjectWithAllocationSite:
+ case Runtime::kObjectFreeze:
+ case Runtime::kOwnKeys:
+ case Runtime::kParseJson:
+ case Runtime::kPrepareStep:
+ case Runtime::kPreventExtensions:
+ case Runtime::kPromiseRejectEvent:
+ case Runtime::kPromiseRevokeReject:
+ case Runtime::kRegExpInitializeAndCompile:
+ case Runtime::kRegExpExecMultiple:
+ case Runtime::kResolvePossiblyDirectEval:
+ case Runtime::kRunMicrotasks:
+ case Runtime::kSetPrototype:
+ case Runtime::kSetScriptBreakPoint:
+ case Runtime::kSparseJoinWithSeparator:
+ case Runtime::kStackGuard:
+ case Runtime::kStoreKeyedToSuper_Sloppy:
+ case Runtime::kStoreKeyedToSuper_Strict:
+ case Runtime::kStoreToSuper_Sloppy:
+ case Runtime::kStoreToSuper_Strict:
+ case Runtime::kStoreLookupSlot:
+ case Runtime::kStringBuilderConcat:
+ case Runtime::kStringBuilderJoin:
+ case Runtime::kStringMatch:
+ case Runtime::kStringReplaceGlobalRegExpWithString:
+ case Runtime::kThrowNonMethodError:
+ case Runtime::kThrowNotDateError:
+ case Runtime::kThrowReferenceError:
+ case Runtime::kThrowUnsupportedSuperError:
+ case Runtime::kThrow:
+ case Runtime::kTypedArraySetFastCases:
+ case Runtime::kTypedArrayInitializeFromArrayLike:
+#ifdef V8_I18N_SUPPORT
+ case Runtime::kGetImplFromInitializedIntlObject:
+#endif
return true;
default:
return false;
@@ -137,7 +223,8 @@
// Provide unimplemented methods on unsupported architectures, to at least link.
//==============================================================================
#if !V8_TURBOFAN_BACKEND
-CallDescriptor* Linkage::GetJSCallDescriptor(int parameter_count, Zone* zone) {
+CallDescriptor* Linkage::GetJSCallDescriptor(int parameter_count, Zone* zone,
+ CallDescriptor::Flags flags) {
UNIMPLEMENTED();
return NULL;
}
@@ -152,8 +239,9 @@
CallDescriptor* Linkage::GetStubCallDescriptor(
- CallInterfaceDescriptor descriptor, int stack_parameter_count,
- CallDescriptor::Flags flags, Zone* zone) {
+ const CallInterfaceDescriptor& descriptor, int stack_parameter_count,
+ CallDescriptor::Flags flags, Operator::Properties properties,
+ Zone* zone) {
UNIMPLEMENTED();
return NULL;
}