| Index: src/mips/code-stubs-mips.cc
|
| diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc
|
| index 7ca78f6ad72ab5abd65825bb0e1a8a2e5645bb90..4acc2488a510d93399931d1e8fcfcd91961465e7 100644
|
| --- a/src/mips/code-stubs-mips.cc
|
| +++ b/src/mips/code-stubs-mips.cc
|
| @@ -4669,7 +4669,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
| // frame. Therefore we have to use fp, which points exactly to two pointer
|
| // sizes below the previous sp. (Because creating a new stack frame pushes
|
| // the previous fp onto the stack and moves up sp by 2 * kPointerSize.)
|
| - __ lw(a0, MemOperand(fp, kSubjectOffset + 2 * kPointerSize));
|
| + __ lw(subject, MemOperand(fp, kSubjectOffset + 2 * kPointerSize));
|
| // If slice offset is not 0, load the length from the original sliced string.
|
| // Argument 4, a3: End of string data
|
| // Argument 3, a2: Start of string data
|
| @@ -4679,7 +4679,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
| __ sllv(t1, a1, a3);
|
| __ addu(a2, t0, t1);
|
|
|
| - __ lw(t2, FieldMemOperand(a0, String::kLengthOffset));
|
| + __ lw(t2, FieldMemOperand(subject, String::kLengthOffset));
|
| __ sra(t2, t2, kSmiTagSize);
|
| __ sllv(t1, t2, a3);
|
| __ addu(a3, t0, t1);
|
| @@ -4687,7 +4687,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
| // Already there
|
|
|
| // Argument 1 (a0): Subject string.
|
| - // Already there
|
| + __ mov(a0, subject);
|
|
|
| // Locate the code entry and call it.
|
| __ Addu(t9, t9, Operand(Code::kHeaderSize - kHeapObjectTag));
|
| @@ -4705,13 +4705,13 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
|
|
| Label success;
|
| __ Branch(&success, eq,
|
| - subject, Operand(NativeRegExpMacroAssembler::SUCCESS));
|
| + v0, Operand(NativeRegExpMacroAssembler::SUCCESS));
|
| Label failure;
|
| __ Branch(&failure, eq,
|
| - subject, Operand(NativeRegExpMacroAssembler::FAILURE));
|
| + v0, Operand(NativeRegExpMacroAssembler::FAILURE));
|
| // If not exception it can only be retry. Handle that in the runtime system.
|
| __ Branch(&runtime, ne,
|
| - subject, Operand(NativeRegExpMacroAssembler::EXCEPTION));
|
| + v0, Operand(NativeRegExpMacroAssembler::EXCEPTION));
|
| // Result must now be exception. If there is no pending exception already a
|
| // stack overflow (on the backtrack stack) was detected in RegExp code but
|
| // haven't created the exception yet. Handle that in the runtime system.
|
| @@ -4722,16 +4722,16 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
| __ li(a2, Operand(ExternalReference(Isolate::k_pending_exception_address,
|
| masm->isolate())));
|
| __ lw(v0, MemOperand(a2, 0));
|
| - __ Branch(&runtime, eq, subject, Operand(a1));
|
| + __ Branch(&runtime, eq, v0, Operand(a1));
|
|
|
| __ sw(a1, MemOperand(a2, 0)); // Clear pending exception.
|
|
|
| // Check if the exception is a termination. If so, throw as uncatchable.
|
| __ LoadRoot(a0, Heap::kTerminationExceptionRootIndex);
|
| Label termination_exception;
|
| - __ Branch(&termination_exception, eq, subject, Operand(a0));
|
| + __ Branch(&termination_exception, eq, v0, Operand(a0));
|
|
|
| - __ Throw(subject); // Expects thrown value in v0.
|
| + __ Throw(v0); // Expects thrown value in v0.
|
|
|
| __ bind(&termination_exception);
|
| __ ThrowUncatchable(TERMINATION, v0); // Expects thrown value in v0.
|
|
|