| Index: src/code-stubs-hydrogen.cc
|
| diff --git a/src/code-stubs-hydrogen.cc b/src/code-stubs-hydrogen.cc
|
| index f60dea2e679534fe496fc1972734786e18b5338a..96ee32e614caf2d041cdf8338c3f5ab1c616b638 100644
|
| --- a/src/code-stubs-hydrogen.cc
|
| +++ b/src/code-stubs-hydrogen.cc
|
| @@ -1120,86 +1120,6 @@ Handle<Code> ElementsTransitionAndStoreStub::GenerateCode() {
|
| }
|
|
|
|
|
| -template <>
|
| -HValue* CodeStubGraphBuilder<ArrayShiftStub>::BuildCodeStub() {
|
| - HValue* receiver = GetParameter(ArrayShiftStub::kReceiver);
|
| - ElementsKind kind = casted_stub()->kind();
|
| -
|
| - // We may use double registers for copying.
|
| - if (IsFastDoubleElementsKind(kind)) info()->MarkAsSavesCallerDoubles();
|
| -
|
| - HValue* length = Add<HLoadNamedField>(
|
| - receiver, static_cast<HValue*>(NULL),
|
| - HObjectAccess::ForArrayLength(kind));
|
| -
|
| - IfBuilder if_lengthiszero(this);
|
| - HValue* lengthiszero = if_lengthiszero.If<HCompareNumericAndBranch>(
|
| - length, graph()->GetConstant0(), Token::EQ);
|
| - if_lengthiszero.Then();
|
| - {
|
| - Push(graph()->GetConstantUndefined());
|
| - }
|
| - if_lengthiszero.Else();
|
| - {
|
| - // Check if array length is below threshold.
|
| - IfBuilder if_inline(this);
|
| - if_inline.If<HCompareNumericAndBranch>(
|
| - length, Add<HConstant>(ArrayShiftStub::kInlineThreshold), Token::LTE);
|
| - if_inline.Then();
|
| - if_inline.ElseDeopt("Array length exceeds threshold");
|
| - if_inline.End();
|
| -
|
| - // We cannot handle copy-on-write backing stores here.
|
| - HValue* elements = AddLoadElements(receiver);
|
| - if (IsFastSmiOrObjectElementsKind(kind)) {
|
| - Add<HCheckMaps>(elements, isolate()->factory()->fixed_array_map());
|
| - }
|
| -
|
| - // Remember the result.
|
| - Push(AddElementAccess(elements, graph()->GetConstant0(), NULL,
|
| - lengthiszero, kind, LOAD));
|
| -
|
| - // Compute the new length.
|
| - HValue* new_length = AddUncasted<HSub>(length, graph()->GetConstant1());
|
| - new_length->ClearFlag(HValue::kCanOverflow);
|
| -
|
| - // Copy the remaining elements.
|
| - LoopBuilder loop(this, context(), LoopBuilder::kPostIncrement);
|
| - {
|
| - HValue* new_key = loop.BeginBody(
|
| - graph()->GetConstant0(), new_length, Token::LT);
|
| - HValue* key = AddUncasted<HAdd>(new_key, graph()->GetConstant1());
|
| - key->ClearFlag(HValue::kCanOverflow);
|
| - HValue* element = AddUncasted<HLoadKeyed>(
|
| - elements, key, lengthiszero, kind, ALLOW_RETURN_HOLE);
|
| - HStoreKeyed* store = Add<HStoreKeyed>(elements, new_key, element, kind);
|
| - store->SetFlag(HValue::kAllowUndefinedAsNaN);
|
| - }
|
| - loop.EndBody();
|
| -
|
| - // Put a hole at the end.
|
| - HValue* hole = IsFastSmiOrObjectElementsKind(kind)
|
| - ? Add<HConstant>(isolate()->factory()->the_hole_value())
|
| - : Add<HConstant>(FixedDoubleArray::hole_nan_as_double());
|
| - if (IsFastSmiOrObjectElementsKind(kind)) kind = FAST_HOLEY_ELEMENTS;
|
| - Add<HStoreKeyed>(elements, new_length, hole, kind, INITIALIZING_STORE);
|
| -
|
| - // Remember new length.
|
| - Add<HStoreNamedField>(
|
| - receiver, HObjectAccess::ForArrayLength(kind),
|
| - new_length, STORE_TO_INITIALIZED_ENTRY);
|
| - }
|
| - if_lengthiszero.End();
|
| -
|
| - return Pop();
|
| -}
|
| -
|
| -
|
| -Handle<Code> ArrayShiftStub::GenerateCode() {
|
| - return DoGenerateCode(this);
|
| -}
|
| -
|
| -
|
| void CodeStubGraphBuilderBase::BuildCheckAndInstallOptimizedCode(
|
| HValue* js_function,
|
| HValue* native_context,
|
|
|