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/arm64/lithium-codegen-arm64.cc

Issue 1209903003: VectorICs: Lithium support for vector-based stores. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix and REBASE. Created 5 years, 6 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/arm64/lithium-codegen-arm64.h ('k') | src/code-factory.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 #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 3323 matching lines...) Expand 10 before | Expand all | Expand 10 after
3334 AllowDeferredHandleDereference vector_structure_check; 3334 AllowDeferredHandleDereference vector_structure_check;
3335 Handle<TypeFeedbackVector> vector = instr->hydrogen()->feedback_vector(); 3335 Handle<TypeFeedbackVector> vector = instr->hydrogen()->feedback_vector();
3336 __ Mov(vector_register, vector); 3336 __ Mov(vector_register, vector);
3337 // No need to allocate this register. 3337 // No need to allocate this register.
3338 FeedbackVectorICSlot slot = instr->hydrogen()->slot(); 3338 FeedbackVectorICSlot slot = instr->hydrogen()->slot();
3339 int index = vector->GetIndex(slot); 3339 int index = vector->GetIndex(slot);
3340 __ Mov(slot_register, Smi::FromInt(index)); 3340 __ Mov(slot_register, Smi::FromInt(index));
3341 } 3341 }
3342 3342
3343 3343
3344 template <class T>
3345 void LCodeGen::EmitVectorStoreICRegisters(T* instr) {
3346 Register vector_register = ToRegister(instr->temp_vector());
3347 Register slot_register = ToRegister(instr->temp_slot());
3348
3349 AllowDeferredHandleDereference vector_structure_check;
3350 Handle<TypeFeedbackVector> vector = instr->hydrogen()->feedback_vector();
3351 __ Mov(vector_register, vector);
3352 FeedbackVectorICSlot slot = instr->hydrogen()->slot();
3353 int index = vector->GetIndex(slot);
3354 __ Mov(slot_register, Smi::FromInt(index));
3355 }
3356
3357
3344 void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) { 3358 void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) {
3345 DCHECK(ToRegister(instr->context()).is(cp)); 3359 DCHECK(ToRegister(instr->context()).is(cp));
3346 DCHECK(ToRegister(instr->global_object()) 3360 DCHECK(ToRegister(instr->global_object())
3347 .is(LoadDescriptor::ReceiverRegister())); 3361 .is(LoadDescriptor::ReceiverRegister()));
3348 DCHECK(ToRegister(instr->result()).Is(x0)); 3362 DCHECK(ToRegister(instr->result()).Is(x0));
3349 __ Mov(LoadDescriptor::NameRegister(), Operand(instr->name())); 3363 __ Mov(LoadDescriptor::NameRegister(), Operand(instr->name()));
3350 EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr); 3364 EmitVectorLoadICRegisters<LLoadGlobalGeneric>(instr);
3351 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL; 3365 ContextualMode mode = instr->for_typeof() ? NOT_CONTEXTUAL : CONTEXTUAL;
3352 Handle<Code> ic = CodeFactory::LoadICInOptimizedCode(isolate(), mode, 3366 Handle<Code> ic = CodeFactory::LoadICInOptimizedCode(isolate(), mode,
3353 PREMONOMORPHIC).code(); 3367 PREMONOMORPHIC).code();
(...skipping 1918 matching lines...) Expand 10 before | Expand all | Expand 10 after
5272 } 5286 }
5273 } 5287 }
5274 5288
5275 5289
5276 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) { 5290 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) {
5277 DCHECK(ToRegister(instr->context()).is(cp)); 5291 DCHECK(ToRegister(instr->context()).is(cp));
5278 DCHECK(ToRegister(instr->object()).is(StoreDescriptor::ReceiverRegister())); 5292 DCHECK(ToRegister(instr->object()).is(StoreDescriptor::ReceiverRegister()));
5279 DCHECK(ToRegister(instr->key()).is(StoreDescriptor::NameRegister())); 5293 DCHECK(ToRegister(instr->key()).is(StoreDescriptor::NameRegister()));
5280 DCHECK(ToRegister(instr->value()).is(StoreDescriptor::ValueRegister())); 5294 DCHECK(ToRegister(instr->value()).is(StoreDescriptor::ValueRegister()));
5281 5295
5296 if (instr->hydrogen()->HasVectorAndSlot()) {
5297 EmitVectorStoreICRegisters<LStoreKeyedGeneric>(instr);
5298 }
5299
5282 Handle<Code> ic = CodeFactory::KeyedStoreICInOptimizedCode( 5300 Handle<Code> ic = CodeFactory::KeyedStoreICInOptimizedCode(
5283 isolate(), instr->language_mode(), 5301 isolate(), instr->language_mode(),
5284 instr->hydrogen()->initialization_state()).code(); 5302 instr->hydrogen()->initialization_state()).code();
5285 CallCode(ic, RelocInfo::CODE_TARGET, instr); 5303 CallCode(ic, RelocInfo::CODE_TARGET, instr);
5286 } 5304 }
5287 5305
5288 5306
5289 void LCodeGen::DoMaybeGrowElements(LMaybeGrowElements* instr) { 5307 void LCodeGen::DoMaybeGrowElements(LMaybeGrowElements* instr) {
5290 class DeferredMaybeGrowElements final : public LDeferredCode { 5308 class DeferredMaybeGrowElements final : public LDeferredCode {
5291 public: 5309 public:
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
5468 instr->hydrogen()->PointersToHereCheckForValue()); 5486 instr->hydrogen()->PointersToHereCheckForValue());
5469 } 5487 }
5470 } 5488 }
5471 5489
5472 5490
5473 void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) { 5491 void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) {
5474 DCHECK(ToRegister(instr->context()).is(cp)); 5492 DCHECK(ToRegister(instr->context()).is(cp));
5475 DCHECK(ToRegister(instr->object()).is(StoreDescriptor::ReceiverRegister())); 5493 DCHECK(ToRegister(instr->object()).is(StoreDescriptor::ReceiverRegister()));
5476 DCHECK(ToRegister(instr->value()).is(StoreDescriptor::ValueRegister())); 5494 DCHECK(ToRegister(instr->value()).is(StoreDescriptor::ValueRegister()));
5477 5495
5496 if (instr->hydrogen()->HasVectorAndSlot()) {
5497 EmitVectorStoreICRegisters<LStoreNamedGeneric>(instr);
5498 }
5499
5478 __ Mov(StoreDescriptor::NameRegister(), Operand(instr->name())); 5500 __ Mov(StoreDescriptor::NameRegister(), Operand(instr->name()));
5479 Handle<Code> ic = 5501 Handle<Code> ic = CodeFactory::StoreICInOptimizedCode(
5480 StoreIC::initialize_stub(isolate(), instr->language_mode(), 5502 isolate(), instr->language_mode(),
5481 instr->hydrogen()->initialization_state()); 5503 instr->hydrogen()->initialization_state()).code();
5482 CallCode(ic, RelocInfo::CODE_TARGET, instr); 5504 CallCode(ic, RelocInfo::CODE_TARGET, instr);
5483 } 5505 }
5484 5506
5485 5507
5486 void LCodeGen::DoStringAdd(LStringAdd* instr) { 5508 void LCodeGen::DoStringAdd(LStringAdd* instr) {
5487 DCHECK(ToRegister(instr->context()).is(cp)); 5509 DCHECK(ToRegister(instr->context()).is(cp));
5488 DCHECK(ToRegister(instr->left()).Is(x1)); 5510 DCHECK(ToRegister(instr->left()).Is(x1));
5489 DCHECK(ToRegister(instr->right()).Is(x0)); 5511 DCHECK(ToRegister(instr->right()).Is(x0));
5490 StringAddStub stub(isolate(), 5512 StringAddStub stub(isolate(),
5491 instr->hydrogen()->flags(), 5513 instr->hydrogen()->flags(),
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after
6092 Handle<ScopeInfo> scope_info = instr->scope_info(); 6114 Handle<ScopeInfo> scope_info = instr->scope_info();
6093 __ Push(scope_info); 6115 __ Push(scope_info);
6094 __ Push(ToRegister(instr->function())); 6116 __ Push(ToRegister(instr->function()));
6095 CallRuntime(Runtime::kPushBlockContext, 2, instr); 6117 CallRuntime(Runtime::kPushBlockContext, 2, instr);
6096 RecordSafepoint(Safepoint::kNoLazyDeopt); 6118 RecordSafepoint(Safepoint::kNoLazyDeopt);
6097 } 6119 }
6098 6120
6099 6121
6100 } // namespace internal 6122 } // namespace internal
6101 } // namespace v8 6123 } // namespace v8
OLDNEW
« no previous file with comments | « src/arm64/lithium-codegen-arm64.h ('k') | src/code-factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698