Index: src/x87/code-stubs-x87.cc |
diff --git a/src/x87/code-stubs-x87.cc b/src/x87/code-stubs-x87.cc |
index 583b213838e3298a17513ae3d61f78d0af77d33c..29213054c043af235aa06515271904b9d1a91a1c 100644 |
--- a/src/x87/code-stubs-x87.cc |
+++ b/src/x87/code-stubs-x87.cc |
@@ -3592,6 +3592,8 @@ static void HandlePolymorphicKeyedStoreCase(MacroAssembler* masm, |
__ lea(feedback, FieldOperand(feedback, Code::kHeaderSize)); |
__ mov(Operand::StaticVariable(virtual_register), feedback); |
__ pop(value); |
+ |
+ // Call store handler using StoreWithVectorDescriptor calling convention. |
__ jmp(Operand::StaticVariable(virtual_register)); |
__ bind(&transition_call); |
@@ -3615,14 +3617,21 @@ static void HandlePolymorphicKeyedStoreCase(MacroAssembler* masm, |
__ mov(cached_map, FieldOperand(cached_map, WeakCell::kValueOffset)); |
// The weak cell may have been cleared. |
__ JumpIfSmi(cached_map, &pop_and_miss); |
- DCHECK(!cached_map.is(VectorStoreTransitionDescriptor::MapRegister())); |
- __ mov(VectorStoreTransitionDescriptor::MapRegister(), cached_map); |
+ DCHECK(!cached_map.is(StoreTransitionDescriptor::MapRegister())); |
+ __ mov(StoreTransitionDescriptor::MapRegister(), cached_map); |
- // Pop key into place. |
+ // Call store transition handler using StoreTransitionDescriptor calling |
+ // convention. |
__ pop(key); |
__ pop(vector); |
__ pop(receiver); |
__ pop(value); |
+ { |
+ // Put vector and slot beneath return address. |
+ __ push(vector); |
+ __ push(Operand(esp, 1 * kPointerSize)); // push return address |
+ __ mov(Operand(esp, 2 * kPointerSize), slot); |
+ } |
__ jmp(Operand::StaticVariable(virtual_register)); |
__ bind(&prepare_next); |