Index: src/ic/mips/ic-mips.cc |
diff --git a/src/ic/mips/ic-mips.cc b/src/ic/mips/ic-mips.cc |
index 500a7d7d61e8c90d6674c240d601f7bbd786d1d2..ce9e3d9403e7363f20b2e7bf253b73f4b6053e28 100644 |
--- a/src/ic/mips/ic-mips.cc |
+++ b/src/ic/mips/ic-mips.cc |
@@ -494,7 +494,8 @@ static void KeyedStoreGenerateMegamorphicHelper( |
__ Addu(address, elements, Operand(FixedArray::kHeaderSize - kHeapObjectTag)); |
__ Lsa(address, address, key, kPointerSizeLog2 - kSmiTagSize); |
__ sw(value, MemOperand(address)); |
- __ Ret(); |
+ __ Ret(USE_DELAY_SLOT); |
+ __ Move(v0, value); // Ensure the stub returns correct value. |
__ bind(&non_smi_value); |
// Escape to elements kind transition case. |
@@ -514,7 +515,8 @@ static void KeyedStoreGenerateMegamorphicHelper( |
__ mov(scratch, value); // Preserve the value which is returned. |
__ RecordWrite(elements, address, scratch, kRAHasNotBeenSaved, |
kDontSaveFPRegs, EMIT_REMEMBERED_SET, OMIT_SMI_CHECK); |
- __ Ret(); |
+ __ Ret(USE_DELAY_SLOT); |
+ __ Move(v0, value); // Ensure the stub returns correct value. |
__ bind(fast_double); |
if (check_map == kCheckMap) { |
@@ -543,7 +545,8 @@ static void KeyedStoreGenerateMegamorphicHelper( |
__ Addu(scratch, key, Operand(Smi::FromInt(1))); |
__ sw(scratch, FieldMemOperand(receiver, JSArray::kLengthOffset)); |
} |
- __ Ret(); |
+ __ Ret(USE_DELAY_SLOT); |
+ __ Move(v0, value); // Ensure the stub returns correct value. |
__ bind(&transition_smi_elements); |
// Transition the array appropriately depending on the value type. |
@@ -757,7 +760,8 @@ void StoreIC::GenerateNormal(MacroAssembler* masm) { |
GenerateDictionaryStore(masm, &miss, dictionary, name, value, t2, t5); |
Counters* counters = masm->isolate()->counters(); |
__ IncrementCounter(counters->ic_store_normal_hit(), 1, t2, t5); |
- __ Ret(); |
+ __ Ret(USE_DELAY_SLOT); |
+ __ Move(v0, value); // Ensure the stub returns correct value. |
__ bind(&miss); |
__ IncrementCounter(counters->ic_store_normal_miss(), 1, t2, t5); |