Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(509)

Unified Diff: src/mips64/code-stubs-mips64.cc

Issue 2415103002: [regexp] Turn last match info into a simple FixedArray (Closed)
Patch Set: Don't check instance type before map check Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/mips/code-stubs-mips.cc ('k') | src/objects.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/mips64/code-stubs-mips64.cc
diff --git a/src/mips64/code-stubs-mips64.cc b/src/mips64/code-stubs-mips64.cc
index 9b0eeb4ca3a15bbcb31f578e14a37a38b3606852..9e1fa401a2682701c1e9752bbf4bfc01fcca5095 100644
--- a/src/mips64/code-stubs-mips64.cc
+++ b/src/mips64/code-stubs-mips64.cc
@@ -1625,13 +1625,10 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
__ Daddu(a1, a1, Operand(1));
__ dsll(a1, a1, 1); // Multiply by 2.
- __ ld(a0, MemOperand(sp, kLastMatchInfoOffset));
- __ JumpIfSmi(a0, &runtime);
- __ GetObjectType(a0, a2, a2);
- __ Branch(&runtime, ne, a2, Operand(JS_OBJECT_TYPE));
+ // Check that the last match info is a FixedArray.
+ __ ld(last_match_info_elements, MemOperand(sp, kLastMatchInfoOffset));
+ __ JumpIfSmi(last_match_info_elements, &runtime);
// Check that the object has fast elements.
- __ ld(last_match_info_elements,
- FieldMemOperand(a0, JSArray::kElementsOffset));
__ ld(a0, FieldMemOperand(last_match_info_elements, HeapObject::kMapOffset));
__ LoadRoot(at, Heap::kFixedArrayMapRootIndex);
__ Branch(&runtime, ne, a0, Operand(at));
@@ -1639,7 +1636,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
// additional information.
__ ld(a0,
FieldMemOperand(last_match_info_elements, FixedArray::kLengthOffset));
- __ Daddu(a2, a1, Operand(RegExpImpl::kLastMatchOverhead));
+ __ Daddu(a2, a1, Operand(RegExpMatchInfo::kLastMatchOverhead));
__ SmiUntag(at, a0);
__ Branch(&runtime, gt, a2, Operand(at));
@@ -1649,28 +1646,20 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
// Store the capture count.
__ SmiTag(a2, a1); // To smi.
__ sd(a2, FieldMemOperand(last_match_info_elements,
- RegExpImpl::kLastCaptureCountOffset));
+ RegExpMatchInfo::kNumberOfCapturesOffset));
// Store last subject and last input.
- __ sd(subject,
- FieldMemOperand(last_match_info_elements,
- RegExpImpl::kLastSubjectOffset));
+ __ sd(subject, FieldMemOperand(last_match_info_elements,
+ RegExpMatchInfo::kLastSubjectOffset));
__ mov(a2, subject);
__ RecordWriteField(last_match_info_elements,
- RegExpImpl::kLastSubjectOffset,
- subject,
- a7,
- kRAHasNotBeenSaved,
- kDontSaveFPRegs);
+ RegExpMatchInfo::kLastSubjectOffset, subject, a7,
+ kRAHasNotBeenSaved, kDontSaveFPRegs);
__ mov(subject, a2);
- __ sd(subject,
- FieldMemOperand(last_match_info_elements,
- RegExpImpl::kLastInputOffset));
+ __ sd(subject, FieldMemOperand(last_match_info_elements,
+ RegExpMatchInfo::kLastInputOffset));
__ RecordWriteField(last_match_info_elements,
- RegExpImpl::kLastInputOffset,
- subject,
- a7,
- kRAHasNotBeenSaved,
- kDontSaveFPRegs);
+ RegExpMatchInfo::kLastInputOffset, subject, a7,
+ kRAHasNotBeenSaved, kDontSaveFPRegs);
// Get the static offsets vector filled by the native regexp code.
ExternalReference address_of_static_offsets_vector =
@@ -1682,9 +1671,8 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
Label next_capture, done;
// Capture register counter starts from number of capture registers and
// counts down until wrapping after zero.
- __ Daddu(a0,
- last_match_info_elements,
- Operand(RegExpImpl::kFirstCaptureOffset - kHeapObjectTag));
+ __ Daddu(a0, last_match_info_elements,
+ Operand(RegExpMatchInfo::kFirstCaptureOffset - kHeapObjectTag));
__ bind(&next_capture);
__ Dsubu(a1, a1, Operand(1));
__ Branch(&done, lt, a1, Operand(zero_reg));
@@ -1700,7 +1688,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
__ bind(&done);
// Return last match info.
- __ ld(v0, MemOperand(sp, kLastMatchInfoOffset));
+ __ mov(v0, last_match_info_elements);
__ DropAndRet(4);
// Do the runtime call to execute the regexp.
« no previous file with comments | « src/mips/code-stubs-mips.cc ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698