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

Unified Diff: src/builtins/builtins-regexp.cc

Issue 2541843006: [stubs] Add LoadFixedArrayElements with int index (Closed)
Patch Set: Address comments Created 4 years 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/builtins/builtins-array.cc ('k') | src/builtins/builtins-string.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/builtins/builtins-regexp.cc
diff --git a/src/builtins/builtins-regexp.cc b/src/builtins/builtins-regexp.cc
index 4c137647ca53786c11ea38ae025432ebf7895548..c997c0b3f87fc66895982c50563b117170c7ff7c 100644
--- a/src/builtins/builtins-regexp.cc
+++ b/src/builtins/builtins-regexp.cc
@@ -226,26 +226,18 @@ void StoreLastIndex(CodeStubAssembler* a, Node* context, Node* regexp,
}
}
-Node* LoadMatchInfoField(CodeStubAssembler* a, Node* const match_info,
- const int index) {
- const ParameterMode mode = CodeStubAssembler::INTPTR_PARAMETERS;
- Node* const result =
- a->LoadFixedArrayElement(match_info, a->IntPtrConstant(index), 0, mode);
- return result;
-}
-
Node* ConstructNewResultFromMatchInfo(Isolate* isolate, CodeStubAssembler* a,
Node* context, Node* match_info,
Node* string) {
CLabel out(a);
- Node* const num_indices = a->SmiUntag(LoadMatchInfoField(
- a, match_info, RegExpMatchInfo::kNumberOfCapturesIndex));
+ Node* const num_indices = a->SmiUntag(a->LoadFixedArrayElement(
+ match_info, RegExpMatchInfo::kNumberOfCapturesIndex));
Node* const num_results = a->SmiTag(a->WordShr(num_indices, 1));
Node* const start =
- LoadMatchInfoField(a, match_info, RegExpMatchInfo::kFirstCaptureIndex);
- Node* const end = LoadMatchInfoField(a, match_info,
- RegExpMatchInfo::kFirstCaptureIndex + 1);
+ a->LoadFixedArrayElement(match_info, RegExpMatchInfo::kFirstCaptureIndex);
+ Node* const end = a->LoadFixedArrayElement(
+ match_info, RegExpMatchInfo::kFirstCaptureIndex + 1);
// Calculate the substring of the first match before creating the result array
// to avoid an unnecessary write barrier storing the first result.
@@ -420,8 +412,8 @@ Node* RegExpPrototypeExecBodyWithoutResult(
a->GotoUnless(should_update_last_index, &out);
// Update the new last index from {match_indices}.
- Node* const new_lastindex = LoadMatchInfoField(
- a, match_indices, RegExpMatchInfo::kFirstCaptureIndex + 1);
+ Node* const new_lastindex = a->LoadFixedArrayElement(
+ match_indices, RegExpMatchInfo::kFirstCaptureIndex + 1);
StoreLastIndex(a, context, regexp, new_lastindex, is_fastpath);
a->Goto(&out);
@@ -1389,10 +1381,10 @@ void RegExpPrototypeMatchBody(CodeStubAssembler* a, Node* const receiver,
Node* const match_indices = RegExpPrototypeExecBodyWithoutResult(
a, context, regexp, string, &if_didnotmatch, true);
- Node* const match_from = LoadMatchInfoField(
- a, match_indices, RegExpMatchInfo::kFirstCaptureIndex);
- Node* const match_to = LoadMatchInfoField(
- a, match_indices, RegExpMatchInfo::kFirstCaptureIndex + 1);
+ Node* const match_from = a->LoadFixedArrayElement(
+ match_indices, RegExpMatchInfo::kFirstCaptureIndex);
+ Node* const match_to = a->LoadFixedArrayElement(
+ match_indices, RegExpMatchInfo::kFirstCaptureIndex + 1);
Node* match = a->SubString(context, string, match_from, match_to);
var_match.Bind(match);
@@ -1414,9 +1406,7 @@ void RegExpPrototypeMatchBody(CodeStubAssembler* a, Node* const receiver,
a->Bind(&fast_result);
{
Node* const result_fixed_array = a->LoadElements(result);
- const ParameterMode mode = CodeStubAssembler::INTPTR_PARAMETERS;
- Node* const match =
- a->LoadFixedArrayElement(result_fixed_array, int_zero, 0, mode);
+ Node* const match = a->LoadFixedArrayElement(result_fixed_array, 0);
// The match is guaranteed to be a string on the fast path.
CSA_ASSERT(a, a->IsStringInstanceType(a->LoadInstanceType(match)));
@@ -1534,8 +1524,8 @@ void RegExpPrototypeSearchBodyFast(CodeStubAssembler* a, Node* const receiver,
FastStoreLastIndex(a, receiver, previous_last_index);
// Return the index of the match.
- Node* const index = LoadMatchInfoField(a, match_indices,
- RegExpMatchInfo::kFirstCaptureIndex);
+ Node* const index = a->LoadFixedArrayElement(
+ match_indices, RegExpMatchInfo::kFirstCaptureIndex);
a->Return(index);
}
@@ -1763,8 +1753,8 @@ void Generate_RegExpPrototypeSplitBody(CodeStubAssembler* a, Node* const regexp,
a->Bind(&next);
}
- Node* const match_from = LoadMatchInfoField(
- a, match_indices, RegExpMatchInfo::kFirstCaptureIndex);
+ Node* const match_from = a->LoadFixedArrayElement(
+ match_indices, RegExpMatchInfo::kFirstCaptureIndex);
// We're done if the match starts beyond the string.
{
@@ -1774,8 +1764,8 @@ void Generate_RegExpPrototypeSplitBody(CodeStubAssembler* a, Node* const regexp,
a->Bind(&next);
}
- Node* const match_to = LoadMatchInfoField(
- a, match_indices, RegExpMatchInfo::kFirstCaptureIndex + 1);
+ Node* const match_to = a->LoadFixedArrayElement(
+ match_indices, RegExpMatchInfo::kFirstCaptureIndex + 1);
// Advance index and continue if the match is empty.
{
@@ -1806,8 +1796,8 @@ void Generate_RegExpPrototypeSplitBody(CodeStubAssembler* a, Node* const regexp,
// Add all captures to the array.
{
- Node* const num_registers = LoadMatchInfoField(
- a, match_indices, RegExpMatchInfo::kNumberOfCapturesIndex);
+ Node* const num_registers = a->LoadFixedArrayElement(
+ match_indices, RegExpMatchInfo::kNumberOfCapturesIndex);
Node* const int_num_registers = a->SmiUntag(num_registers);
CVariable var_reg(a, MachineType::PointerRepresentation());
@@ -2025,8 +2015,8 @@ Node* ReplaceGlobalCallableFastPath(CodeStubAssembler* a, Node* context,
Node* const res_elems = a->LoadElements(res);
CSA_ASSERT(a, a->HasInstanceType(res_elems, FIXED_ARRAY_TYPE));
- Node* const num_capture_registers = LoadMatchInfoField(
- a, last_match_info, RegExpMatchInfo::kNumberOfCapturesIndex);
+ Node* const num_capture_registers = a->LoadFixedArrayElement(
+ last_match_info, RegExpMatchInfo::kNumberOfCapturesIndex);
CLabel if_hasexplicitcaptures(a), if_noexplicitcaptures(a), create_result(a);
a->Branch(a->SmiEqual(num_capture_registers, a->SmiConstant(Smi::FromInt(2))),
@@ -2241,10 +2231,10 @@ Node* ReplaceSimpleStringFastPath(CodeStubAssembler* a, Node* context,
a->Bind(&if_matched);
{
Node* const subject_start = smi_zero;
- Node* const match_start = LoadMatchInfoField(
- a, match_indices, RegExpMatchInfo::kFirstCaptureIndex);
- Node* const match_end = LoadMatchInfoField(
- a, match_indices, RegExpMatchInfo::kFirstCaptureIndex + 1);
+ Node* const match_start = a->LoadFixedArrayElement(
+ match_indices, RegExpMatchInfo::kFirstCaptureIndex);
+ Node* const match_end = a->LoadFixedArrayElement(
+ match_indices, RegExpMatchInfo::kFirstCaptureIndex + 1);
Node* const subject_end = a->LoadStringLength(subject_string);
CLabel if_replaceisempty(a), if_replaceisnotempty(a);
« no previous file with comments | « src/builtins/builtins-array.cc ('k') | src/builtins/builtins-string.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698