| Index: src/arm/code-stubs-arm.cc
|
| diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc
|
| index c310da88bc03815e53f46a3a461f5ec13eb2f0fe..f6b87c38e58f0b4cd403bb15c835e01fe59ea6d0 100644
|
| --- a/src/arm/code-stubs-arm.cc
|
| +++ b/src/arm/code-stubs-arm.cc
|
| @@ -4487,7 +4487,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.)
|
| - __ ldr(subject, MemOperand(fp, kSubjectOffset + 2 * kPointerSize));
|
| + __ ldr(r0, MemOperand(fp, kSubjectOffset + 2 * kPointerSize));
|
| // If slice offset is not 0, load the length from the original sliced string.
|
| // Argument 4, r3: End of string data
|
| // Argument 3, r2: Start of string data
|
| @@ -4495,7 +4495,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
| __ add(r9, r8, Operand(r9, LSL, r3));
|
| __ add(r2, r9, Operand(r1, LSL, r3));
|
|
|
| - __ ldr(r8, FieldMemOperand(subject, String::kLengthOffset));
|
| + __ ldr(r8, FieldMemOperand(r0, String::kLengthOffset));
|
| __ mov(r8, Operand(r8, ASR, kSmiTagSize));
|
| __ add(r3, r9, Operand(r8, LSL, r3));
|
|
|
| @@ -4503,7 +4503,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
| // Already there
|
|
|
| // Argument 1 (r0): Subject string.
|
| - __ mov(r0, subject);
|
| + // Already there
|
|
|
| // Locate the code entry and call it.
|
| __ add(r7, r7, Operand(Code::kHeaderSize - kHeapObjectTag));
|
| @@ -4520,12 +4520,12 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
| // Check the result.
|
| Label success;
|
|
|
| - __ cmp(r0, Operand(NativeRegExpMacroAssembler::SUCCESS));
|
| + __ cmp(subject, Operand(NativeRegExpMacroAssembler::SUCCESS));
|
| __ b(eq, &success);
|
| Label failure;
|
| - __ cmp(r0, Operand(NativeRegExpMacroAssembler::FAILURE));
|
| + __ cmp(subject, Operand(NativeRegExpMacroAssembler::FAILURE));
|
| __ b(eq, &failure);
|
| - __ cmp(r0, Operand(NativeRegExpMacroAssembler::EXCEPTION));
|
| + __ cmp(subject, Operand(NativeRegExpMacroAssembler::EXCEPTION));
|
| // If not exception it can only be retry. Handle that in the runtime system.
|
| __ b(ne, &runtime);
|
| // Result must now be exception. If there is no pending exception already a
|
| @@ -4537,18 +4537,18 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
| __ mov(r2, Operand(ExternalReference(Isolate::k_pending_exception_address,
|
| isolate)));
|
| __ ldr(r0, MemOperand(r2, 0));
|
| - __ cmp(r0, r1);
|
| + __ cmp(subject, r1);
|
| __ b(eq, &runtime);
|
|
|
| __ str(r1, MemOperand(r2, 0)); // Clear pending exception.
|
|
|
| // Check if the exception is a termination. If so, throw as uncatchable.
|
| - __ CompareRoot(r0, Heap::kTerminationExceptionRootIndex);
|
| -
|
| + __ LoadRoot(ip, Heap::kTerminationExceptionRootIndex);
|
| + __ cmp(subject, ip);
|
| Label termination_exception;
|
| __ b(eq, &termination_exception);
|
|
|
| - __ Throw(r0); // Expects thrown value in r0.
|
| + __ Throw(subject); // Expects thrown value in r0.
|
|
|
| __ bind(&termination_exception);
|
| __ ThrowUncatchable(TERMINATION, r0); // Expects thrown value in r0.
|
|
|