Index: src/arm64/code-stubs-arm64.cc |
diff --git a/src/arm64/code-stubs-arm64.cc b/src/arm64/code-stubs-arm64.cc |
index e726d0bd6df19ccc0459c69cd4c756e9e50ea1e3..f9290a7850406418f41750503499d6a13546509b 100644 |
--- a/src/arm64/code-stubs-arm64.cc |
+++ b/src/arm64/code-stubs-arm64.cc |
@@ -1649,15 +1649,12 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { |
__ Add(x10, x10, x10); |
__ Add(number_of_capture_registers, x10, 2); |
- // Check that the fourth object is a JSObject. |
+ // Check that the last match info is a FixedArray. |
DCHECK(jssp.Is(__ StackPointer())); |
- __ Peek(x10, kLastMatchInfoOffset); |
- __ JumpIfSmi(x10, &runtime); |
- __ JumpIfNotObjectType(x10, x11, x11, JS_OBJECT_TYPE, &runtime); |
+ __ Peek(last_match_info_elements, kLastMatchInfoOffset); |
+ __ JumpIfSmi(last_match_info_elements, &runtime); |
// Check that the object has fast elements. |
- __ Ldr(last_match_info_elements, |
- FieldMemOperand(x10, JSObject::kElementsOffset)); |
__ Ldr(x10, |
FieldMemOperand(last_match_info_elements, HeapObject::kMapOffset)); |
__ JumpIfNotRoot(x10, Heap::kFixedArrayMapRootIndex, &runtime); |
@@ -1670,38 +1667,29 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { |
__ Ldrsw(x10, |
UntagSmiFieldMemOperand(last_match_info_elements, |
FixedArray::kLengthOffset)); |
- __ Add(x11, number_of_capture_registers, RegExpImpl::kLastMatchOverhead); |
+ __ Add(x11, number_of_capture_registers, RegExpMatchInfo::kLastMatchOverhead); |
__ Cmp(x11, x10); |
__ B(gt, &runtime); |
// Store the capture count. |
__ SmiTag(x10, number_of_capture_registers); |
- __ Str(x10, |
- FieldMemOperand(last_match_info_elements, |
- RegExpImpl::kLastCaptureCountOffset)); |
+ __ Str(x10, FieldMemOperand(last_match_info_elements, |
+ 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)); |
// Use x10 as the subject string in order to only need |
// one RecordWriteStub. |
__ Mov(x10, subject); |
__ RecordWriteField(last_match_info_elements, |
- RegExpImpl::kLastSubjectOffset, |
- x10, |
- x11, |
- kLRHasNotBeenSaved, |
- kDontSaveFPRegs); |
- __ Str(subject, |
- FieldMemOperand(last_match_info_elements, |
- RegExpImpl::kLastInputOffset)); |
+ RegExpMatchInfo::kLastSubjectOffset, x10, x11, |
+ kLRHasNotBeenSaved, kDontSaveFPRegs); |
+ __ Str(subject, FieldMemOperand(last_match_info_elements, |
+ RegExpMatchInfo::kLastInputOffset)); |
__ Mov(x10, subject); |
__ RecordWriteField(last_match_info_elements, |
- RegExpImpl::kLastInputOffset, |
- x10, |
- x11, |
- kLRHasNotBeenSaved, |
- kDontSaveFPRegs); |
+ RegExpMatchInfo::kLastInputOffset, x10, x11, |
+ kLRHasNotBeenSaved, kDontSaveFPRegs); |
Register last_match_offsets = x13; |
Register offsets_vector_index = x14; |
@@ -1716,9 +1704,8 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { |
Label next_capture, done; |
// Capture register counter starts from number of capture registers and |
// iterates down to zero (inclusive). |
- __ Add(last_match_offsets, |
- last_match_info_elements, |
- RegExpImpl::kFirstCaptureOffset - kHeapObjectTag); |
+ __ Add(last_match_offsets, last_match_info_elements, |
+ RegExpMatchInfo::kFirstCaptureOffset - kHeapObjectTag); |
__ Bind(&next_capture); |
__ Subs(number_of_capture_registers, number_of_capture_registers, 2); |
__ B(mi, &done); |
@@ -1738,7 +1725,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { |
__ Bind(&done); |
// Return last match info. |
- __ Peek(x0, kLastMatchInfoOffset); |
+ __ Mov(x0, last_match_info_elements); |
// Drop the 4 arguments of the stub from the stack. |
__ Drop(4); |
__ Ret(); |