Index: src/arm/full-codegen-arm.cc |
diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc |
index 8fb1e15585bffc4bcf303f67834baeb49145ae48..28d818456d8fb18b5c3f51996b11b82c085d8b4d 100644 |
--- a/src/arm/full-codegen-arm.cc |
+++ b/src/arm/full-codegen-arm.cc |
@@ -3705,11 +3705,21 @@ void FullCodeGenerator::EmitStringCharAt(CallRuntime* expr) { |
void FullCodeGenerator::EmitStringAdd(CallRuntime* expr) { |
ZoneList<Expression*>* args = expr->arguments(); |
ASSERT_EQ(2, args->length()); |
- VisitForStackValue(args->at(0)); |
- VisitForStackValue(args->at(1)); |
- StringAddStub stub(STRING_ADD_CHECK_BOTH); |
- __ CallStub(&stub); |
+ if (FLAG_new_string_add) { |
+ VisitForStackValue(args->at(0)); |
+ VisitForAccumulatorValue(args->at(1)); |
+ |
+ __ pop(r1); |
+ 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(r0); |
} |