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

Unified Diff: src/code-stubs.cc

Issue 2407813002: [stubs] Port StringAddStub to TF (Closed)
Patch Set: Remove stray change 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
Index: src/code-stubs.cc
diff --git a/src/code-stubs.cc b/src/code-stubs.cc
index e262d1592aa1efc3bf3454c28a5b13029f64e8b1..52bd498a7bff4c60817e78123118be3ee34e7f50 100644
--- a/src/code-stubs.cc
+++ b/src/code-stubs.cc
@@ -345,6 +345,35 @@ void StringAddStub::PrintBaseName(std::ostream& os) const { // NOLINT
os << "StringAddStub_" << flags() << "_" << pretenure_flag();
}
+void StringAddStub::GenerateAssembly(CodeStubAssembler* assembler) const {
+ typedef compiler::Node Node;
+ Node* left = assembler->Parameter(Descriptor::kLeft);
+ Node* right = assembler->Parameter(Descriptor::kRight);
+ Node* context = assembler->Parameter(Descriptor::kContext);
+
+ if ((flags() & STRING_ADD_CHECK_LEFT) != 0) {
+ DCHECK((flags() & STRING_ADD_CONVERT) != 0);
+ left = assembler->ToString(context,
+ assembler->JSReceiverToPrimitive(context, left));
Igor Sheludko 2016/10/13 15:41:33 Note: we could generate a better code here if we c
danno 2016/10/17 14:23:26 Yes, but it somewhat breaks the abstraction of hav
+ }
+ if ((flags() & STRING_ADD_CHECK_RIGHT) != 0) {
+ DCHECK((flags() & STRING_ADD_CONVERT) != 0);
+ right = assembler->ToString(
+ context, assembler->JSReceiverToPrimitive(context, right));
+ }
+
+ if ((flags() & STRING_ADD_CHECK_BOTH) == 0) {
+ CodeStubAssembler::AllocationFlag flags =
+ (pretenure_flag() == TENURED) ? CodeStubAssembler::kPretenured
+ : CodeStubAssembler::kNone;
+ assembler->Return(assembler->StringAdd(context, left, right, flags));
+ } else {
+ StringAddStub stub(isolate(), STRING_ADD_CHECK_NONE, pretenure_flag());
+ StringAddDescriptor descriptor(isolate());
+ assembler->TailCallStub(descriptor, assembler->HeapConstant(stub.GetCode()),
Igor Sheludko 2016/10/13 15:41:33 I think Callable callable = CodeFactory::StringA
danno 2016/10/17 14:23:26 Done.
+ context, left, right);
+ }
+}
InlineCacheState CompareICStub::GetICState() const {
CompareICState::State state = Max(left(), right());
@@ -2163,13 +2192,6 @@ void BinaryOpWithAllocationSiteStub::InitializeDescriptor(
FUNCTION_ADDR(Runtime_BinaryOpIC_MissWithAllocationSite));
}
-
-void StringAddStub::InitializeDescriptor(CodeStubDescriptor* descriptor) {
- descriptor->Initialize(Runtime::FunctionForId(Runtime::kStringAdd)->entry);
- descriptor->SetMissHandler(Runtime::kStringAdd);
-}
-
-
void GetPropertyStub::GenerateAssembly(CodeStubAssembler* assembler) const {
typedef compiler::Node Node;
typedef CodeStubAssembler::Label Label;
« src/code-stub-assembler.cc ('K') | « src/code-stubs.h ('k') | src/code-stubs-hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698