Index: src/code-stubs.cc |
diff --git a/src/code-stubs.cc b/src/code-stubs.cc |
index b96013306c3658be32f60aa048afa56a71ab8504..8ef7e07491b9e5b2ef41ffea9631975f82908414 100644 |
--- a/src/code-stubs.cc |
+++ b/src/code-stubs.cc |
@@ -644,6 +644,17 @@ void KeyedStringLengthStub::InitializeInterfaceDescriptor( |
} |
+void GrowArrayElementsStub::InitializeInterfaceDescriptor( |
+ CodeStubInterfaceDescriptor* descriptor) { |
+ Register registers[] = { ObjectRegister(), |
+ KeyRegister(), |
+ CapacityRegister() }; |
+ Address deopt_handler = Runtime::FunctionForId( |
+ Runtime::kGrowArrayElements)->entry; |
+ descriptor->Initialize(ARRAY_SIZE(registers), registers, deopt_handler); |
+} |
+ |
+ |
void KeyedLoadDictionaryElementPlatformStub::Generate( |
MacroAssembler* masm) { |
KeyedLoadStubCompiler::GenerateLoadDictionaryElement(masm); |
@@ -656,6 +667,20 @@ void CreateAllocationSiteStub::GenerateAheadOfTime(Isolate* isolate) { |
} |
+void GrowArrayElementsStub::GenerateAheadOfTime(Isolate* isolate) { |
+ // Generate for all elements kinds |
+ int last_index = GetSequenceIndexFromFastElementsKind( |
+ TERMINAL_FAST_ELEMENTS_KIND); |
+ for (int i = 0; i <= last_index; ++i) { |
+ ElementsKind kind = GetFastElementsKindFromSequenceIndex(i); |
+ GrowArrayElementsStub stub1(isolate, true, kind); |
+ stub1.GetCode(); |
+ GrowArrayElementsStub stub2(isolate, false, kind); |
+ stub2.GetCode(); |
+ } |
+} |
+ |
+ |
void KeyedStoreElementStub::Generate(MacroAssembler* masm) { |
switch (elements_kind_) { |
case FAST_ELEMENTS: |