Index: src/mips/builtins-mips.cc |
diff --git a/src/mips/builtins-mips.cc b/src/mips/builtins-mips.cc |
index 611c74f7f8a483fe80ee159e297f2ab32134a6f0..06273caf788b70f1a031177e501178b892e7c7cf 100644 |
--- a/src/mips/builtins-mips.cc |
+++ b/src/mips/builtins-mips.cc |
@@ -335,9 +335,9 @@ void ArrayNativeCode(MacroAssembler* masm, Label* call_generic_code) { |
call_generic_code); |
__ IncrementCounter(counters->array_function_native(), 1, a3, t0); |
// Set up return value, remove receiver from stack and return. |
- __ mov(v0, a2); |
__ Addu(sp, sp, Operand(kPointerSize)); |
- __ Ret(); |
+ __ Ret(USE_DELAY_SLOT); |
+ __ mov(v0, a2); |
// Check for one argument. Bail out if argument is not smi or if it is |
// negative. |
@@ -378,9 +378,9 @@ void ArrayNativeCode(MacroAssembler* masm, Label* call_generic_code) { |
__ IncrementCounter(counters->array_function_native(), 1, a2, t0); |
// Set up return value, remove receiver and argument from stack and return. |
- __ mov(v0, a3); |
__ Addu(sp, sp, Operand(2 * kPointerSize)); |
- __ Ret(); |
+ __ Ret(USE_DELAY_SLOT); |
+ __ mov(v0, a3); |
// Handle construction of an array from a list of arguments. |
__ bind(&argc_two_or_more); |
@@ -434,8 +434,8 @@ void ArrayNativeCode(MacroAssembler* masm, Label* call_generic_code) { |
// a3: JSArray |
// sp[0]: receiver |
__ Addu(sp, sp, Operand(kPointerSize)); |
+ __ Ret(USE_DELAY_SLOT); |
__ mov(v0, a3); |
- __ Ret(); |
__ bind(&has_non_smi_element); |
// Double values are handled by the runtime. |
@@ -1372,15 +1372,17 @@ static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm, |
Label with_tos_register, unknown_state; |
__ Branch(&with_tos_register, |
ne, t2, Operand(FullCodeGenerator::NO_REGISTERS)); |
+ __ Ret(USE_DELAY_SLOT); |
+ // Safe to fill delay slot Addu will emit one instruction. |
__ Addu(sp, sp, Operand(1 * kPointerSize)); // Remove state. |
- __ Ret(); |
__ bind(&with_tos_register); |
__ lw(v0, MemOperand(sp, 1 * kPointerSize)); |
__ Branch(&unknown_state, ne, t2, Operand(FullCodeGenerator::TOS_REG)); |
+ __ Ret(USE_DELAY_SLOT); |
+ // Safe to fill delay slot Addu will emit one instruction. |
__ Addu(sp, sp, Operand(2 * kPointerSize)); // Remove state. |
- __ Ret(); |
__ bind(&unknown_state); |
__ stop("no cases left"); |