Index: src/x64/full-codegen-x64.cc |
diff --git a/src/x64/full-codegen-x64.cc b/src/x64/full-codegen-x64.cc |
index 468ed8c23f4e1af986c5266f4429eb12275770c7..df4840f4c0d37c627a527a1df5da29851403e911 100644 |
--- a/src/x64/full-codegen-x64.cc |
+++ b/src/x64/full-codegen-x64.cc |
@@ -3628,11 +3628,20 @@ void FullCodeGenerator::EmitStringAdd(CallRuntime* expr) { |
ZoneList<Expression*>* args = expr->arguments(); |
ASSERT_EQ(2, args->length()); |
- VisitForStackValue(args->at(0)); |
- VisitForStackValue(args->at(1)); |
+ if (FLAG_new_string_add) { |
+ VisitForStackValue(args->at(0)); |
+ VisitForAccumulatorValue(args->at(1)); |
- StringAddStub stub(STRING_ADD_CHECK_BOTH); |
- __ CallStub(&stub); |
+ __ pop(rdx); |
+ NewStringAddStub stub(STRING_ADD_CHECK_BOTH, NOT_TENURED); |
+ __ CallStub(&stub); |
+ } else { |
+ VisitForStackValue(args->at(0)); |
+ VisitForStackValue(args->at(1)); |
+ |
+ StringAddStub stub(STRING_ADD_CHECK_BOTH); |
+ __ CallStub(&stub); |
+ } |
context()->Plug(rax); |
} |