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

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

Issue 2745053003: [regexp] Add slow exec stub to reduce code size (Closed)
Patch Set: Created 3 years, 9 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/builtins/builtins.h ('k') | src/interface-descriptors.h » ('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 969cb19751d7ade0fa968fca2fb10a4704bd2f04..c477ad33c27419068e46434b7391a890bc67913d 100644
--- a/src/builtins/builtins-regexp.cc
+++ b/src/builtins/builtins-regexp.cc
@@ -455,10 +455,12 @@ Node* RegExpBuiltinsAssembler::IrregexpExec(Node* const context,
Branch(IsTheHole(pending_exception), &stack_overflow, &rethrow);
Bind(&stack_overflow);
- TailCallRuntime(Runtime::kThrowStackOverflow, context);
+ CallRuntime(Runtime::kThrowStackOverflow, context);
+ Unreachable();
Bind(&rethrow);
- TailCallRuntime(Runtime::kRegExpExecReThrow, context);
+ CallRuntime(Runtime::kRegExpExecReThrow, context);
+ Unreachable();
}
Bind(&runtime);
@@ -736,6 +738,17 @@ void RegExpBuiltinsAssembler::BranchIfFastRegExpResult(Node* context, Node* map,
if_ismodified);
}
+// Slow path stub for RegExpPrototypeExec to decrease code size.
+TF_BUILTIN(RegExpPrototypeExecSlow, RegExpBuiltinsAssembler) {
+ typedef GenericTagged2Descriptor Descriptor;
+
+ Node* const regexp = Parameter(Descriptor::kFirst);
+ Node* const string = Parameter(Descriptor::kSecond);
+ Node* const context = Parameter(Descriptor::kContext);
+
+ Return(RegExpPrototypeExecBody(context, regexp, string, false));
+}
+
// ES#sec-regexp.prototype.exec
// RegExp.prototype.exec ( string )
TF_BUILTIN(RegExpPrototypeExec, RegExpBuiltinsAssembler) {
@@ -764,8 +777,11 @@ TF_BUILTIN(RegExpPrototypeExec, RegExpBuiltinsAssembler) {
Bind(&if_isslowpath);
{
- Node* const result =
- RegExpPrototypeExecBody(context, receiver, string, false);
+ Handle<Code> code = isolate()->builtins()->RegExpPrototypeExecSlow();
+ const auto desc = GenericTagged2Descriptor(isolate());
+ Callable callable(code, desc);
+
+ Node* const result = CallStub(callable, context, receiver, string);
Return(result);
}
}
@@ -1482,11 +1498,7 @@ Node* RegExpBuiltinsAssembler::RegExpExec(Node* context, Node* regexp,
BranchIfFastRegExp(context, map, &if_isfastpath, &if_isslowpath);
Igor Sheludko 2017/03/13 16:30:32 I guess it's better to skip this check and jump di
jgruber 2017/03/17 09:51:22 Done.
Bind(&if_isfastpath);
- {
- Node* const result = RegExpPrototypeExecBody(context, regexp, string, true);
- var_result.Bind(result);
- Goto(&out);
- }
+ Unreachable();
Bind(&if_isslowpath);
{
@@ -1525,8 +1537,11 @@ Node* RegExpBuiltinsAssembler::RegExpExec(Node* context, Node* regexp,
ThrowIfNotInstanceType(context, regexp, JS_REGEXP_TYPE,
"RegExp.prototype.exec");
- Node* const result =
- RegExpPrototypeExecBody(context, regexp, string, false);
+ Handle<Code> code = isolate->builtins()->RegExpPrototypeExecSlow();
+ const auto desc = GenericTagged2Descriptor(isolate);
+ Callable callable(code, desc);
+
+ Node* const result = CallStub(callable, context, regexp, string);
var_result.Bind(result);
Goto(&out);
}
« no previous file with comments | « src/builtins/builtins.h ('k') | src/interface-descriptors.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698