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

Side by Side Diff: src/hydrogen.cc

Issue 527093002: Make concrete classes for individual call descriptors. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: REBASE. Created 6 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/hydrogen.h" 5 #include "src/hydrogen.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "src/v8.h" 9 #include "src/v8.h"
10 10
(...skipping 7376 matching lines...) Expand 10 before | Expand all | Expand 10 after
7387 HInstruction* HOptimizedGraphBuilder::NewPlainFunctionCall( 7387 HInstruction* HOptimizedGraphBuilder::NewPlainFunctionCall(
7388 HValue* fun, int argument_count, bool pass_argument_count) { 7388 HValue* fun, int argument_count, bool pass_argument_count) {
7389 return New<HCallJSFunction>( 7389 return New<HCallJSFunction>(
7390 fun, argument_count, pass_argument_count); 7390 fun, argument_count, pass_argument_count);
7391 } 7391 }
7392 7392
7393 7393
7394 HInstruction* HOptimizedGraphBuilder::NewArgumentAdaptorCall( 7394 HInstruction* HOptimizedGraphBuilder::NewArgumentAdaptorCall(
7395 HValue* fun, HValue* context, 7395 HValue* fun, HValue* context,
7396 int argument_count, HValue* expected_param_count) { 7396 int argument_count, HValue* expected_param_count) {
7397 CallInterfaceDescriptor* descriptor = 7397 ArgumentAdaptorDescriptor descriptor(isolate());
7398 isolate()->call_descriptor(CallDescriptorKey::ArgumentAdaptorCall);
7399
7400 HValue* arity = Add<HConstant>(argument_count - 1); 7398 HValue* arity = Add<HConstant>(argument_count - 1);
7401 7399
7402 HValue* op_vals[] = { context, fun, arity, expected_param_count }; 7400 HValue* op_vals[] = { context, fun, arity, expected_param_count };
7403 7401
7404 Handle<Code> adaptor = 7402 Handle<Code> adaptor =
7405 isolate()->builtins()->ArgumentsAdaptorTrampoline(); 7403 isolate()->builtins()->ArgumentsAdaptorTrampoline();
7406 HConstant* adaptor_value = Add<HConstant>(adaptor); 7404 HConstant* adaptor_value = Add<HConstant>(adaptor);
7407 7405
7408 return New<HCallWithDescriptor>( 7406 return New<HCallWithDescriptor>(
7409 adaptor_value, argument_count, descriptor, 7407 adaptor_value, argument_count, descriptor,
7410 Vector<HValue*>(op_vals, descriptor->GetEnvironmentLength())); 7408 Vector<HValue*>(op_vals, descriptor.GetEnvironmentLength()));
7411 } 7409 }
7412 7410
7413 7411
7414 HInstruction* HOptimizedGraphBuilder::BuildCallConstantFunction( 7412 HInstruction* HOptimizedGraphBuilder::BuildCallConstantFunction(
7415 Handle<JSFunction> jsfun, int argument_count) { 7413 Handle<JSFunction> jsfun, int argument_count) {
7416 HValue* target = Add<HConstant>(jsfun); 7414 HValue* target = Add<HConstant>(jsfun);
7417 // For constant functions, we try to avoid calling the 7415 // For constant functions, we try to avoid calling the
7418 // argument adaptor and instead call the function directly 7416 // argument adaptor and instead call the function directly
7419 int formal_parameter_count = jsfun->shared()->formal_parameter_count(); 7417 int formal_parameter_count = jsfun->shared()->formal_parameter_count();
7420 bool dont_adapt_arguments = 7418 bool dont_adapt_arguments =
(...skipping 1216 matching lines...) Expand 10 before | Expand all | Expand 10 after
8637 HValue* api_function_address = Add<HConstant>(ExternalReference(ref)); 8635 HValue* api_function_address = Add<HConstant>(ExternalReference(ref));
8638 8636
8639 HValue* op_vals[] = { 8637 HValue* op_vals[] = {
8640 context(), 8638 context(),
8641 Add<HConstant>(function), 8639 Add<HConstant>(function),
8642 call_data, 8640 call_data,
8643 holder, 8641 holder,
8644 api_function_address 8642 api_function_address
8645 }; 8643 };
8646 8644
8647 CallInterfaceDescriptor* descriptor = 8645 ApiFunctionDescriptor descriptor(isolate());
8648 isolate()->call_descriptor(CallDescriptorKey::ApiFunctionCall);
8649
8650 CallApiFunctionStub stub(isolate(), is_store, call_data_is_undefined, argc); 8646 CallApiFunctionStub stub(isolate(), is_store, call_data_is_undefined, argc);
8651 Handle<Code> code = stub.GetCode(); 8647 Handle<Code> code = stub.GetCode();
8652 HConstant* code_value = Add<HConstant>(code); 8648 HConstant* code_value = Add<HConstant>(code);
8653 8649
8654 DCHECK((sizeof(op_vals) / kPointerSize) == 8650 DCHECK((sizeof(op_vals) / kPointerSize) == descriptor.GetEnvironmentLength());
8655 descriptor->GetEnvironmentLength());
8656 8651
8657 HInstruction* call = New<HCallWithDescriptor>( 8652 HInstruction* call = New<HCallWithDescriptor>(
8658 code_value, argc + 1, descriptor, 8653 code_value, argc + 1, descriptor,
8659 Vector<HValue*>(op_vals, descriptor->GetEnvironmentLength())); 8654 Vector<HValue*>(op_vals, descriptor.GetEnvironmentLength()));
8660 8655
8661 if (drop_extra) Drop(1); // Drop function. 8656 if (drop_extra) Drop(1); // Drop function.
8662 ast_context()->ReturnInstruction(call, ast_id); 8657 ast_context()->ReturnInstruction(call, ast_id);
8663 return true; 8658 return true;
8664 } 8659 }
8665 8660
8666 8661
8667 bool HOptimizedGraphBuilder::TryCallApply(Call* expr) { 8662 bool HOptimizedGraphBuilder::TryCallApply(Call* expr) {
8668 DCHECK(expr->expression()->IsProperty()); 8663 DCHECK(expr->expression()->IsProperty());
8669 8664
(...skipping 3819 matching lines...) Expand 10 before | Expand all | Expand 10 after
12489 if (ShouldProduceTraceOutput()) { 12484 if (ShouldProduceTraceOutput()) {
12490 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 12485 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
12491 } 12486 }
12492 12487
12493 #ifdef DEBUG 12488 #ifdef DEBUG
12494 graph_->Verify(false); // No full verify. 12489 graph_->Verify(false); // No full verify.
12495 #endif 12490 #endif
12496 } 12491 }
12497 12492
12498 } } // namespace v8::internal 12493 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698