Index: src/mips/ic-mips.cc |
diff --git a/src/mips/ic-mips.cc b/src/mips/ic-mips.cc |
index eb730bb388154e092f7afc30beda4076de0af185..ed67e829e3a2cf8c7e2fedce104b39c5ec708a12 100644 |
--- a/src/mips/ic-mips.cc |
+++ b/src/mips/ic-mips.cc |
@@ -1486,6 +1486,51 @@ void KeyedStoreIC::GenerateSlow(MacroAssembler* masm) { |
} |
+void KeyedStoreIC::GenerateTransitionElementsSmiToDouble(MacroAssembler* masm) { |
+ // ---------- S t a t e -------------- |
+ // -- a2 : receiver |
+ // -- a3 : target map |
+ // -- ra : return address |
+ // ----------------------------------- |
+ // Must return the modified receiver in v0. |
+ if (!FLAG_trace_elements_transitions) { |
+ Label fail; |
+ AllocationSiteMode mode = AllocationSite::GetMode(FAST_SMI_ELEMENTS, |
+ FAST_DOUBLE_ELEMENTS); |
+ ElementsTransitionGenerator::GenerateSmiToDouble(masm, mode, &fail); |
+ __ Ret(USE_DELAY_SLOT); |
+ __ mov(v0, a2); |
+ __ bind(&fail); |
+ } |
+ |
+ __ push(a2); |
+ __ TailCallRuntime(Runtime::kTransitionElementsSmiToDouble, 1, 1); |
+} |
+ |
+ |
+void KeyedStoreIC::GenerateTransitionElementsDoubleToObject( |
+ MacroAssembler* masm) { |
+ // ---------- S t a t e -------------- |
+ // -- a2 : receiver |
+ // -- a3 : target map |
+ // -- ra : return address |
+ // ----------------------------------- |
+ // Must return the modified receiver in v0. |
+ if (!FLAG_trace_elements_transitions) { |
+ Label fail; |
+ AllocationSiteMode mode = AllocationSite::GetMode(FAST_DOUBLE_ELEMENTS, |
+ FAST_ELEMENTS); |
+ ElementsTransitionGenerator::GenerateDoubleToObject(masm, mode, &fail); |
+ __ Ret(USE_DELAY_SLOT); |
+ __ mov(v0, a2); |
+ __ bind(&fail); |
+ } |
+ |
+ __ push(a2); |
+ __ TailCallRuntime(Runtime::kTransitionElementsDoubleToObject, 1, 1); |
+} |
+ |
+ |
void StoreIC::GenerateMegamorphic(MacroAssembler* masm, |
StrictModeFlag strict_mode) { |
// ----------- S t a t e ------------- |