Index: src/arm/ic-arm.cc |
diff --git a/src/arm/ic-arm.cc b/src/arm/ic-arm.cc |
index 511a3c74f26ccf19ee4aac6c755d583bdc2e1a83..f43846ce5806bebbe0523d83e498da1d4b5459ad 100644 |
--- a/src/arm/ic-arm.cc |
+++ b/src/arm/ic-arm.cc |
@@ -1221,6 +1221,51 @@ void KeyedStoreIC::GenerateSlow(MacroAssembler* masm) { |
} |
+void KeyedStoreIC::GenerateTransitionElementsSmiToDouble(MacroAssembler* masm) { |
+ // ---------- S t a t e -------------- |
+ // -- r2 : receiver |
+ // -- r3 : target map |
+ // -- lr : return address |
+ // ----------------------------------- |
+ // Must return the modified receiver in r0. |
+ if (!FLAG_trace_elements_transitions) { |
+ Label fail; |
+ AllocationSiteMode mode = AllocationSite::GetMode(FAST_SMI_ELEMENTS, |
+ FAST_DOUBLE_ELEMENTS); |
+ ElementsTransitionGenerator::GenerateSmiToDouble(masm, mode, &fail); |
+ __ mov(r0, r2); |
+ __ Ret(); |
+ __ bind(&fail); |
+ } |
+ |
+ __ push(r2); |
+ __ TailCallRuntime(Runtime::kTransitionElementsSmiToDouble, 1, 1); |
+} |
+ |
+ |
+void KeyedStoreIC::GenerateTransitionElementsDoubleToObject( |
+ MacroAssembler* masm) { |
+ // ---------- S t a t e -------------- |
+ // -- r2 : receiver |
+ // -- r3 : target map |
+ // -- lr : return address |
+ // ----------------------------------- |
+ // Must return the modified receiver in r0. |
+ if (!FLAG_trace_elements_transitions) { |
+ Label fail; |
+ AllocationSiteMode mode = AllocationSite::GetMode(FAST_DOUBLE_ELEMENTS, |
+ FAST_ELEMENTS); |
+ ElementsTransitionGenerator::GenerateDoubleToObject(masm, mode, &fail); |
+ __ mov(r0, r2); |
+ __ Ret(); |
+ __ bind(&fail); |
+ } |
+ |
+ __ push(r2); |
+ __ TailCallRuntime(Runtime::kTransitionElementsDoubleToObject, 1, 1); |
+} |
+ |
+ |
void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm, |
StrictModeFlag strict_mode) { |
// ---------- S t a t e -------------- |