| Index: src/mips/stub-cache-mips.cc
|
| diff --git a/src/mips/stub-cache-mips.cc b/src/mips/stub-cache-mips.cc
|
| index 63fde9711809391bbec08a077e44074f7ab9433f..b2c78a38d6ff851483f274079a4710c7e5e3b405 100644
|
| --- a/src/mips/stub-cache-mips.cc
|
| +++ b/src/mips/stub-cache-mips.cc
|
| @@ -337,8 +337,8 @@ void StubCompiler::GenerateLoadArrayLength(MacroAssembler* masm,
|
| __ Branch(miss_label, ne, scratch, Operand(JS_ARRAY_TYPE));
|
|
|
| // Load length directly from the JS array.
|
| + __ Ret(USE_DELAY_SLOT);
|
| __ lw(v0, FieldMemOperand(receiver, JSArray::kLengthOffset));
|
| - __ Ret();
|
| }
|
|
|
|
|
| @@ -384,8 +384,8 @@ void StubCompiler::GenerateLoadStringLength(MacroAssembler* masm,
|
| support_wrappers ? &check_wrapper : miss);
|
|
|
| // Load length directly from the string.
|
| + __ Ret(USE_DELAY_SLOT);
|
| __ lw(v0, FieldMemOperand(receiver, String::kLengthOffset));
|
| - __ Ret();
|
|
|
| if (support_wrappers) {
|
| // Check if the object is a JSValue wrapper.
|
| @@ -395,8 +395,8 @@ void StubCompiler::GenerateLoadStringLength(MacroAssembler* masm,
|
| // Unwrap the value and check if the wrapped value is a string.
|
| __ lw(scratch1, FieldMemOperand(receiver, JSValue::kValueOffset));
|
| GenerateStringCheck(masm, scratch1, scratch2, scratch2, miss, miss);
|
| + __ Ret(USE_DELAY_SLOT);
|
| __ lw(v0, FieldMemOperand(scratch1, String::kLengthOffset));
|
| - __ Ret();
|
| }
|
| }
|
|
|
| @@ -407,8 +407,8 @@ void StubCompiler::GenerateLoadFunctionPrototype(MacroAssembler* masm,
|
| Register scratch2,
|
| Label* miss_label) {
|
| __ TryGetFunctionPrototype(receiver, scratch1, scratch2, miss_label);
|
| + __ Ret(USE_DELAY_SLOT);
|
| __ mov(v0, scratch1);
|
| - __ Ret();
|
| }
|
|
|
|
|
| @@ -639,8 +639,8 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm,
|
| // Return the value (register v0).
|
| ASSERT(value_reg.is(a0));
|
| __ bind(&exit);
|
| + __ Ret(USE_DELAY_SLOT);
|
| __ mov(v0, a0);
|
| - __ Ret();
|
| }
|
|
|
|
|
| @@ -715,8 +715,8 @@ void StubCompiler::GenerateStoreField(MacroAssembler* masm,
|
| __ sdc1(f4, FieldMemOperand(scratch1, HeapNumber::kValueOffset));
|
| // Return the value (register v0).
|
| ASSERT(value_reg.is(a0));
|
| + __ Ret(USE_DELAY_SLOT);
|
| __ mov(v0, a0);
|
| - __ Ret();
|
| return;
|
| }
|
|
|
| @@ -773,8 +773,8 @@ void StubCompiler::GenerateStoreField(MacroAssembler* masm,
|
| // Return the value (register v0).
|
| ASSERT(value_reg.is(a0));
|
| __ bind(&exit);
|
| + __ Ret(USE_DELAY_SLOT);
|
| __ mov(v0, a0);
|
| - __ Ret();
|
| }
|
|
|
|
|
| @@ -1706,8 +1706,7 @@ Handle<Code> CallStubCompiler::CompileArrayPushCall(
|
| if (argc == 0) {
|
| // Nothing to do, just return the length.
|
| __ lw(v0, FieldMemOperand(receiver, JSArray::kLengthOffset));
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
| } else {
|
| Label call_builtin;
|
| if (argc == 1) { // Otherwise fall through to call the builtin.
|
| @@ -1755,8 +1754,7 @@ Handle<Code> CallStubCompiler::CompileArrayPushCall(
|
| __ sw(t0, MemOperand(end_elements));
|
|
|
| // Check for a smi.
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
|
|
| __ bind(&check_double);
|
|
|
| @@ -1788,8 +1786,7 @@ Handle<Code> CallStubCompiler::CompileArrayPushCall(
|
| __ sw(a0, FieldMemOperand(receiver, JSArray::kLengthOffset));
|
|
|
| // Check for a smi.
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
|
|
| __ bind(&with_write_barrier);
|
|
|
| @@ -1855,8 +1852,7 @@ Handle<Code> CallStubCompiler::CompileArrayPushCall(
|
| kDontSaveFPRegs,
|
| EMIT_REMEMBERED_SET,
|
| OMIT_SMI_CHECK);
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
|
|
| __ bind(&attempt_to_grow_elements);
|
| // v0: array's length + 1.
|
| @@ -1911,8 +1907,7 @@ Handle<Code> CallStubCompiler::CompileArrayPushCall(
|
| __ sw(t0, FieldMemOperand(elements, FixedArray::kLengthOffset));
|
|
|
| // Elements are in new space, so write barrier is not required.
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
| }
|
| __ bind(&call_builtin);
|
| __ TailCallExternalReference(
|
| @@ -1991,13 +1986,11 @@ Handle<Code> CallStubCompiler::CompileArrayPopCall(
|
|
|
| // Fill with the hole.
|
| __ sw(t2, FieldMemOperand(elements, FixedArray::kHeaderSize));
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
|
|
| __ bind(&return_undefined);
|
| __ LoadRoot(v0, Heap::kUndefinedValueRootIndex);
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
|
|
| __ bind(&call_builtin);
|
| __ TailCallExternalReference(
|
| @@ -2072,8 +2065,7 @@ Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall(
|
| index_out_of_range_label,
|
| STRING_INDEX_IS_NUMBER);
|
| generator.GenerateFast(masm());
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
|
|
| StubRuntimeCallHelper call_helper;
|
| generator.GenerateSlow(masm(), call_helper);
|
| @@ -2081,8 +2073,7 @@ Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall(
|
| if (index_out_of_range.is_linked()) {
|
| __ bind(&index_out_of_range);
|
| __ LoadRoot(v0, Heap::kNanValueRootIndex);
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
| }
|
|
|
| __ bind(&miss);
|
| @@ -2155,8 +2146,7 @@ Handle<Code> CallStubCompiler::CompileStringCharAtCall(
|
| index_out_of_range_label,
|
| STRING_INDEX_IS_NUMBER);
|
| generator.GenerateFast(masm());
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
|
|
| StubRuntimeCallHelper call_helper;
|
| generator.GenerateSlow(masm(), call_helper);
|
| @@ -2164,8 +2154,7 @@ Handle<Code> CallStubCompiler::CompileStringCharAtCall(
|
| if (index_out_of_range.is_linked()) {
|
| __ bind(&index_out_of_range);
|
| __ LoadRoot(v0, Heap::kempty_stringRootIndex);
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
| }
|
|
|
| __ bind(&miss);
|
| @@ -2231,8 +2220,7 @@ Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall(
|
|
|
| StringCharFromCodeGenerator generator(code, v0);
|
| generator.GenerateFast(masm());
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
|
|
| StubRuntimeCallHelper call_helper;
|
| generator.GenerateSlow(masm(), call_helper);
|
| @@ -2295,8 +2283,7 @@ Handle<Code> CallStubCompiler::CompileMathFloorCall(
|
| // If the argument is a smi, just return.
|
| STATIC_ASSERT(kSmiTag == 0);
|
| __ And(t0, v0, Operand(kSmiTagMask));
|
| - __ Drop(argc + 1, eq, t0, Operand(zero_reg));
|
| - __ Ret(eq, t0, Operand(zero_reg));
|
| + __ DropAndRet(argc + 1, eq, t0, Operand(zero_reg));
|
|
|
| __ CheckMap(v0, a1, Heap::kHeapNumberMapRootIndex, &slow, DONT_DO_SMI_CHECK);
|
|
|
| @@ -2361,8 +2348,7 @@ Handle<Code> CallStubCompiler::CompileMathFloorCall(
|
| // Restore FCSR and return.
|
| __ ctc1(a3, FCSR);
|
|
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
|
|
| __ bind(&wont_fit_smi);
|
| // Restore FCSR and fall to slow case.
|
| @@ -2441,8 +2427,7 @@ Handle<Code> CallStubCompiler::CompileMathAbsCall(
|
| __ Branch(&slow, lt, v0, Operand(zero_reg));
|
|
|
| // Smi case done.
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
|
|
| // Check if the argument is a heap number and load its exponent and
|
| // sign.
|
| @@ -2455,8 +2440,7 @@ Handle<Code> CallStubCompiler::CompileMathAbsCall(
|
| Label negative_sign;
|
| __ And(t0, a1, Operand(HeapNumber::kSignMask));
|
| __ Branch(&negative_sign, ne, t0, Operand(zero_reg));
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
|
|
| // If the argument is negative, clear the sign, and return a new
|
| // number.
|
| @@ -2467,8 +2451,7 @@ Handle<Code> CallStubCompiler::CompileMathAbsCall(
|
| __ AllocateHeapNumber(v0, t0, t1, t2, &slow);
|
| __ sw(a1, FieldMemOperand(v0, HeapNumber::kExponentOffset));
|
| __ sw(a3, FieldMemOperand(v0, HeapNumber::kMantissaOffset));
|
| - __ Drop(argc + 1);
|
| - __ Ret();
|
| + __ DropAndRet(argc + 1);
|
|
|
| // Tail call the full function. We do not have to patch the receiver
|
| // because the function makes no use of it.
|
| @@ -3066,8 +3049,8 @@ Handle<Code> LoadStubCompiler::CompileLoadGlobal(
|
|
|
| Counters* counters = isolate()->counters();
|
| __ IncrementCounter(counters->named_load_global_stub(), 1, a1, a3);
|
| + __ Ret(USE_DELAY_SLOT);
|
| __ mov(v0, t0);
|
| - __ Ret();
|
|
|
| // Return the generated code.
|
| return GetICCode(kind(), Code::NORMAL, name);
|
| @@ -3338,8 +3321,8 @@ void KeyedStoreStubCompiler::GenerateStoreExternalArray(
|
| }
|
|
|
| // Entry registers are intact, a0 holds the value which is the return value.
|
| + __ Ret(USE_DELAY_SLOT);
|
| __ mov(v0, a0);
|
| - __ Ret();
|
|
|
| if (elements_kind != EXTERNAL_PIXEL_ELEMENTS) {
|
| // a3: external array.
|
| @@ -3406,8 +3389,8 @@ void KeyedStoreStubCompiler::GenerateStoreExternalArray(
|
|
|
| // Entry registers are intact, a0 holds the value
|
| // which is the return value.
|
| + __ Ret(USE_DELAY_SLOT);
|
| __ mov(v0, a0);
|
| - __ Ret();
|
| }
|
|
|
| // Slow case, key and receiver still in a0 and a1.
|
| @@ -3568,8 +3551,8 @@ void KeyedStoreStubCompiler::GenerateStoreFastElement(
|
|
|
| // Increment the length of the array.
|
| __ li(length_reg, Operand(Smi::FromInt(1)));
|
| + __ Ret(USE_DELAY_SLOT);
|
| __ sw(length_reg, FieldMemOperand(receiver_reg, JSArray::kLengthOffset));
|
| - __ Ret();
|
|
|
| __ bind(&check_capacity);
|
| // Check for cow elements, in general they are not handled by this stub
|
| @@ -3733,9 +3716,9 @@ void KeyedStoreStubCompiler::GenerateStoreFastDoubleElement(
|
| // Increment the length of the array.
|
| __ li(length_reg, Operand(Smi::FromInt(1)));
|
| __ sw(length_reg, FieldMemOperand(receiver_reg, JSArray::kLengthOffset));
|
| + __ Ret(USE_DELAY_SLOT);
|
| __ lw(elements_reg,
|
| FieldMemOperand(receiver_reg, JSObject::kElementsOffset));
|
| - __ Ret();
|
|
|
| __ bind(&check_capacity);
|
| // Make sure that the backing store can hold additional elements.
|
|
|