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

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

Issue 1419823003: Remove support for "loads and stores to global vars through property cell shortcuts inst… (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@disable-shortcuts
Patch Set: Addressing comments Created 5 years, 1 month 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/mips/full-codegen-mips.cc ('k') | src/full-codegen/ppc/full-codegen-ppc.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_MIPS64 5 #if V8_TARGET_ARCH_MIPS64
6 6
7 // Note on Mips implementation: 7 // Note on Mips implementation:
8 // 8 //
9 // The result_register() for mips is the 'v0' register, which is defined 9 // The result_register() for mips is the 'v0' register, which is defined
10 // by the ABI to contain function return values. However, the first 10 // by the ABI to contain function return values. However, the first
(...skipping 1366 matching lines...) Expand 10 before | Expand all | Expand 10 after
1377 __ Branch(done); 1377 __ Branch(done);
1378 } 1378 }
1379 } 1379 }
1380 1380
1381 1381
1382 void FullCodeGenerator::EmitGlobalVariableLoad(VariableProxy* proxy, 1382 void FullCodeGenerator::EmitGlobalVariableLoad(VariableProxy* proxy,
1383 TypeofMode typeof_mode) { 1383 TypeofMode typeof_mode) {
1384 Variable* var = proxy->var(); 1384 Variable* var = proxy->var();
1385 DCHECK(var->IsUnallocatedOrGlobalSlot() || 1385 DCHECK(var->IsUnallocatedOrGlobalSlot() ||
1386 (var->IsLookupSlot() && var->mode() == DYNAMIC_GLOBAL)); 1386 (var->IsLookupSlot() && var->mode() == DYNAMIC_GLOBAL));
1387 if (var->IsGlobalSlot()) { 1387 __ ld(LoadDescriptor::ReceiverRegister(), GlobalObjectOperand());
1388 DCHECK(var->index() > 0); 1388 __ li(LoadDescriptor::NameRegister(), Operand(var->name()));
1389 DCHECK(var->IsStaticGlobalObjectProperty()); 1389 __ li(LoadDescriptor::SlotRegister(),
1390 int const slot = var->index(); 1390 Operand(SmiFromSlot(proxy->VariableFeedbackSlot())));
1391 int const depth = scope()->ContextChainLength(var->scope()); 1391 CallLoadIC(typeof_mode);
1392 if (depth <= LoadGlobalViaContextStub::kMaximumDepth) {
1393 __ li(LoadGlobalViaContextDescriptor::SlotRegister(), Operand(slot));
1394 LoadGlobalViaContextStub stub(isolate(), depth);
1395 __ CallStub(&stub);
1396 } else {
1397 __ Push(Smi::FromInt(slot));
1398 __ CallRuntime(Runtime::kLoadGlobalViaContext, 1);
1399 }
1400
1401 } else {
1402 __ ld(LoadDescriptor::ReceiverRegister(), GlobalObjectOperand());
1403 __ li(LoadDescriptor::NameRegister(), Operand(var->name()));
1404 __ li(LoadDescriptor::SlotRegister(),
1405 Operand(SmiFromSlot(proxy->VariableFeedbackSlot())));
1406 CallLoadIC(typeof_mode);
1407 }
1408 } 1392 }
1409 1393
1410 1394
1411 void FullCodeGenerator::EmitVariableLoad(VariableProxy* proxy, 1395 void FullCodeGenerator::EmitVariableLoad(VariableProxy* proxy,
1412 TypeofMode typeof_mode) { 1396 TypeofMode typeof_mode) {
1413 // Record position before possible IC call. 1397 // Record position before possible IC call.
1414 SetExpressionPosition(proxy); 1398 SetExpressionPosition(proxy);
1415 PrepareForBailoutForId(proxy->BeforeId(), NO_REGISTERS); 1399 PrepareForBailoutForId(proxy->BeforeId(), NO_REGISTERS);
1416 Variable* var = proxy->var(); 1400 Variable* var = proxy->var();
1417 1401
(...skipping 1181 matching lines...) Expand 10 before | Expand all | Expand 10 after
2599 void FullCodeGenerator::EmitVariableAssignment(Variable* var, Token::Value op, 2583 void FullCodeGenerator::EmitVariableAssignment(Variable* var, Token::Value op,
2600 FeedbackVectorSlot slot) { 2584 FeedbackVectorSlot slot) {
2601 if (var->IsUnallocated()) { 2585 if (var->IsUnallocated()) {
2602 // Global var, const, or let. 2586 // Global var, const, or let.
2603 __ mov(StoreDescriptor::ValueRegister(), result_register()); 2587 __ mov(StoreDescriptor::ValueRegister(), result_register());
2604 __ li(StoreDescriptor::NameRegister(), Operand(var->name())); 2588 __ li(StoreDescriptor::NameRegister(), Operand(var->name()));
2605 __ ld(StoreDescriptor::ReceiverRegister(), GlobalObjectOperand()); 2589 __ ld(StoreDescriptor::ReceiverRegister(), GlobalObjectOperand());
2606 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 2590 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot);
2607 CallStoreIC(); 2591 CallStoreIC();
2608 2592
2609 } else if (var->IsGlobalSlot()) {
2610 // Global var, const, or let.
2611 DCHECK(var->index() > 0);
2612 DCHECK(var->IsStaticGlobalObjectProperty());
2613 DCHECK(StoreGlobalViaContextDescriptor::ValueRegister().is(a0));
2614 __ mov(StoreGlobalViaContextDescriptor::ValueRegister(), result_register());
2615 int const slot = var->index();
2616 int const depth = scope()->ContextChainLength(var->scope());
2617 if (depth <= StoreGlobalViaContextStub::kMaximumDepth) {
2618 __ li(StoreGlobalViaContextDescriptor::SlotRegister(), Operand(slot));
2619 StoreGlobalViaContextStub stub(isolate(), depth, language_mode());
2620 __ CallStub(&stub);
2621 } else {
2622 __ Push(Smi::FromInt(slot));
2623 __ Push(a0);
2624 __ CallRuntime(is_strict(language_mode())
2625 ? Runtime::kStoreGlobalViaContext_Strict
2626 : Runtime::kStoreGlobalViaContext_Sloppy,
2627 2);
2628 }
2629
2630 } else if (var->mode() == LET && op != Token::INIT_LET) { 2593 } else if (var->mode() == LET && op != Token::INIT_LET) {
2631 // Non-initializing assignment to let variable needs a write barrier. 2594 // Non-initializing assignment to let variable needs a write barrier.
2632 DCHECK(!var->IsLookupSlot()); 2595 DCHECK(!var->IsLookupSlot());
2633 DCHECK(var->IsStackAllocated() || var->IsContextSlot()); 2596 DCHECK(var->IsStackAllocated() || var->IsContextSlot());
2634 Label assign; 2597 Label assign;
2635 MemOperand location = VarOperand(var, a1); 2598 MemOperand location = VarOperand(var, a1);
2636 __ ld(a3, location); 2599 __ ld(a3, location);
2637 __ LoadRoot(a4, Heap::kTheHoleValueRootIndex); 2600 __ LoadRoot(a4, Heap::kTheHoleValueRootIndex);
2638 __ Branch(&assign, ne, a3, Operand(a4)); 2601 __ Branch(&assign, ne, a3, Operand(a4));
2639 __ li(a3, Operand(var->name())); 2602 __ li(a3, Operand(var->name()));
(...skipping 2556 matching lines...) Expand 10 before | Expand all | Expand 10 after
5196 reinterpret_cast<uint64_t>( 5159 reinterpret_cast<uint64_t>(
5197 isolate->builtins()->OsrAfterStackCheck()->entry())); 5160 isolate->builtins()->OsrAfterStackCheck()->entry()));
5198 return OSR_AFTER_STACK_CHECK; 5161 return OSR_AFTER_STACK_CHECK;
5199 } 5162 }
5200 5163
5201 5164
5202 } // namespace internal 5165 } // namespace internal
5203 } // namespace v8 5166 } // namespace v8
5204 5167
5205 #endif // V8_TARGET_ARCH_MIPS64 5168 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/full-codegen/mips/full-codegen-mips.cc ('k') | src/full-codegen/ppc/full-codegen-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698