Chromium Code Reviews| Index: src/arm/code-stubs-arm.cc |
| diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc |
| index ca48acdc43aff0373785fde7e00eb6282e4f47d5..84d825fb1513e1a70680320cf7a77555b7cb7776 100644 |
| --- a/src/arm/code-stubs-arm.cc |
| +++ b/src/arm/code-stubs-arm.cc |
| @@ -1494,13 +1494,12 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { |
| STATIC_ASSERT(kSmiTagSize + kSmiShiftSize == 1); |
| __ add(r1, r1, Operand(2)); // r1 was a smi. |
| - __ ldr(r0, MemOperand(sp, kLastMatchInfoOffset)); |
| - __ JumpIfSmi(r0, &runtime); |
| - __ CompareObjectType(r0, r2, r2, JS_OBJECT_TYPE); |
| + // Check that the last match info is a FixedArray. |
| + __ ldr(last_match_info_elements, MemOperand(sp, kLastMatchInfoOffset)); |
| + __ JumpIfSmi(last_match_info_elements, &runtime); |
| + __ CompareObjectType(last_match_info_elements, r2, r2, FIXED_ARRAY_TYPE); |
| __ b(ne, &runtime); |
| // Check that the object has fast elements. |
| - __ ldr(last_match_info_elements, |
| - FieldMemOperand(r0, JSArray::kElementsOffset)); |
| __ ldr(r0, FieldMemOperand(last_match_info_elements, HeapObject::kMapOffset)); |
| __ CompareRoot(r0, Heap::kFixedArrayMapRootIndex); |
|
Yang
2016/10/14 08:51:10
I don't think we have to first check that the elem
jgruber
2016/10/14 09:52:15
Done.
|
| __ b(ne, &runtime); |
| @@ -1508,7 +1507,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { |
| // additional information. |
| __ ldr(r0, |
| FieldMemOperand(last_match_info_elements, FixedArray::kLengthOffset)); |
| - __ add(r2, r1, Operand(RegExpImpl::kLastMatchOverhead)); |
| + __ add(r2, r1, Operand(RegExpMatchInfo::kLastMatchOverhead)); |
| __ cmp(r2, Operand::SmiUntag(r0)); |
| __ b(gt, &runtime); |
| @@ -1517,28 +1516,20 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { |
| // Store the capture count. |
| __ SmiTag(r2, r1); |
| __ str(r2, FieldMemOperand(last_match_info_elements, |
| - RegExpImpl::kLastCaptureCountOffset)); |
| + RegExpMatchInfo::kNumberOfCapturesOffset)); |
| // Store last subject and last input. |
| - __ str(subject, |
| - FieldMemOperand(last_match_info_elements, |
| - RegExpImpl::kLastSubjectOffset)); |
| + __ str(subject, FieldMemOperand(last_match_info_elements, |
| + RegExpMatchInfo::kLastSubjectOffset)); |
| __ mov(r2, subject); |
| __ RecordWriteField(last_match_info_elements, |
| - RegExpImpl::kLastSubjectOffset, |
| - subject, |
| - r3, |
| - kLRHasNotBeenSaved, |
| - kDontSaveFPRegs); |
| + RegExpMatchInfo::kLastSubjectOffset, subject, r3, |
| + kLRHasNotBeenSaved, kDontSaveFPRegs); |
| __ mov(subject, r2); |
| - __ str(subject, |
| - FieldMemOperand(last_match_info_elements, |
| - RegExpImpl::kLastInputOffset)); |
| + __ str(subject, FieldMemOperand(last_match_info_elements, |
| + RegExpMatchInfo::kLastInputOffset)); |
| __ RecordWriteField(last_match_info_elements, |
| - RegExpImpl::kLastInputOffset, |
| - subject, |
| - r3, |
| - kLRHasNotBeenSaved, |
| - kDontSaveFPRegs); |
| + RegExpMatchInfo::kLastInputOffset, subject, r3, |
| + kLRHasNotBeenSaved, kDontSaveFPRegs); |
| // Get the static offsets vector filled by the native regexp code. |
| ExternalReference address_of_static_offsets_vector = |
| @@ -1549,10 +1540,9 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { |
| // r2: offsets vector |
| Label next_capture, done; |
| // Capture register counter starts from number of capture registers and |
| - // counts down until wraping after zero. |
| - __ add(r0, |
| - last_match_info_elements, |
| - Operand(RegExpImpl::kFirstCaptureOffset - kHeapObjectTag)); |
| + // counts down until wrapping after zero. |
| + __ add(r0, last_match_info_elements, |
| + Operand(RegExpMatchInfo::kFirstCaptureOffset - kHeapObjectTag)); |
| __ bind(&next_capture); |
| __ sub(r1, r1, Operand(1), SetCC); |
| __ b(mi, &done); |
| @@ -1565,7 +1555,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { |
| __ bind(&done); |
| // Return last match info. |
| - __ ldr(r0, MemOperand(sp, kLastMatchInfoOffset)); |
| + __ ldr(r0, last_match_info_elements); |
| __ add(sp, sp, Operand(4 * kPointerSize)); |
| __ Ret(); |