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

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

Issue 1145223003: PPC: Cleanup interface descriptors to reflect that vectors are part of loads. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 7 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/ppc/debug-ppc.cc ('k') | src/ppc/interface-descriptors-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 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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_PPC 7 #if V8_TARGET_ARCH_PPC
8 8
9 #include "src/code-factory.h" 9 #include "src/code-factory.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 1276 matching lines...) Expand 10 before | Expand all | Expand 10 after
1287 1287
1288 void FullCodeGenerator::EmitLoadHomeObject(SuperReference* expr) { 1288 void FullCodeGenerator::EmitLoadHomeObject(SuperReference* expr) {
1289 Comment cnmt(masm_, "[ SuperReference "); 1289 Comment cnmt(masm_, "[ SuperReference ");
1290 1290
1291 __ LoadP(LoadDescriptor::ReceiverRegister(), 1291 __ LoadP(LoadDescriptor::ReceiverRegister(),
1292 MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); 1292 MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
1293 1293
1294 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol()); 1294 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol());
1295 __ Move(LoadDescriptor::NameRegister(), home_object_symbol); 1295 __ Move(LoadDescriptor::NameRegister(), home_object_symbol);
1296 1296
1297 __ mov(VectorLoadICDescriptor::SlotRegister(), 1297 __ mov(LoadDescriptor::SlotRegister(),
1298 Operand(SmiFromSlot(expr->HomeObjectFeedbackSlot()))); 1298 Operand(SmiFromSlot(expr->HomeObjectFeedbackSlot())));
1299 CallLoadIC(NOT_CONTEXTUAL); 1299 CallLoadIC(NOT_CONTEXTUAL);
1300 1300
1301 __ Cmpi(r3, Operand(isolate()->factory()->undefined_value()), r0); 1301 __ Cmpi(r3, Operand(isolate()->factory()->undefined_value()), r0);
1302 Label done; 1302 Label done;
1303 __ bne(&done); 1303 __ bne(&done);
1304 __ CallRuntime(Runtime::kThrowNonMethodError, 0); 1304 __ CallRuntime(Runtime::kThrowNonMethodError, 0);
1305 __ bind(&done); 1305 __ bind(&done);
1306 } 1306 }
1307 1307
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1362 __ cmpi(temp, Operand::Zero()); 1362 __ cmpi(temp, Operand::Zero());
1363 __ bne(slow); 1363 __ bne(slow);
1364 // Load next context in chain. 1364 // Load next context in chain.
1365 __ LoadP(next, ContextOperand(next, Context::PREVIOUS_INDEX)); 1365 __ LoadP(next, ContextOperand(next, Context::PREVIOUS_INDEX));
1366 __ b(&loop); 1366 __ b(&loop);
1367 __ bind(&fast); 1367 __ bind(&fast);
1368 } 1368 }
1369 1369
1370 __ LoadP(LoadDescriptor::ReceiverRegister(), GlobalObjectOperand()); 1370 __ LoadP(LoadDescriptor::ReceiverRegister(), GlobalObjectOperand());
1371 __ mov(LoadDescriptor::NameRegister(), Operand(proxy->var()->name())); 1371 __ mov(LoadDescriptor::NameRegister(), Operand(proxy->var()->name()));
1372 __ mov(VectorLoadICDescriptor::SlotRegister(), 1372 __ mov(LoadDescriptor::SlotRegister(),
1373 Operand(SmiFromSlot(proxy->VariableFeedbackSlot()))); 1373 Operand(SmiFromSlot(proxy->VariableFeedbackSlot())));
1374 1374
1375 ContextualMode mode = 1375 ContextualMode mode =
1376 (typeof_state == INSIDE_TYPEOF) ? NOT_CONTEXTUAL : CONTEXTUAL; 1376 (typeof_state == INSIDE_TYPEOF) ? NOT_CONTEXTUAL : CONTEXTUAL;
1377 CallLoadIC(mode); 1377 CallLoadIC(mode);
1378 } 1378 }
1379 1379
1380 1380
1381 MemOperand FullCodeGenerator::ContextSlotOperandCheckExtensions(Variable* var, 1381 MemOperand FullCodeGenerator::ContextSlotOperandCheckExtensions(Variable* var,
1382 Label* slow) { 1382 Label* slow) {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1448 PrepareForBailoutForId(proxy->BeforeId(), NO_REGISTERS); 1448 PrepareForBailoutForId(proxy->BeforeId(), NO_REGISTERS);
1449 Variable* var = proxy->var(); 1449 Variable* var = proxy->var();
1450 1450
1451 // Three cases: global variables, lookup variables, and all other types of 1451 // Three cases: global variables, lookup variables, and all other types of
1452 // variables. 1452 // variables.
1453 switch (var->location()) { 1453 switch (var->location()) {
1454 case Variable::UNALLOCATED: { 1454 case Variable::UNALLOCATED: {
1455 Comment cmnt(masm_, "[ Global variable"); 1455 Comment cmnt(masm_, "[ Global variable");
1456 __ LoadP(LoadDescriptor::ReceiverRegister(), GlobalObjectOperand()); 1456 __ LoadP(LoadDescriptor::ReceiverRegister(), GlobalObjectOperand());
1457 __ mov(LoadDescriptor::NameRegister(), Operand(var->name())); 1457 __ mov(LoadDescriptor::NameRegister(), Operand(var->name()));
1458 __ mov(VectorLoadICDescriptor::SlotRegister(), 1458 __ mov(LoadDescriptor::SlotRegister(),
1459 Operand(SmiFromSlot(proxy->VariableFeedbackSlot()))); 1459 Operand(SmiFromSlot(proxy->VariableFeedbackSlot())));
1460 CallGlobalLoadIC(var->name()); 1460 CallGlobalLoadIC(var->name());
1461 context()->Plug(r3); 1461 context()->Plug(r3);
1462 break; 1462 break;
1463 } 1463 }
1464 1464
1465 case Variable::PARAMETER: 1465 case Variable::PARAMETER:
1466 case Variable::LOCAL: 1466 case Variable::LOCAL:
1467 case Variable::CONTEXT: { 1467 case Variable::CONTEXT: {
1468 Comment cmnt(masm_, var->IsContextSlot() ? "[ Context variable" 1468 Comment cmnt(masm_, var->IsContextSlot() ? "[ Context variable"
(...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after
2141 __ bind(&l_next); 2141 __ bind(&l_next);
2142 2142
2143 __ LoadRoot(load_name, Heap::knext_stringRootIndex); // "next" 2143 __ LoadRoot(load_name, Heap::knext_stringRootIndex); // "next"
2144 __ LoadP(r6, MemOperand(sp, 1 * kPointerSize)); // iter 2144 __ LoadP(r6, MemOperand(sp, 1 * kPointerSize)); // iter
2145 __ Push(load_name, r6, r3); // "next", iter, received 2145 __ Push(load_name, r6, r3); // "next", iter, received
2146 2146
2147 // result = receiver[f](arg); 2147 // result = receiver[f](arg);
2148 __ bind(&l_call); 2148 __ bind(&l_call);
2149 __ LoadP(load_receiver, MemOperand(sp, kPointerSize)); 2149 __ LoadP(load_receiver, MemOperand(sp, kPointerSize));
2150 __ LoadP(load_name, MemOperand(sp, 2 * kPointerSize)); 2150 __ LoadP(load_name, MemOperand(sp, 2 * kPointerSize));
2151 __ mov(VectorLoadICDescriptor::SlotRegister(), 2151 __ mov(LoadDescriptor::SlotRegister(),
2152 Operand(SmiFromSlot(expr->KeyedLoadFeedbackSlot()))); 2152 Operand(SmiFromSlot(expr->KeyedLoadFeedbackSlot())));
2153 Handle<Code> ic = CodeFactory::KeyedLoadIC(isolate()).code(); 2153 Handle<Code> ic = CodeFactory::KeyedLoadIC(isolate()).code();
2154 CallIC(ic, TypeFeedbackId::None()); 2154 CallIC(ic, TypeFeedbackId::None());
2155 __ mr(r4, r3); 2155 __ mr(r4, r3);
2156 __ StoreP(r4, MemOperand(sp, 2 * kPointerSize)); 2156 __ StoreP(r4, MemOperand(sp, 2 * kPointerSize));
2157 CallFunctionStub stub(isolate(), 1, CALL_AS_METHOD); 2157 CallFunctionStub stub(isolate(), 1, CALL_AS_METHOD);
2158 __ CallStub(&stub); 2158 __ CallStub(&stub);
2159 2159
2160 __ LoadP(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 2160 __ LoadP(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
2161 __ Drop(1); // The function is still on the stack; drop it. 2161 __ Drop(1); // The function is still on the stack; drop it.
2162 2162
2163 // if (!result.done) goto l_try; 2163 // if (!result.done) goto l_try;
2164 __ Move(load_receiver, r3); 2164 __ Move(load_receiver, r3);
2165 2165
2166 __ push(load_receiver); // save result 2166 __ push(load_receiver); // save result
2167 __ LoadRoot(load_name, Heap::kdone_stringRootIndex); // "done" 2167 __ LoadRoot(load_name, Heap::kdone_stringRootIndex); // "done"
2168 __ mov(VectorLoadICDescriptor::SlotRegister(), 2168 __ mov(LoadDescriptor::SlotRegister(),
2169 Operand(SmiFromSlot(expr->DoneFeedbackSlot()))); 2169 Operand(SmiFromSlot(expr->DoneFeedbackSlot())));
2170 CallLoadIC(NOT_CONTEXTUAL); // r0=result.done 2170 CallLoadIC(NOT_CONTEXTUAL); // r0=result.done
2171 Handle<Code> bool_ic = ToBooleanStub::GetUninitialized(isolate()); 2171 Handle<Code> bool_ic = ToBooleanStub::GetUninitialized(isolate());
2172 CallIC(bool_ic); 2172 CallIC(bool_ic);
2173 __ cmpi(r3, Operand::Zero()); 2173 __ cmpi(r3, Operand::Zero());
2174 __ beq(&l_try); 2174 __ beq(&l_try);
2175 2175
2176 // result.value 2176 // result.value
2177 __ pop(load_receiver); // result 2177 __ pop(load_receiver); // result
2178 __ LoadRoot(load_name, Heap::kvalue_stringRootIndex); // "value" 2178 __ LoadRoot(load_name, Heap::kvalue_stringRootIndex); // "value"
2179 __ mov(VectorLoadICDescriptor::SlotRegister(), 2179 __ mov(LoadDescriptor::SlotRegister(),
2180 Operand(SmiFromSlot(expr->ValueFeedbackSlot()))); 2180 Operand(SmiFromSlot(expr->ValueFeedbackSlot())));
2181 CallLoadIC(NOT_CONTEXTUAL); // r3=result.value 2181 CallLoadIC(NOT_CONTEXTUAL); // r3=result.value
2182 context()->DropAndPlug(2, r3); // drop iter and g 2182 context()->DropAndPlug(2, r3); // drop iter and g
2183 break; 2183 break;
2184 } 2184 }
2185 } 2185 }
2186 } 2186 }
2187 2187
2188 2188
2189 void FullCodeGenerator::EmitGeneratorResume( 2189 void FullCodeGenerator::EmitGeneratorResume(
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
2326 kLRHasBeenSaved, kDontSaveFPRegs); 2326 kLRHasBeenSaved, kDontSaveFPRegs);
2327 } 2327 }
2328 2328
2329 2329
2330 void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) { 2330 void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) {
2331 SetSourcePosition(prop->position()); 2331 SetSourcePosition(prop->position());
2332 Literal* key = prop->key()->AsLiteral(); 2332 Literal* key = prop->key()->AsLiteral();
2333 DCHECK(!prop->IsSuperAccess()); 2333 DCHECK(!prop->IsSuperAccess());
2334 2334
2335 __ mov(LoadDescriptor::NameRegister(), Operand(key->value())); 2335 __ mov(LoadDescriptor::NameRegister(), Operand(key->value()));
2336 __ mov(VectorLoadICDescriptor::SlotRegister(), 2336 __ mov(LoadDescriptor::SlotRegister(),
2337 Operand(SmiFromSlot(prop->PropertyFeedbackSlot()))); 2337 Operand(SmiFromSlot(prop->PropertyFeedbackSlot())));
2338 CallLoadIC(NOT_CONTEXTUAL); 2338 CallLoadIC(NOT_CONTEXTUAL);
2339 } 2339 }
2340 2340
2341 2341
2342 void FullCodeGenerator::EmitNamedSuperPropertyLoad(Property* prop) { 2342 void FullCodeGenerator::EmitNamedSuperPropertyLoad(Property* prop) {
2343 // Stack: receiver, home_object. 2343 // Stack: receiver, home_object.
2344 SetSourcePosition(prop->position()); 2344 SetSourcePosition(prop->position());
2345 Literal* key = prop->key()->AsLiteral(); 2345 Literal* key = prop->key()->AsLiteral();
2346 DCHECK(!key->value()->IsSmi()); 2346 DCHECK(!key->value()->IsSmi());
2347 DCHECK(prop->IsSuperAccess()); 2347 DCHECK(prop->IsSuperAccess());
2348 2348
2349 __ Push(key->value()); 2349 __ Push(key->value());
2350 __ CallRuntime(Runtime::kLoadFromSuper, 3); 2350 __ CallRuntime(Runtime::kLoadFromSuper, 3);
2351 } 2351 }
2352 2352
2353 2353
2354 void FullCodeGenerator::EmitKeyedPropertyLoad(Property* prop) { 2354 void FullCodeGenerator::EmitKeyedPropertyLoad(Property* prop) {
2355 SetSourcePosition(prop->position()); 2355 SetSourcePosition(prop->position());
2356 Handle<Code> ic = CodeFactory::KeyedLoadIC(isolate()).code(); 2356 Handle<Code> ic = CodeFactory::KeyedLoadIC(isolate()).code();
2357 __ mov(VectorLoadICDescriptor::SlotRegister(), 2357 __ mov(LoadDescriptor::SlotRegister(),
2358 Operand(SmiFromSlot(prop->PropertyFeedbackSlot()))); 2358 Operand(SmiFromSlot(prop->PropertyFeedbackSlot())));
2359 CallIC(ic); 2359 CallIC(ic);
2360 } 2360 }
2361 2361
2362 2362
2363 void FullCodeGenerator::EmitKeyedSuperPropertyLoad(Property* prop) { 2363 void FullCodeGenerator::EmitKeyedSuperPropertyLoad(Property* prop) {
2364 // Stack: receiver, home_object, key. 2364 // Stack: receiver, home_object, key.
2365 SetSourcePosition(prop->position()); 2365 SetSourcePosition(prop->position());
2366 2366
2367 __ CallRuntime(Runtime::kLoadKeyedFromSuper, 3); 2367 __ CallRuntime(Runtime::kLoadKeyedFromSuper, 3);
(...skipping 2251 matching lines...) Expand 10 before | Expand all | Expand 10 after
4619 4619
4620 void FullCodeGenerator::EmitLoadJSRuntimeFunction(CallRuntime* expr) { 4620 void FullCodeGenerator::EmitLoadJSRuntimeFunction(CallRuntime* expr) {
4621 // Push the builtins object as the receiver. 4621 // Push the builtins object as the receiver.
4622 Register receiver = LoadDescriptor::ReceiverRegister(); 4622 Register receiver = LoadDescriptor::ReceiverRegister();
4623 __ LoadP(receiver, GlobalObjectOperand()); 4623 __ LoadP(receiver, GlobalObjectOperand());
4624 __ LoadP(receiver, FieldMemOperand(receiver, GlobalObject::kBuiltinsOffset)); 4624 __ LoadP(receiver, FieldMemOperand(receiver, GlobalObject::kBuiltinsOffset));
4625 __ push(receiver); 4625 __ push(receiver);
4626 4626
4627 // Load the function from the receiver. 4627 // Load the function from the receiver.
4628 __ mov(LoadDescriptor::NameRegister(), Operand(expr->name())); 4628 __ mov(LoadDescriptor::NameRegister(), Operand(expr->name()));
4629 __ mov(VectorLoadICDescriptor::SlotRegister(), 4629 __ mov(LoadDescriptor::SlotRegister(),
4630 Operand(SmiFromSlot(expr->CallRuntimeFeedbackSlot()))); 4630 Operand(SmiFromSlot(expr->CallRuntimeFeedbackSlot())));
4631 CallLoadIC(NOT_CONTEXTUAL); 4631 CallLoadIC(NOT_CONTEXTUAL);
4632 } 4632 }
4633 4633
4634 4634
4635 void FullCodeGenerator::EmitCallJSRuntimeFunction(CallRuntime* expr) { 4635 void FullCodeGenerator::EmitCallJSRuntimeFunction(CallRuntime* expr) {
4636 ZoneList<Expression*>* args = expr->arguments(); 4636 ZoneList<Expression*>* args = expr->arguments();
4637 int arg_count = args->length(); 4637 int arg_count = args->length();
4638 4638
4639 // Record source position of the IC call. 4639 // Record source position of the IC call.
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
5050 5050
5051 5051
5052 void FullCodeGenerator::VisitForTypeofValue(Expression* expr) { 5052 void FullCodeGenerator::VisitForTypeofValue(Expression* expr) {
5053 DCHECK(!context()->IsEffect()); 5053 DCHECK(!context()->IsEffect());
5054 DCHECK(!context()->IsTest()); 5054 DCHECK(!context()->IsTest());
5055 VariableProxy* proxy = expr->AsVariableProxy(); 5055 VariableProxy* proxy = expr->AsVariableProxy();
5056 if (proxy != NULL && proxy->var()->IsUnallocated()) { 5056 if (proxy != NULL && proxy->var()->IsUnallocated()) {
5057 Comment cmnt(masm_, "[ Global variable"); 5057 Comment cmnt(masm_, "[ Global variable");
5058 __ LoadP(LoadDescriptor::ReceiverRegister(), GlobalObjectOperand()); 5058 __ LoadP(LoadDescriptor::ReceiverRegister(), GlobalObjectOperand());
5059 __ mov(LoadDescriptor::NameRegister(), Operand(proxy->name())); 5059 __ mov(LoadDescriptor::NameRegister(), Operand(proxy->name()));
5060 __ mov(VectorLoadICDescriptor::SlotRegister(), 5060 __ mov(LoadDescriptor::SlotRegister(),
5061 Operand(SmiFromSlot(proxy->VariableFeedbackSlot()))); 5061 Operand(SmiFromSlot(proxy->VariableFeedbackSlot())));
5062 // Use a regular load, not a contextual load, to avoid a reference 5062 // Use a regular load, not a contextual load, to avoid a reference
5063 // error. 5063 // error.
5064 CallLoadIC(NOT_CONTEXTUAL); 5064 CallLoadIC(NOT_CONTEXTUAL);
5065 PrepareForBailout(expr, TOS_REG); 5065 PrepareForBailout(expr, TOS_REG);
5066 context()->Plug(r3); 5066 context()->Plug(r3);
5067 } else if (proxy != NULL && proxy->var()->IsLookupSlot()) { 5067 } else if (proxy != NULL && proxy->var()->IsLookupSlot()) {
5068 Comment cmnt(masm_, "[ Lookup slot"); 5068 Comment cmnt(masm_, "[ Lookup slot");
5069 Label done, slow; 5069 Label done, slow;
5070 5070
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
5427 return ON_STACK_REPLACEMENT; 5427 return ON_STACK_REPLACEMENT;
5428 } 5428 }
5429 5429
5430 DCHECK(interrupt_address == 5430 DCHECK(interrupt_address ==
5431 isolate->builtins()->OsrAfterStackCheck()->entry()); 5431 isolate->builtins()->OsrAfterStackCheck()->entry());
5432 return OSR_AFTER_STACK_CHECK; 5432 return OSR_AFTER_STACK_CHECK;
5433 } 5433 }
5434 } 5434 }
5435 } // namespace v8::internal 5435 } // namespace v8::internal
5436 #endif // V8_TARGET_ARCH_PPC 5436 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « src/ppc/debug-ppc.cc ('k') | src/ppc/interface-descriptors-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698