| Index: src/crankshaft/hydrogen.cc
|
| diff --git a/src/crankshaft/hydrogen.cc b/src/crankshaft/hydrogen.cc
|
| index a4b45d9646563a57bfe31e0c6c6fc1298f73a87a..b93db2478e0af3db40d2cf1374040006b1dd1abd 100644
|
| --- a/src/crankshaft/hydrogen.cc
|
| +++ b/src/crankshaft/hydrogen.cc
|
| @@ -3492,8 +3492,8 @@ HGraph::HGraph(CompilationInfo* info, CallInterfaceDescriptor descriptor)
|
| inlined_function_infos_(info->zone()) {
|
| if (info->IsStub()) {
|
| // For stubs, explicitly add the context to the environment.
|
| - start_environment_ = new (zone_)
|
| - HEnvironment(zone_, descriptor.GetRegisterParameterCount() + 1);
|
| + start_environment_ =
|
| + new (zone_) HEnvironment(zone_, descriptor.GetParameterCount() + 1);
|
| } else {
|
| start_environment_ =
|
| new(zone_) HEnvironment(NULL, info->scope(), info->closure(), zone_);
|
| @@ -9230,7 +9230,7 @@ bool HOptimizedGraphBuilder::TryInlineApiCall(
|
| HValue* api_function_address = Add<HConstant>(ExternalReference(ref));
|
|
|
| HValue* op_vals[] = {context(), Add<HConstant>(function), call_data, holder,
|
| - api_function_address, nullptr};
|
| + api_function_address};
|
|
|
| HInstruction* call = nullptr;
|
| CHECK(argc <= CallApiCallbackStub::kArgMax);
|
| @@ -9241,16 +9241,14 @@ bool HOptimizedGraphBuilder::TryInlineApiCall(
|
| HConstant* code_value = Add<HConstant>(code);
|
| call = New<HCallWithDescriptor>(
|
| code_value, argc + 1, stub.GetCallInterfaceDescriptor(),
|
| - Vector<HValue*>(op_vals, arraysize(op_vals) - 1),
|
| - syntactic_tail_call_mode);
|
| + Vector<HValue*>(op_vals, arraysize(op_vals)), syntactic_tail_call_mode);
|
| } else {
|
| CallApiCallbackStub stub(isolate(), argc, call_data_undefined, false);
|
| Handle<Code> code = stub.GetCode();
|
| HConstant* code_value = Add<HConstant>(code);
|
| call = New<HCallWithDescriptor>(
|
| code_value, argc + 1, stub.GetCallInterfaceDescriptor(),
|
| - Vector<HValue*>(op_vals, arraysize(op_vals) - 1),
|
| - syntactic_tail_call_mode);
|
| + Vector<HValue*>(op_vals, arraysize(op_vals)), syntactic_tail_call_mode);
|
| Drop(1); // Drop function.
|
| }
|
|
|
| @@ -12318,13 +12316,14 @@ void HOptimizedGraphBuilder::GenerateStringCharFromCode(CallRuntime* call) {
|
| void HOptimizedGraphBuilder::GenerateSubString(CallRuntime* call) {
|
| DCHECK_EQ(3, call->arguments()->length());
|
| CHECK_ALIVE(VisitExpressions(call->arguments()));
|
| - PushArgumentsFromEnvironment(call->arguments()->length());
|
| Callable callable = CodeFactory::SubString(isolate());
|
| HValue* stub = Add<HConstant>(callable.code());
|
| - HValue* values[] = {context()};
|
| - HInstruction* result =
|
| - New<HCallWithDescriptor>(stub, call->arguments()->length(),
|
| - callable.descriptor(), ArrayVector(values));
|
| + HValue* to = Pop();
|
| + HValue* from = Pop();
|
| + HValue* string = Pop();
|
| + HValue* values[] = {context(), string, from, to};
|
| + HInstruction* result = New<HCallWithDescriptor>(
|
| + stub, 0, callable.descriptor(), ArrayVector(values));
|
| result->set_type(HType::String());
|
| return ast_context()->ReturnInstruction(result, call->id());
|
| }
|
| @@ -12346,13 +12345,16 @@ void HOptimizedGraphBuilder::GenerateNewObject(CallRuntime* call) {
|
| void HOptimizedGraphBuilder::GenerateRegExpExec(CallRuntime* call) {
|
| DCHECK_EQ(4, call->arguments()->length());
|
| CHECK_ALIVE(VisitExpressions(call->arguments()));
|
| - PushArgumentsFromEnvironment(call->arguments()->length());
|
| Callable callable = CodeFactory::RegExpExec(isolate());
|
| + HValue* last_match_info = Pop();
|
| + HValue* index = Pop();
|
| + HValue* subject = Pop();
|
| + HValue* regexp_object = Pop();
|
| HValue* stub = Add<HConstant>(callable.code());
|
| - HValue* values[] = {context()};
|
| - HInstruction* result =
|
| - New<HCallWithDescriptor>(stub, call->arguments()->length(),
|
| - callable.descriptor(), ArrayVector(values));
|
| + HValue* values[] = {context(), regexp_object, subject, index,
|
| + last_match_info};
|
| + HInstruction* result = New<HCallWithDescriptor>(
|
| + stub, 0, callable.descriptor(), ArrayVector(values));
|
| return ast_context()->ReturnInstruction(result, call->id());
|
| }
|
|
|
|
|