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

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

Issue 892383003: emit premonomorphic ics for loads/stores in optimized code (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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
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 #include "src/arm64/lithium-codegen-arm64.h" 7 #include "src/arm64/lithium-codegen-arm64.h"
8 #include "src/arm64/lithium-gap-resolver-arm64.h" 8 #include "src/arm64/lithium-gap-resolver-arm64.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 3422 matching lines...) Expand 10 before | Expand all | Expand 10 after
3433 void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) { 3433 void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) {
3434 DCHECK(ToRegister(instr->context()).is(cp)); 3434 DCHECK(ToRegister(instr->context()).is(cp));
3435 DCHECK(ToRegister(instr->global_object()) 3435 DCHECK(ToRegister(instr->global_object())
3436 .is(LoadDescriptor::ReceiverRegister())); 3436 .is(LoadDescriptor::ReceiverRegister()));
3437 DCHECK(ToRegister(instr->result()).Is(x0)); 3437 DCHECK(ToRegister(instr->result()).Is(x0));
3438 __ Mov(LoadDescriptor::NameRegister(), Operand(instr->name())); 3438 __ Mov(LoadDescriptor::NameRegister(), Operand(instr->name()));
3439 if (FLAG_vector_ics) { 3439 if (FLAG_vector_ics) {
3440 EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr); 3440 EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr);
3441 } 3441 }
3442 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL; 3442 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL;
3443 Handle<Code> ic = CodeFactory::LoadICInOptimizedCode(isolate(), mode).code(); 3443 Handle<Code> ic =
3444 CodeFactory::LoadICInOptimizedCode(isolate(), mode, UNINITIALIZED).code();
3444 CallCode(ic, RelocInfo::CODE_TARGET, instr); 3445 CallCode(ic, RelocInfo::CODE_TARGET, instr);
3445 } 3446 }
3446 3447
3447 3448
3448 MemOperand LCodeGen::PrepareKeyedExternalArrayOperand( 3449 MemOperand LCodeGen::PrepareKeyedExternalArrayOperand(
3449 Register key, 3450 Register key,
3450 Register base, 3451 Register base,
3451 Register scratch, 3452 Register scratch,
3452 bool key_is_smi, 3453 bool key_is_smi,
3453 bool key_is_constant, 3454 bool key_is_constant,
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
3742 3743
3743 void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) { 3744 void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) {
3744 DCHECK(ToRegister(instr->context()).is(cp)); 3745 DCHECK(ToRegister(instr->context()).is(cp));
3745 // LoadIC expects name and receiver in registers. 3746 // LoadIC expects name and receiver in registers.
3746 DCHECK(ToRegister(instr->object()).is(LoadDescriptor::ReceiverRegister())); 3747 DCHECK(ToRegister(instr->object()).is(LoadDescriptor::ReceiverRegister()));
3747 __ Mov(LoadDescriptor::NameRegister(), Operand(instr->name())); 3748 __ Mov(LoadDescriptor::NameRegister(), Operand(instr->name()));
3748 if (FLAG_vector_ics) { 3749 if (FLAG_vector_ics) {
3749 EmitVectorLoadICRegisters<LLoadNamedGeneric>(instr); 3750 EmitVectorLoadICRegisters<LLoadNamedGeneric>(instr);
3750 } 3751 }
3751 3752
3752 Handle<Code> ic = 3753 Handle<Code> ic = CodeFactory::LoadICInOptimizedCode(
3753 CodeFactory::LoadICInOptimizedCode(isolate(), NOT_CONTEXTUAL).code(); 3754 isolate(), NOT_CONTEXTUAL,
3755 instr->hydrogen()->initialization_state()).code();
3754 CallCode(ic, RelocInfo::CODE_TARGET, instr); 3756 CallCode(ic, RelocInfo::CODE_TARGET, instr);
3755 3757
3756 DCHECK(ToRegister(instr->result()).is(x0)); 3758 DCHECK(ToRegister(instr->result()).is(x0));
3757 } 3759 }
3758 3760
3759 3761
3760 void LCodeGen::DoLoadRoot(LLoadRoot* instr) { 3762 void LCodeGen::DoLoadRoot(LLoadRoot* instr) {
3761 Register result = ToRegister(instr->result()); 3763 Register result = ToRegister(instr->result());
3762 __ LoadRoot(result, instr->index()); 3764 __ LoadRoot(result, instr->index());
3763 } 3765 }
(...skipping 1720 matching lines...) Expand 10 before | Expand all | Expand 10 after
5484 } 5486 }
5485 } 5487 }
5486 5488
5487 5489
5488 void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) { 5490 void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) {
5489 DCHECK(ToRegister(instr->context()).is(cp)); 5491 DCHECK(ToRegister(instr->context()).is(cp));
5490 DCHECK(ToRegister(instr->object()).is(StoreDescriptor::ReceiverRegister())); 5492 DCHECK(ToRegister(instr->object()).is(StoreDescriptor::ReceiverRegister()));
5491 DCHECK(ToRegister(instr->value()).is(StoreDescriptor::ValueRegister())); 5493 DCHECK(ToRegister(instr->value()).is(StoreDescriptor::ValueRegister()));
5492 5494
5493 __ Mov(StoreDescriptor::NameRegister(), Operand(instr->name())); 5495 __ Mov(StoreDescriptor::NameRegister(), Operand(instr->name()));
5494 Handle<Code> ic = StoreIC::initialize_stub(isolate(), instr->language_mode()); 5496 Handle<Code> ic =
5497 StoreIC::initialize_stub(isolate(), instr->language_mode(),
5498 instr->hydrogen()->initialization_state());
5495 CallCode(ic, RelocInfo::CODE_TARGET, instr); 5499 CallCode(ic, RelocInfo::CODE_TARGET, instr);
5496 } 5500 }
5497 5501
5498 5502
5499 void LCodeGen::DoStringAdd(LStringAdd* instr) { 5503 void LCodeGen::DoStringAdd(LStringAdd* instr) {
5500 DCHECK(ToRegister(instr->context()).is(cp)); 5504 DCHECK(ToRegister(instr->context()).is(cp));
5501 DCHECK(ToRegister(instr->left()).Is(x1)); 5505 DCHECK(ToRegister(instr->left()).Is(x1));
5502 DCHECK(ToRegister(instr->right()).Is(x0)); 5506 DCHECK(ToRegister(instr->right()).Is(x0));
5503 StringAddStub stub(isolate(), 5507 StringAddStub stub(isolate(),
5504 instr->hydrogen()->flags(), 5508 instr->hydrogen()->flags(),
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after
6096 Handle<ScopeInfo> scope_info = instr->scope_info(); 6100 Handle<ScopeInfo> scope_info = instr->scope_info();
6097 __ Push(scope_info); 6101 __ Push(scope_info);
6098 __ Push(ToRegister(instr->function())); 6102 __ Push(ToRegister(instr->function()));
6099 CallRuntime(Runtime::kPushBlockContext, 2, instr); 6103 CallRuntime(Runtime::kPushBlockContext, 2, instr);
6100 RecordSafepoint(Safepoint::kNoLazyDeopt); 6104 RecordSafepoint(Safepoint::kNoLazyDeopt);
6101 } 6105 }
6102 6106
6103 6107
6104 6108
6105 } } // namespace v8::internal 6109 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/arm/lithium-codegen-arm.cc ('k') | src/code-factory.h » ('j') | src/hydrogen.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698