| Index: src/mips/regexp-macro-assembler-mips.cc
|
| ===================================================================
|
| --- src/mips/regexp-macro-assembler-mips.cc (revision 9531)
|
| +++ src/mips/regexp-macro-assembler-mips.cc (working copy)
|
| @@ -377,9 +377,12 @@
|
| // Isolate.
|
| __ li(a3, Operand(ExternalReference::isolate_address()));
|
|
|
| - ExternalReference function =
|
| - ExternalReference::re_case_insensitive_compare_uc16(masm_->isolate());
|
| - __ CallCFunction(function, argument_count);
|
| + {
|
| + AllowExternalCallThatCantCauseGC scope(masm_);
|
| + ExternalReference function =
|
| + ExternalReference::re_case_insensitive_compare_uc16(masm_->isolate());
|
| + __ CallCFunction(function, argument_count);
|
| + }
|
|
|
| // Restore regexp engine registers.
|
| __ MultiPop(regexp_registers_to_retain);
|
| @@ -607,6 +610,12 @@
|
|
|
| // Entry code:
|
| __ bind(&entry_label_);
|
| +
|
| + // Tell the system that we have a stack frame. Because the type is MANUAL,
|
| + // no is generated.
|
| + FrameScope scope(masm_, StackFrame::MANUAL);
|
| +
|
| + // Actually emit code to start a new stack frame.
|
| // Push arguments
|
| // Save callee-save registers.
|
| // Start new stack frame.
|
| @@ -1244,13 +1253,14 @@
|
| if (stack_alignment < kPointerSize) stack_alignment = kPointerSize;
|
| // Stack is already aligned for call, so decrement by alignment
|
| // to make room for storing the return address.
|
| - __ Subu(sp, sp, Operand(stack_alignment));
|
| - __ sw(ra, MemOperand(sp, 0));
|
| - __ mov(a0, sp);
|
| + __ Subu(sp, sp, Operand(stack_alignment + kCArgsSlotsSize));
|
| + const int return_address_offset = kCArgsSlotsSize;
|
| + __ Addu(a0, sp, return_address_offset);
|
| + __ sw(ra, MemOperand(a0, 0));
|
| __ mov(t9, t1);
|
| __ Call(t9);
|
| - __ lw(ra, MemOperand(sp, 0));
|
| - __ Addu(sp, sp, Operand(stack_alignment));
|
| + __ lw(ra, MemOperand(sp, return_address_offset));
|
| + __ Addu(sp, sp, Operand(stack_alignment + kCArgsSlotsSize));
|
| __ Jump(ra);
|
| }
|
|
|
|
|