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

Side by Side Diff: src/full-codegen/x64/full-codegen-x64.cc

Issue 1412153002: [fullcode] Make intrinsic-to-stub-call handling platform independent. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Comment tweaks Created 5 years, 2 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
« no previous file with comments | « src/full-codegen/ppc/full-codegen-ppc.cc ('k') | src/full-codegen/x87/full-codegen-x87.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 #if V8_TARGET_ARCH_X64 5 #if V8_TARGET_ARCH_X64
6 6
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/codegen.h" 9 #include "src/codegen.h"
10 #include "src/debug/debug.h" 10 #include "src/debug/debug.h"
(...skipping 3660 matching lines...) Expand 10 before | Expand all | Expand 10 after
3671 // Convert the object to an integer. 3671 // Convert the object to an integer.
3672 Label done_convert; 3672 Label done_convert;
3673 __ JumpIfSmi(rax, &done_convert, Label::kNear); 3673 __ JumpIfSmi(rax, &done_convert, Label::kNear);
3674 __ Push(rax); 3674 __ Push(rax);
3675 __ CallRuntime(Runtime::kToInteger, 1); 3675 __ CallRuntime(Runtime::kToInteger, 1);
3676 __ bind(&done_convert); 3676 __ bind(&done_convert);
3677 context()->Plug(rax); 3677 context()->Plug(rax);
3678 } 3678 }
3679 3679
3680 3680
3681 void FullCodeGenerator::EmitNumberToString(CallRuntime* expr) {
3682 ZoneList<Expression*>* args = expr->arguments();
3683 DCHECK_EQ(args->length(), 1);
3684
3685 // Load the argument into rax and call the stub.
3686 VisitForAccumulatorValue(args->at(0));
3687
3688 NumberToStringStub stub(isolate());
3689 __ CallStub(&stub);
3690 context()->Plug(rax);
3691 }
3692
3693
3694 void FullCodeGenerator::EmitToString(CallRuntime* expr) {
3695 ZoneList<Expression*>* args = expr->arguments();
3696 DCHECK_EQ(1, args->length());
3697
3698 // Load the argument into rax and convert it.
3699 VisitForAccumulatorValue(args->at(0));
3700
3701 ToStringStub stub(isolate());
3702 __ CallStub(&stub);
3703 context()->Plug(rax);
3704 }
3705
3706
3707 void FullCodeGenerator::EmitToLength(CallRuntime* expr) {
3708 ZoneList<Expression*>* args = expr->arguments();
3709 DCHECK_EQ(1, args->length());
3710
3711 // Load the argument into rax and convert it.
3712 VisitForAccumulatorValue(args->at(0));
3713
3714 ToLengthStub stub(isolate());
3715 __ CallStub(&stub);
3716 context()->Plug(rax);
3717 }
3718
3719
3720 void FullCodeGenerator::EmitToNumber(CallRuntime* expr) {
3721 ZoneList<Expression*>* args = expr->arguments();
3722 DCHECK_EQ(1, args->length());
3723
3724 // Load the argument into rax and convert it.
3725 VisitForAccumulatorValue(args->at(0));
3726
3727 ToNumberStub stub(isolate());
3728 __ CallStub(&stub);
3729 context()->Plug(rax);
3730 }
3731
3732
3733 void FullCodeGenerator::EmitToName(CallRuntime* expr) { 3681 void FullCodeGenerator::EmitToName(CallRuntime* expr) {
3734 ZoneList<Expression*>* args = expr->arguments(); 3682 ZoneList<Expression*>* args = expr->arguments();
3735 DCHECK_EQ(1, args->length()); 3683 DCHECK_EQ(1, args->length());
3736 3684
3737 // Load the argument into rax and convert it. 3685 // Load the argument into rax and convert it.
3738 VisitForAccumulatorValue(args->at(0)); 3686 VisitForAccumulatorValue(args->at(0));
3739 3687
3740 // Convert the object to a name. 3688 // Convert the object to a name.
3741 Label convert, done_convert; 3689 Label convert, done_convert;
3742 __ JumpIfSmi(rax, &convert, Label::kNear); 3690 __ JumpIfSmi(rax, &convert, Label::kNear);
3743 STATIC_ASSERT(FIRST_NAME_TYPE == FIRST_TYPE); 3691 STATIC_ASSERT(FIRST_NAME_TYPE == FIRST_TYPE);
3744 __ CmpObjectType(rax, LAST_NAME_TYPE, rcx); 3692 __ CmpObjectType(rax, LAST_NAME_TYPE, rcx);
3745 __ j(below_equal, &done_convert, Label::kNear); 3693 __ j(below_equal, &done_convert, Label::kNear);
3746 __ bind(&convert); 3694 __ bind(&convert);
3747 __ Push(rax); 3695 __ Push(rax);
3748 __ CallRuntime(Runtime::kToName, 1); 3696 __ CallRuntime(Runtime::kToName, 1);
3749 __ bind(&done_convert); 3697 __ bind(&done_convert);
3750 context()->Plug(rax); 3698 context()->Plug(rax);
3751 } 3699 }
3752 3700
3753 3701
3754 void FullCodeGenerator::EmitToObject(CallRuntime* expr) {
3755 ZoneList<Expression*>* args = expr->arguments();
3756 DCHECK_EQ(1, args->length());
3757
3758 // Load the argument into rax and convert it.
3759 VisitForAccumulatorValue(args->at(0));
3760
3761 ToObjectStub stub(isolate());
3762 __ CallStub(&stub);
3763 context()->Plug(rax);
3764 }
3765
3766
3767 void FullCodeGenerator::EmitStringCharFromCode(CallRuntime* expr) { 3702 void FullCodeGenerator::EmitStringCharFromCode(CallRuntime* expr) {
3768 ZoneList<Expression*>* args = expr->arguments(); 3703 ZoneList<Expression*>* args = expr->arguments();
3769 DCHECK(args->length() == 1); 3704 DCHECK(args->length() == 1);
3770 3705
3771 VisitForAccumulatorValue(args->at(0)); 3706 VisitForAccumulatorValue(args->at(0));
3772 3707
3773 Label done; 3708 Label done;
3774 StringCharFromCodeGenerator generator(rax, rbx); 3709 StringCharFromCodeGenerator generator(rax, rbx);
3775 generator.GenerateFast(masm_); 3710 generator.GenerateFast(masm_);
3776 __ jmp(&done); 3711 __ jmp(&done);
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
3982 __ movp(rdi, Operand(rsp, rax, times_pointer_size, 0 * kPointerSize)); 3917 __ movp(rdi, Operand(rsp, rax, times_pointer_size, 0 * kPointerSize));
3983 __ Call(isolate()->builtins()->Construct(), RelocInfo::CONSTRUCT_CALL); 3918 __ Call(isolate()->builtins()->Construct(), RelocInfo::CONSTRUCT_CALL);
3984 3919
3985 // Restore context register. 3920 // Restore context register.
3986 __ movp(rsi, Operand(rbp, StandardFrameConstants::kContextOffset)); 3921 __ movp(rsi, Operand(rbp, StandardFrameConstants::kContextOffset));
3987 3922
3988 context()->DropAndPlug(1, rax); 3923 context()->DropAndPlug(1, rax);
3989 } 3924 }
3990 3925
3991 3926
3992 void FullCodeGenerator::EmitRegExpConstructResult(CallRuntime* expr) {
3993 RegExpConstructResultStub stub(isolate());
3994 ZoneList<Expression*>* args = expr->arguments();
3995 DCHECK(args->length() == 3);
3996 VisitForStackValue(args->at(0));
3997 VisitForStackValue(args->at(1));
3998 VisitForAccumulatorValue(args->at(2));
3999 __ Pop(rbx);
4000 __ Pop(rcx);
4001 __ CallStub(&stub);
4002 context()->Plug(rax);
4003 }
4004
4005
4006 void FullCodeGenerator::EmitHasCachedArrayIndex(CallRuntime* expr) { 3927 void FullCodeGenerator::EmitHasCachedArrayIndex(CallRuntime* expr) {
4007 ZoneList<Expression*>* args = expr->arguments(); 3928 ZoneList<Expression*>* args = expr->arguments();
4008 DCHECK(args->length() == 1); 3929 DCHECK(args->length() == 1);
4009 3930
4010 VisitForAccumulatorValue(args->at(0)); 3931 VisitForAccumulatorValue(args->at(0));
4011 3932
4012 Label materialize_true, materialize_false; 3933 Label materialize_true, materialize_false;
4013 Label* if_true = NULL; 3934 Label* if_true = NULL;
4014 Label* if_false = NULL; 3935 Label* if_false = NULL;
4015 Label* fall_through = NULL; 3936 Label* fall_through = NULL;
(...skipping 1174 matching lines...) Expand 10 before | Expand all | Expand 10 after
5190 Assembler::target_address_at(call_target_address, 5111 Assembler::target_address_at(call_target_address,
5191 unoptimized_code)); 5112 unoptimized_code));
5192 return OSR_AFTER_STACK_CHECK; 5113 return OSR_AFTER_STACK_CHECK;
5193 } 5114 }
5194 5115
5195 5116
5196 } // namespace internal 5117 } // namespace internal
5197 } // namespace v8 5118 } // namespace v8
5198 5119
5199 #endif // V8_TARGET_ARCH_X64 5120 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/full-codegen/ppc/full-codegen-ppc.cc ('k') | src/full-codegen/x87/full-codegen-x87.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698