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

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

Issue 398053002: Introduce FLAG_vector_ics. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: REBASE. Created 6 years, 5 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
« no previous file with comments | « src/x64/ic-x64.cc ('k') | src/x64/lithium-x64.h » ('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 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/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_X64 7 #if V8_TARGET_ARCH_X64
8 8
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/hydrogen-osr.h" 10 #include "src/hydrogen-osr.h"
(...skipping 2835 matching lines...) Expand 10 before | Expand all | Expand 10 after
2846 } 2846 }
2847 } 2847 }
2848 2848
2849 2849
2850 void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) { 2850 void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) {
2851 ASSERT(ToRegister(instr->context()).is(rsi)); 2851 ASSERT(ToRegister(instr->context()).is(rsi));
2852 ASSERT(ToRegister(instr->global_object()).is(LoadIC::ReceiverRegister())); 2852 ASSERT(ToRegister(instr->global_object()).is(LoadIC::ReceiverRegister()));
2853 ASSERT(ToRegister(instr->result()).is(rax)); 2853 ASSERT(ToRegister(instr->result()).is(rax));
2854 2854
2855 __ Move(LoadIC::NameRegister(), instr->name()); 2855 __ Move(LoadIC::NameRegister(), instr->name());
2856 if (FLAG_vector_ics) {
2857 Register vector = ToRegister(instr->temp_vector());
2858 ASSERT(vector.is(LoadIC::VectorRegister()));
2859 __ Move(vector, instr->hydrogen()->feedback_vector());
2860 // No need to allocate this register.
2861 ASSERT(LoadIC::SlotRegister().is(rax));
2862 __ Move(LoadIC::SlotRegister(), Smi::FromInt(instr->hydrogen()->slot()));
2863 }
2856 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL; 2864 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL;
2857 Handle<Code> ic = LoadIC::initialize_stub(isolate(), mode); 2865 Handle<Code> ic = LoadIC::initialize_stub(isolate(), mode);
2858 CallCode(ic, RelocInfo::CODE_TARGET, instr); 2866 CallCode(ic, RelocInfo::CODE_TARGET, instr);
2859 } 2867 }
2860 2868
2861 2869
2862 void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) { 2870 void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) {
2863 Register value = ToRegister(instr->value()); 2871 Register value = ToRegister(instr->value());
2864 Handle<Cell> cell_handle = instr->hydrogen()->cell().handle(); 2872 Handle<Cell> cell_handle = instr->hydrogen()->cell().handle();
2865 2873
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
2986 __ Load(result, FieldOperand(object, offset), representation); 2994 __ Load(result, FieldOperand(object, offset), representation);
2987 } 2995 }
2988 2996
2989 2997
2990 void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) { 2998 void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) {
2991 ASSERT(ToRegister(instr->context()).is(rsi)); 2999 ASSERT(ToRegister(instr->context()).is(rsi));
2992 ASSERT(ToRegister(instr->object()).is(LoadIC::ReceiverRegister())); 3000 ASSERT(ToRegister(instr->object()).is(LoadIC::ReceiverRegister()));
2993 ASSERT(ToRegister(instr->result()).is(rax)); 3001 ASSERT(ToRegister(instr->result()).is(rax));
2994 3002
2995 __ Move(LoadIC::NameRegister(), instr->name()); 3003 __ Move(LoadIC::NameRegister(), instr->name());
3004 if (FLAG_vector_ics) {
3005 Register vector = ToRegister(instr->temp_vector());
3006 ASSERT(vector.is(LoadIC::VectorRegister()));
3007 __ Move(vector, instr->hydrogen()->feedback_vector());
3008 // No need to allocate this register.
3009 ASSERT(LoadIC::SlotRegister().is(rax));
3010 __ Move(LoadIC::SlotRegister(), Smi::FromInt(instr->hydrogen()->slot()));
3011 }
2996 Handle<Code> ic = LoadIC::initialize_stub(isolate(), NOT_CONTEXTUAL); 3012 Handle<Code> ic = LoadIC::initialize_stub(isolate(), NOT_CONTEXTUAL);
2997 CallCode(ic, RelocInfo::CODE_TARGET, instr); 3013 CallCode(ic, RelocInfo::CODE_TARGET, instr);
2998 } 3014 }
2999 3015
3000 3016
3001 void LCodeGen::DoLoadFunctionPrototype(LLoadFunctionPrototype* instr) { 3017 void LCodeGen::DoLoadFunctionPrototype(LLoadFunctionPrototype* instr) {
3002 Register function = ToRegister(instr->function()); 3018 Register function = ToRegister(instr->function());
3003 Register result = ToRegister(instr->result()); 3019 Register result = ToRegister(instr->result());
3004 3020
3005 // Check that the function really is a function. 3021 // Check that the function really is a function.
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
3282 offset); 3298 offset);
3283 } 3299 }
3284 } 3300 }
3285 3301
3286 3302
3287 void LCodeGen::DoLoadKeyedGeneric(LLoadKeyedGeneric* instr) { 3303 void LCodeGen::DoLoadKeyedGeneric(LLoadKeyedGeneric* instr) {
3288 ASSERT(ToRegister(instr->context()).is(rsi)); 3304 ASSERT(ToRegister(instr->context()).is(rsi));
3289 ASSERT(ToRegister(instr->object()).is(LoadIC::ReceiverRegister())); 3305 ASSERT(ToRegister(instr->object()).is(LoadIC::ReceiverRegister()));
3290 ASSERT(ToRegister(instr->key()).is(LoadIC::NameRegister())); 3306 ASSERT(ToRegister(instr->key()).is(LoadIC::NameRegister()));
3291 3307
3308 if (FLAG_vector_ics) {
3309 Register vector = ToRegister(instr->temp_vector());
3310 ASSERT(vector.is(LoadIC::VectorRegister()));
3311 __ Move(vector, instr->hydrogen()->feedback_vector());
3312 // No need to allocate this register.
3313 ASSERT(LoadIC::SlotRegister().is(rax));
3314 __ Move(LoadIC::SlotRegister(), Smi::FromInt(instr->hydrogen()->slot()));
3315 }
3316
3292 Handle<Code> ic = isolate()->builtins()->KeyedLoadIC_Initialize(); 3317 Handle<Code> ic = isolate()->builtins()->KeyedLoadIC_Initialize();
3293 CallCode(ic, RelocInfo::CODE_TARGET, instr); 3318 CallCode(ic, RelocInfo::CODE_TARGET, instr);
3294 } 3319 }
3295 3320
3296 3321
3297 void LCodeGen::DoArgumentsElements(LArgumentsElements* instr) { 3322 void LCodeGen::DoArgumentsElements(LArgumentsElements* instr) {
3298 Register result = ToRegister(instr->result()); 3323 Register result = ToRegister(instr->result());
3299 3324
3300 if (instr->hydrogen()->from_inlined()) { 3325 if (instr->hydrogen()->from_inlined()) {
3301 __ leap(result, Operand(rsp, -kFPOnStackSize + -kPCOnStackSize)); 3326 __ leap(result, Operand(rsp, -kFPOnStackSize + -kPCOnStackSize));
(...skipping 2533 matching lines...) Expand 10 before | Expand all | Expand 10 after
5835 CallRuntime(Runtime::kPushBlockContext, 2, instr); 5860 CallRuntime(Runtime::kPushBlockContext, 2, instr);
5836 RecordSafepoint(Safepoint::kNoLazyDeopt); 5861 RecordSafepoint(Safepoint::kNoLazyDeopt);
5837 } 5862 }
5838 5863
5839 5864
5840 #undef __ 5865 #undef __
5841 5866
5842 } } // namespace v8::internal 5867 } } // namespace v8::internal
5843 5868
5844 #endif // V8_TARGET_ARCH_X64 5869 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/x64/ic-x64.cc ('k') | src/x64/lithium-x64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698