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..4c062f70c35d988553ec4c4ac7689ce74df0c281 100644 |
--- a/src/arm/code-stubs-arm.cc |
+++ b/src/arm/code-stubs-arm.cc |
@@ -1494,13 +1494,10 @@ 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); |
- __ b(ne, &runtime); |
+ // Check that the last match info is a FixedArray. |
+ __ ldr(last_match_info_elements, MemOperand(sp, kLastMatchInfoOffset)); |
+ __ JumpIfSmi(last_match_info_elements, &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); |
__ b(ne, &runtime); |
@@ -1508,7 +1505,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 +1514,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 +1538,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 +1553,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { |
__ bind(&done); |
// Return last match info. |
- __ ldr(r0, MemOperand(sp, kLastMatchInfoOffset)); |
+ __ mov(r0, last_match_info_elements); |
__ add(sp, sp, Operand(4 * kPointerSize)); |
__ Ret(); |