Index: src/x64/full-codegen-x64.cc |
diff --git a/src/x64/full-codegen-x64.cc b/src/x64/full-codegen-x64.cc |
index cc0d3d9f373dd9f100bbfa824b7fe1448066c4dd..5a343bed1eb04ddf85aa38d0fcf1293241673b4b 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); |
} |