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

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

Issue 1370303004: Distinction between FeedbackVectorICSlot and FeedbackVectorSlot eliminated. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fixed release builds 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/factory.cc ('k') | src/full-codegen/arm64/full-codegen-arm64.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_ARM 5 #if V8_TARGET_ARCH_ARM
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/compiler.h" 10 #include "src/compiler.h"
(...skipping 1227 matching lines...) Expand 10 before | Expand all | Expand 10 after
1238 } else { 1238 } else {
1239 __ Push(info); 1239 __ Push(info);
1240 __ CallRuntime( 1240 __ CallRuntime(
1241 pretenure ? Runtime::kNewClosure_Tenured : Runtime::kNewClosure, 1); 1241 pretenure ? Runtime::kNewClosure_Tenured : Runtime::kNewClosure, 1);
1242 } 1242 }
1243 context()->Plug(r0); 1243 context()->Plug(r0);
1244 } 1244 }
1245 1245
1246 1246
1247 void FullCodeGenerator::EmitSetHomeObject(Expression* initializer, int offset, 1247 void FullCodeGenerator::EmitSetHomeObject(Expression* initializer, int offset,
1248 FeedbackVectorICSlot slot) { 1248 FeedbackVectorSlot slot) {
1249 DCHECK(NeedsHomeObject(initializer)); 1249 DCHECK(NeedsHomeObject(initializer));
1250 __ ldr(StoreDescriptor::ReceiverRegister(), MemOperand(sp)); 1250 __ ldr(StoreDescriptor::ReceiverRegister(), MemOperand(sp));
1251 __ mov(StoreDescriptor::NameRegister(), 1251 __ mov(StoreDescriptor::NameRegister(),
1252 Operand(isolate()->factory()->home_object_symbol())); 1252 Operand(isolate()->factory()->home_object_symbol()));
1253 __ ldr(StoreDescriptor::ValueRegister(), 1253 __ ldr(StoreDescriptor::ValueRegister(),
1254 MemOperand(sp, offset * kPointerSize)); 1254 MemOperand(sp, offset * kPointerSize));
1255 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 1255 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot);
1256 CallStoreIC(); 1256 CallStoreIC();
1257 } 1257 }
1258 1258
1259 1259
1260 void FullCodeGenerator::EmitSetHomeObjectAccumulator( 1260 void FullCodeGenerator::EmitSetHomeObjectAccumulator(Expression* initializer,
1261 Expression* initializer, int offset, FeedbackVectorICSlot slot) { 1261 int offset,
1262 FeedbackVectorSlot slot) {
1262 DCHECK(NeedsHomeObject(initializer)); 1263 DCHECK(NeedsHomeObject(initializer));
1263 __ Move(StoreDescriptor::ReceiverRegister(), r0); 1264 __ Move(StoreDescriptor::ReceiverRegister(), r0);
1264 __ mov(StoreDescriptor::NameRegister(), 1265 __ mov(StoreDescriptor::NameRegister(),
1265 Operand(isolate()->factory()->home_object_symbol())); 1266 Operand(isolate()->factory()->home_object_symbol()));
1266 __ ldr(StoreDescriptor::ValueRegister(), 1267 __ ldr(StoreDescriptor::ValueRegister(),
1267 MemOperand(sp, offset * kPointerSize)); 1268 MemOperand(sp, offset * kPointerSize));
1268 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 1269 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot);
1269 CallStoreIC(); 1270 CallStoreIC();
1270 } 1271 }
1271 1272
(...skipping 1229 matching lines...) Expand 10 before | Expand all | Expand 10 after
2501 Handle<Code> code = 2502 Handle<Code> code =
2502 CodeFactory::BinaryOpIC(isolate(), op, strength(language_mode())).code(); 2503 CodeFactory::BinaryOpIC(isolate(), op, strength(language_mode())).code();
2503 JumpPatchSite patch_site(masm_); // unbound, signals no inlined smi code. 2504 JumpPatchSite patch_site(masm_); // unbound, signals no inlined smi code.
2504 CallIC(code, expr->BinaryOperationFeedbackId()); 2505 CallIC(code, expr->BinaryOperationFeedbackId());
2505 patch_site.EmitPatchInfo(); 2506 patch_site.EmitPatchInfo();
2506 context()->Plug(r0); 2507 context()->Plug(r0);
2507 } 2508 }
2508 2509
2509 2510
2510 void FullCodeGenerator::EmitAssignment(Expression* expr, 2511 void FullCodeGenerator::EmitAssignment(Expression* expr,
2511 FeedbackVectorICSlot slot) { 2512 FeedbackVectorSlot slot) {
2512 DCHECK(expr->IsValidReferenceExpressionOrThis()); 2513 DCHECK(expr->IsValidReferenceExpressionOrThis());
2513 2514
2514 Property* prop = expr->AsProperty(); 2515 Property* prop = expr->AsProperty();
2515 LhsKind assign_type = Property::GetAssignType(prop); 2516 LhsKind assign_type = Property::GetAssignType(prop);
2516 2517
2517 switch (assign_type) { 2518 switch (assign_type) {
2518 case VARIABLE: { 2519 case VARIABLE: {
2519 Variable* var = expr->AsVariableProxy()->var(); 2520 Variable* var = expr->AsVariableProxy()->var();
2520 EffectContext context(this); 2521 EffectContext context(this);
2521 EmitVariableAssignment(var, Token::ASSIGN, slot); 2522 EmitVariableAssignment(var, Token::ASSIGN, slot);
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
2594 // RecordWrite may destroy all its register arguments. 2595 // RecordWrite may destroy all its register arguments.
2595 __ mov(r3, result_register()); 2596 __ mov(r3, result_register());
2596 int offset = Context::SlotOffset(var->index()); 2597 int offset = Context::SlotOffset(var->index());
2597 __ RecordWriteContextSlot( 2598 __ RecordWriteContextSlot(
2598 r1, offset, r3, r2, kLRHasBeenSaved, kDontSaveFPRegs); 2599 r1, offset, r3, r2, kLRHasBeenSaved, kDontSaveFPRegs);
2599 } 2600 }
2600 } 2601 }
2601 2602
2602 2603
2603 void FullCodeGenerator::EmitVariableAssignment(Variable* var, Token::Value op, 2604 void FullCodeGenerator::EmitVariableAssignment(Variable* var, Token::Value op,
2604 FeedbackVectorICSlot slot) { 2605 FeedbackVectorSlot slot) {
2605 if (var->IsUnallocated()) { 2606 if (var->IsUnallocated()) {
2606 // Global var, const, or let. 2607 // Global var, const, or let.
2607 __ mov(StoreDescriptor::NameRegister(), Operand(var->name())); 2608 __ mov(StoreDescriptor::NameRegister(), Operand(var->name()));
2608 __ ldr(StoreDescriptor::ReceiverRegister(), GlobalObjectOperand()); 2609 __ ldr(StoreDescriptor::ReceiverRegister(), GlobalObjectOperand());
2609 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 2610 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot);
2610 CallStoreIC(); 2611 CallStoreIC();
2611 2612
2612 } else if (var->IsGlobalSlot()) { 2613 } else if (var->IsGlobalSlot()) {
2613 // Global var, const, or let. 2614 // Global var, const, or let.
2614 DCHECK(var->index() > 0); 2615 DCHECK(var->index() > 0);
(...skipping 2501 matching lines...) Expand 10 before | Expand all | Expand 10 after
5116 void FullCodeGenerator::ClearPendingMessage() { 5117 void FullCodeGenerator::ClearPendingMessage() {
5117 DCHECK(!result_register().is(r1)); 5118 DCHECK(!result_register().is(r1));
5118 ExternalReference pending_message_obj = 5119 ExternalReference pending_message_obj =
5119 ExternalReference::address_of_pending_message_obj(isolate()); 5120 ExternalReference::address_of_pending_message_obj(isolate());
5120 __ LoadRoot(r1, Heap::kTheHoleValueRootIndex); 5121 __ LoadRoot(r1, Heap::kTheHoleValueRootIndex);
5121 __ mov(ip, Operand(pending_message_obj)); 5122 __ mov(ip, Operand(pending_message_obj));
5122 __ str(r1, MemOperand(ip)); 5123 __ str(r1, MemOperand(ip));
5123 } 5124 }
5124 5125
5125 5126
5126 void FullCodeGenerator::EmitLoadStoreICSlot(FeedbackVectorICSlot slot) { 5127 void FullCodeGenerator::EmitLoadStoreICSlot(FeedbackVectorSlot slot) {
5127 DCHECK(FLAG_vector_stores && !slot.IsInvalid()); 5128 DCHECK(FLAG_vector_stores && !slot.IsInvalid());
5128 __ mov(VectorStoreICTrampolineDescriptor::SlotRegister(), 5129 __ mov(VectorStoreICTrampolineDescriptor::SlotRegister(),
5129 Operand(SmiFromSlot(slot))); 5130 Operand(SmiFromSlot(slot)));
5130 } 5131 }
5131 5132
5132 5133
5133 #undef __ 5134 #undef __
5134 5135
5135 5136
5136 static Address GetInterruptImmediateLoadAddress(Address pc) { 5137 static Address GetInterruptImmediateLoadAddress(Address pc) {
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
5269 DCHECK(interrupt_address == 5270 DCHECK(interrupt_address ==
5270 isolate->builtins()->OsrAfterStackCheck()->entry()); 5271 isolate->builtins()->OsrAfterStackCheck()->entry());
5271 return OSR_AFTER_STACK_CHECK; 5272 return OSR_AFTER_STACK_CHECK;
5272 } 5273 }
5273 5274
5274 5275
5275 } // namespace internal 5276 } // namespace internal
5276 } // namespace v8 5277 } // namespace v8
5277 5278
5278 #endif // V8_TARGET_ARCH_ARM 5279 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/factory.cc ('k') | src/full-codegen/arm64/full-codegen-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698