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

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

Issue 2316453002: [fullcodegen] Introduce single bottleneck for calling KeyedStoreIC. (Closed)
Patch Set: Created 4 years, 3 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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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_PPC 5 #if V8_TARGET_ARCH_PPC
6 6
7 #include "src/full-codegen/full-codegen.h" 7 #include "src/full-codegen/full-codegen.h"
8 #include "src/ast/compile-time-value.h" 8 #include "src/ast/compile-time-value.h"
9 #include "src/ast/scopes.h" 9 #include "src/ast/scopes.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 1553 matching lines...) Expand 10 before | Expand all | Expand 10 after
1564 if (!result_saved) { 1564 if (!result_saved) {
1565 PushOperand(r3); 1565 PushOperand(r3);
1566 result_saved = true; 1566 result_saved = true;
1567 } 1567 }
1568 VisitForAccumulatorValue(subexpr); 1568 VisitForAccumulatorValue(subexpr);
1569 1569
1570 __ LoadSmiLiteral(StoreDescriptor::NameRegister(), 1570 __ LoadSmiLiteral(StoreDescriptor::NameRegister(),
1571 Smi::FromInt(array_index)); 1571 Smi::FromInt(array_index));
1572 __ LoadP(StoreDescriptor::ReceiverRegister(), MemOperand(sp, 0)); 1572 __ LoadP(StoreDescriptor::ReceiverRegister(), MemOperand(sp, 0));
1573 EmitLoadStoreICSlot(expr->LiteralFeedbackSlot()); 1573 EmitLoadStoreICSlot(expr->LiteralFeedbackSlot());
1574 Handle<Code> ic = 1574 CallKeyedStoreIC();
1575 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code();
1576 CallIC(ic);
1577 1575
1578 PrepareForBailoutForId(expr->GetIdForElement(array_index), 1576 PrepareForBailoutForId(expr->GetIdForElement(array_index),
1579 BailoutState::NO_REGISTERS); 1577 BailoutState::NO_REGISTERS);
1580 } 1578 }
1581 1579
1582 // In case the array literal contains spread expressions it has two parts. The 1580 // In case the array literal contains spread expressions it has two parts. The
1583 // first part is the "static" array which has a literal index is handled 1581 // first part is the "static" array which has a literal index is handled
1584 // above. The second part is the part after the first spread expression 1582 // above. The second part is the part after the first spread expression
1585 // (inclusive) and these elements gets appended to the array. Note that the 1583 // (inclusive) and these elements gets appended to the array. Note that the
1586 // number elements an iterable produces is unknown ahead of time. 1584 // number elements an iterable produces is unknown ahead of time.
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after
2117 break; 2115 break;
2118 } 2116 }
2119 case KEYED_PROPERTY: { 2117 case KEYED_PROPERTY: {
2120 PushOperand(r3); // Preserve value. 2118 PushOperand(r3); // Preserve value.
2121 VisitForStackValue(prop->obj()); 2119 VisitForStackValue(prop->obj());
2122 VisitForAccumulatorValue(prop->key()); 2120 VisitForAccumulatorValue(prop->key());
2123 __ Move(StoreDescriptor::NameRegister(), r3); 2121 __ Move(StoreDescriptor::NameRegister(), r3);
2124 PopOperands(StoreDescriptor::ValueRegister(), 2122 PopOperands(StoreDescriptor::ValueRegister(),
2125 StoreDescriptor::ReceiverRegister()); 2123 StoreDescriptor::ReceiverRegister());
2126 EmitLoadStoreICSlot(slot); 2124 EmitLoadStoreICSlot(slot);
2127 Handle<Code> ic = 2125 CallKeyedStoreIC();
2128 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code();
2129 CallIC(ic);
2130 break; 2126 break;
2131 } 2127 }
2132 } 2128 }
2133 context()->Plug(r3); 2129 context()->Plug(r3);
2134 } 2130 }
2135 2131
2136 2132
2137 void FullCodeGenerator::EmitStoreToStackLocalOrContextSlot( 2133 void FullCodeGenerator::EmitStoreToStackLocalOrContextSlot(
2138 Variable* var, MemOperand location) { 2134 Variable* var, MemOperand location) {
2139 __ StoreP(result_register(), location, r0); 2135 __ StoreP(result_register(), location, r0);
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
2261 : Runtime::kStoreKeyedToSuper_Sloppy)); 2257 : Runtime::kStoreKeyedToSuper_Sloppy));
2262 } 2258 }
2263 2259
2264 2260
2265 void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) { 2261 void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) {
2266 // Assignment to a property, using a keyed store IC. 2262 // Assignment to a property, using a keyed store IC.
2267 PopOperands(StoreDescriptor::ReceiverRegister(), 2263 PopOperands(StoreDescriptor::ReceiverRegister(),
2268 StoreDescriptor::NameRegister()); 2264 StoreDescriptor::NameRegister());
2269 DCHECK(StoreDescriptor::ValueRegister().is(r3)); 2265 DCHECK(StoreDescriptor::ValueRegister().is(r3));
2270 2266
2271 Handle<Code> ic =
2272 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code();
2273 EmitLoadStoreICSlot(expr->AssignmentSlot()); 2267 EmitLoadStoreICSlot(expr->AssignmentSlot());
2274 CallIC(ic); 2268 CallKeyedStoreIC();
2275 2269
2276 PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER); 2270 PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
2277 context()->Plug(r3); 2271 context()->Plug(r3);
2278 } 2272 }
2279 2273
2280 2274
2281 void FullCodeGenerator::CallIC(Handle<Code> code, TypeFeedbackId ast_id) { 2275 void FullCodeGenerator::CallIC(Handle<Code> code, TypeFeedbackId ast_id) {
2282 ic_total_count_++; 2276 ic_total_count_++;
2283 __ Call(code, RelocInfo::CODE_TARGET, ast_id); 2277 __ Call(code, RelocInfo::CODE_TARGET, ast_id);
2284 } 2278 }
(...skipping 1065 matching lines...) Expand 10 before | Expand all | Expand 10 after
3350 context()->PlugTOS(); 3344 context()->PlugTOS();
3351 } 3345 }
3352 } else { 3346 } else {
3353 context()->Plug(r3); 3347 context()->Plug(r3);
3354 } 3348 }
3355 break; 3349 break;
3356 } 3350 }
3357 case KEYED_PROPERTY: { 3351 case KEYED_PROPERTY: {
3358 PopOperands(StoreDescriptor::ReceiverRegister(), 3352 PopOperands(StoreDescriptor::ReceiverRegister(),
3359 StoreDescriptor::NameRegister()); 3353 StoreDescriptor::NameRegister());
3360 Handle<Code> ic =
3361 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code();
3362 EmitLoadStoreICSlot(expr->CountSlot()); 3354 EmitLoadStoreICSlot(expr->CountSlot());
3363 CallIC(ic); 3355 CallKeyedStoreIC();
3364 PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER); 3356 PrepareForBailoutForId(expr->AssignmentId(), BailoutState::TOS_REGISTER);
3365 if (expr->is_postfix()) { 3357 if (expr->is_postfix()) {
3366 if (!context()->IsEffect()) { 3358 if (!context()->IsEffect()) {
3367 context()->PlugTOS(); 3359 context()->PlugTOS();
3368 } 3360 }
3369 } else { 3361 } else {
3370 context()->Plug(r3); 3362 context()->Plug(r3);
3371 } 3363 }
3372 break; 3364 break;
3373 } 3365 }
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
3731 3723
3732 DCHECK(Assembler::IsCrSet(Assembler::instr_at(cmp_address))); 3724 DCHECK(Assembler::IsCrSet(Assembler::instr_at(cmp_address)));
3733 3725
3734 DCHECK(interrupt_address == 3726 DCHECK(interrupt_address ==
3735 isolate->builtins()->OnStackReplacement()->entry()); 3727 isolate->builtins()->OnStackReplacement()->entry());
3736 return ON_STACK_REPLACEMENT; 3728 return ON_STACK_REPLACEMENT;
3737 } 3729 }
3738 } // namespace internal 3730 } // namespace internal
3739 } // namespace v8 3731 } // namespace v8
3740 #endif // V8_TARGET_ARCH_PPC 3732 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « src/full-codegen/mips64/full-codegen-mips64.cc ('k') | src/full-codegen/s390/full-codegen-s390.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698