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

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

Issue 1227893005: TypeofMode replaces TypeofState and ContextualMode. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comments Created 5 years, 5 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/codegen-ppc.h ('k') | src/ppc/lithium-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 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 1322 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 Operand(isolate()->factory()->home_object_symbol())); 1333 Operand(isolate()->factory()->home_object_symbol()));
1334 __ LoadP(StoreDescriptor::ValueRegister(), 1334 __ LoadP(StoreDescriptor::ValueRegister(),
1335 MemOperand(sp, offset * kPointerSize)); 1335 MemOperand(sp, offset * kPointerSize));
1336 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 1336 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot);
1337 CallStoreIC(); 1337 CallStoreIC();
1338 } 1338 }
1339 } 1339 }
1340 1340
1341 1341
1342 void FullCodeGenerator::EmitLoadGlobalCheckExtensions(VariableProxy* proxy, 1342 void FullCodeGenerator::EmitLoadGlobalCheckExtensions(VariableProxy* proxy,
1343 TypeofState typeof_state, 1343 TypeofMode typeof_mode,
1344 Label* slow) { 1344 Label* slow) {
1345 Register current = cp; 1345 Register current = cp;
1346 Register next = r4; 1346 Register next = r4;
1347 Register temp = r5; 1347 Register temp = r5;
1348 1348
1349 Scope* s = scope(); 1349 Scope* s = scope();
1350 while (s != NULL) { 1350 while (s != NULL) {
1351 if (s->num_heap_slots() > 0) { 1351 if (s->num_heap_slots() > 0) {
1352 if (s->calls_sloppy_eval()) { 1352 if (s->calls_sloppy_eval()) {
1353 // Check that extension is NULL. 1353 // Check that extension is NULL.
(...skipping 28 matching lines...) Expand all
1382 __ cmpi(temp, Operand::Zero()); 1382 __ cmpi(temp, Operand::Zero());
1383 __ bne(slow); 1383 __ bne(slow);
1384 // Load next context in chain. 1384 // Load next context in chain.
1385 __ LoadP(next, ContextOperand(next, Context::PREVIOUS_INDEX)); 1385 __ LoadP(next, ContextOperand(next, Context::PREVIOUS_INDEX));
1386 __ b(&loop); 1386 __ b(&loop);
1387 __ bind(&fast); 1387 __ bind(&fast);
1388 } 1388 }
1389 1389
1390 // All extension objects were empty and it is safe to use a normal global 1390 // All extension objects were empty and it is safe to use a normal global
1391 // load machinery. 1391 // load machinery.
1392 EmitGlobalVariableLoad(proxy, typeof_state); 1392 EmitGlobalVariableLoad(proxy, typeof_mode);
1393 } 1393 }
1394 1394
1395 1395
1396 MemOperand FullCodeGenerator::ContextSlotOperandCheckExtensions(Variable* var, 1396 MemOperand FullCodeGenerator::ContextSlotOperandCheckExtensions(Variable* var,
1397 Label* slow) { 1397 Label* slow) {
1398 DCHECK(var->IsContextSlot()); 1398 DCHECK(var->IsContextSlot());
1399 Register context = cp; 1399 Register context = cp;
1400 Register next = r6; 1400 Register next = r6;
1401 Register temp = r7; 1401 Register temp = r7;
1402 1402
(...skipping 16 matching lines...) Expand all
1419 __ bne(slow); 1419 __ bne(slow);
1420 1420
1421 // This function is used only for loads, not stores, so it's safe to 1421 // This function is used only for loads, not stores, so it's safe to
1422 // return an cp-based operand (the write barrier cannot be allowed to 1422 // return an cp-based operand (the write barrier cannot be allowed to
1423 // destroy the cp register). 1423 // destroy the cp register).
1424 return ContextOperand(context, var->index()); 1424 return ContextOperand(context, var->index());
1425 } 1425 }
1426 1426
1427 1427
1428 void FullCodeGenerator::EmitDynamicLookupFastCase(VariableProxy* proxy, 1428 void FullCodeGenerator::EmitDynamicLookupFastCase(VariableProxy* proxy,
1429 TypeofState typeof_state, 1429 TypeofMode typeof_mode,
1430 Label* slow, Label* done) { 1430 Label* slow, Label* done) {
1431 // Generate fast-case code for variables that might be shadowed by 1431 // Generate fast-case code for variables that might be shadowed by
1432 // eval-introduced variables. Eval is used a lot without 1432 // eval-introduced variables. Eval is used a lot without
1433 // introducing variables. In those cases, we do not want to 1433 // introducing variables. In those cases, we do not want to
1434 // perform a runtime call for all variables in the scope 1434 // perform a runtime call for all variables in the scope
1435 // containing the eval. 1435 // containing the eval.
1436 Variable* var = proxy->var(); 1436 Variable* var = proxy->var();
1437 if (var->mode() == DYNAMIC_GLOBAL) { 1437 if (var->mode() == DYNAMIC_GLOBAL) {
1438 EmitLoadGlobalCheckExtensions(proxy, typeof_state, slow); 1438 EmitLoadGlobalCheckExtensions(proxy, typeof_mode, slow);
1439 __ b(done); 1439 __ b(done);
1440 } else if (var->mode() == DYNAMIC_LOCAL) { 1440 } else if (var->mode() == DYNAMIC_LOCAL) {
1441 Variable* local = var->local_if_not_shadowed(); 1441 Variable* local = var->local_if_not_shadowed();
1442 __ LoadP(r3, ContextSlotOperandCheckExtensions(local, slow)); 1442 __ LoadP(r3, ContextSlotOperandCheckExtensions(local, slow));
1443 if (local->mode() == LET || local->mode() == CONST || 1443 if (local->mode() == LET || local->mode() == CONST ||
1444 local->mode() == CONST_LEGACY) { 1444 local->mode() == CONST_LEGACY) {
1445 __ CompareRoot(r3, Heap::kTheHoleValueRootIndex); 1445 __ CompareRoot(r3, Heap::kTheHoleValueRootIndex);
1446 __ bne(done); 1446 __ bne(done);
1447 if (local->mode() == CONST_LEGACY) { 1447 if (local->mode() == CONST_LEGACY) {
1448 __ LoadRoot(r3, Heap::kUndefinedValueRootIndex); 1448 __ LoadRoot(r3, Heap::kUndefinedValueRootIndex);
1449 } else { // LET || CONST 1449 } else { // LET || CONST
1450 __ mov(r3, Operand(var->name())); 1450 __ mov(r3, Operand(var->name()));
1451 __ push(r3); 1451 __ push(r3);
1452 __ CallRuntime(Runtime::kThrowReferenceError, 1); 1452 __ CallRuntime(Runtime::kThrowReferenceError, 1);
1453 } 1453 }
1454 } 1454 }
1455 __ b(done); 1455 __ b(done);
1456 } 1456 }
1457 } 1457 }
1458 1458
1459 1459
1460 void FullCodeGenerator::EmitGlobalVariableLoad(VariableProxy* proxy, 1460 void FullCodeGenerator::EmitGlobalVariableLoad(VariableProxy* proxy,
1461 TypeofState typeof_state) { 1461 TypeofMode typeof_mode) {
1462 Variable* var = proxy->var(); 1462 Variable* var = proxy->var();
1463 DCHECK(var->IsUnallocatedOrGlobalSlot() || 1463 DCHECK(var->IsUnallocatedOrGlobalSlot() ||
1464 (var->IsLookupSlot() && var->mode() == DYNAMIC_GLOBAL)); 1464 (var->IsLookupSlot() && var->mode() == DYNAMIC_GLOBAL));
1465 if (var->IsGlobalSlot()) { 1465 if (var->IsGlobalSlot()) {
1466 DCHECK(var->index() > 0); 1466 DCHECK(var->index() > 0);
1467 DCHECK(var->IsStaticGlobalObjectProperty()); 1467 DCHECK(var->IsStaticGlobalObjectProperty());
1468 // Each var occupies two slots in the context: for reads and writes. 1468 // Each var occupies two slots in the context: for reads and writes.
1469 int slot_index = var->index(); 1469 int slot_index = var->index();
1470 int depth = scope()->ContextChainLength(var->scope()); 1470 int depth = scope()->ContextChainLength(var->scope());
1471 __ mov(LoadGlobalViaContextDescriptor::DepthRegister(), 1471 __ mov(LoadGlobalViaContextDescriptor::DepthRegister(),
1472 Operand(Smi::FromInt(depth))); 1472 Operand(Smi::FromInt(depth)));
1473 __ mov(LoadGlobalViaContextDescriptor::SlotRegister(), 1473 __ mov(LoadGlobalViaContextDescriptor::SlotRegister(),
1474 Operand(Smi::FromInt(slot_index))); 1474 Operand(Smi::FromInt(slot_index)));
1475 __ mov(LoadGlobalViaContextDescriptor::NameRegister(), 1475 __ mov(LoadGlobalViaContextDescriptor::NameRegister(),
1476 Operand(var->name())); 1476 Operand(var->name()));
1477 LoadGlobalViaContextStub stub(isolate(), depth); 1477 LoadGlobalViaContextStub stub(isolate(), depth);
1478 __ CallStub(&stub); 1478 __ CallStub(&stub);
1479 1479
1480 } else { 1480 } else {
1481 __ LoadP(LoadDescriptor::ReceiverRegister(), GlobalObjectOperand()); 1481 __ LoadP(LoadDescriptor::ReceiverRegister(), GlobalObjectOperand());
1482 __ mov(LoadDescriptor::NameRegister(), Operand(var->name())); 1482 __ mov(LoadDescriptor::NameRegister(), Operand(var->name()));
1483 __ mov(LoadDescriptor::SlotRegister(), 1483 __ mov(LoadDescriptor::SlotRegister(),
1484 Operand(SmiFromSlot(proxy->VariableFeedbackSlot()))); 1484 Operand(SmiFromSlot(proxy->VariableFeedbackSlot())));
1485 // Inside typeof use a regular load, not a contextual load, to avoid 1485 CallLoadIC(typeof_mode);
1486 // a reference error.
1487 CallLoadIC(typeof_state == NOT_INSIDE_TYPEOF ? CONTEXTUAL : NOT_CONTEXTUAL);
1488 } 1486 }
1489 } 1487 }
1490 1488
1491 1489
1492 void FullCodeGenerator::EmitVariableLoad(VariableProxy* proxy, 1490 void FullCodeGenerator::EmitVariableLoad(VariableProxy* proxy,
1493 TypeofState typeof_state) { 1491 TypeofMode typeof_mode) {
1494 // Record position before possible IC call. 1492 // Record position before possible IC call.
1495 SetExpressionPosition(proxy); 1493 SetExpressionPosition(proxy);
1496 PrepareForBailoutForId(proxy->BeforeId(), NO_REGISTERS); 1494 PrepareForBailoutForId(proxy->BeforeId(), NO_REGISTERS);
1497 Variable* var = proxy->var(); 1495 Variable* var = proxy->var();
1498 1496
1499 // Three cases: global variables, lookup variables, and all other types of 1497 // Three cases: global variables, lookup variables, and all other types of
1500 // variables. 1498 // variables.
1501 switch (var->location()) { 1499 switch (var->location()) {
1502 case VariableLocation::GLOBAL: 1500 case VariableLocation::GLOBAL:
1503 case VariableLocation::UNALLOCATED: { 1501 case VariableLocation::UNALLOCATED: {
1504 Comment cmnt(masm_, "[ Global variable"); 1502 Comment cmnt(masm_, "[ Global variable");
1505 EmitGlobalVariableLoad(proxy, typeof_state); 1503 EmitGlobalVariableLoad(proxy, typeof_mode);
1506 context()->Plug(r3); 1504 context()->Plug(r3);
1507 break; 1505 break;
1508 } 1506 }
1509 1507
1510 case VariableLocation::PARAMETER: 1508 case VariableLocation::PARAMETER:
1511 case VariableLocation::LOCAL: 1509 case VariableLocation::LOCAL:
1512 case VariableLocation::CONTEXT: { 1510 case VariableLocation::CONTEXT: {
1513 DCHECK_EQ(NOT_INSIDE_TYPEOF, typeof_state); 1511 DCHECK_EQ(NOT_INSIDE_TYPEOF, typeof_mode);
1514 Comment cmnt(masm_, var->IsContextSlot() ? "[ Context variable" 1512 Comment cmnt(masm_, var->IsContextSlot() ? "[ Context variable"
1515 : "[ Stack variable"); 1513 : "[ Stack variable");
1516 if (var->binding_needs_init()) { 1514 if (var->binding_needs_init()) {
1517 // var->scope() may be NULL when the proxy is located in eval code and 1515 // var->scope() may be NULL when the proxy is located in eval code and
1518 // refers to a potential outside binding. Currently those bindings are 1516 // refers to a potential outside binding. Currently those bindings are
1519 // always looked up dynamically, i.e. in that case 1517 // always looked up dynamically, i.e. in that case
1520 // var->location() == LOOKUP. 1518 // var->location() == LOOKUP.
1521 // always holds. 1519 // always holds.
1522 DCHECK(var->scope() != NULL); 1520 DCHECK(var->scope() != NULL);
1523 1521
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1577 } 1575 }
1578 context()->Plug(var); 1576 context()->Plug(var);
1579 break; 1577 break;
1580 } 1578 }
1581 1579
1582 case VariableLocation::LOOKUP: { 1580 case VariableLocation::LOOKUP: {
1583 Comment cmnt(masm_, "[ Lookup variable"); 1581 Comment cmnt(masm_, "[ Lookup variable");
1584 Label done, slow; 1582 Label done, slow;
1585 // Generate code for loading from variables potentially shadowed 1583 // Generate code for loading from variables potentially shadowed
1586 // by eval-introduced variables. 1584 // by eval-introduced variables.
1587 EmitDynamicLookupFastCase(proxy, typeof_state, &slow, &done); 1585 EmitDynamicLookupFastCase(proxy, typeof_mode, &slow, &done);
1588 __ bind(&slow); 1586 __ bind(&slow);
1589 __ mov(r4, Operand(var->name())); 1587 __ mov(r4, Operand(var->name()));
1590 __ Push(cp, r4); // Context and name. 1588 __ Push(cp, r4); // Context and name.
1591 Runtime::FunctionId function_id = 1589 Runtime::FunctionId function_id =
1592 typeof_state == NOT_INSIDE_TYPEOF 1590 typeof_mode == NOT_INSIDE_TYPEOF
1593 ? Runtime::kLoadLookupSlot 1591 ? Runtime::kLoadLookupSlot
1594 : Runtime::kLoadLookupSlotNoReferenceError; 1592 : Runtime::kLoadLookupSlotNoReferenceError;
1595 __ CallRuntime(function_id, 2); 1593 __ CallRuntime(function_id, 2);
1596 __ bind(&done); 1594 __ bind(&done);
1597 context()->Plug(r3); 1595 context()->Plug(r3);
1598 } 1596 }
1599 } 1597 }
1600 } 1598 }
1601 1599
1602 1600
(...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after
2260 __ LoadP(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 2258 __ LoadP(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
2261 __ Drop(1); // The function is still on the stack; drop it. 2259 __ Drop(1); // The function is still on the stack; drop it.
2262 2260
2263 // if (!result.done) goto l_try; 2261 // if (!result.done) goto l_try;
2264 __ Move(load_receiver, r3); 2262 __ Move(load_receiver, r3);
2265 2263
2266 __ push(load_receiver); // save result 2264 __ push(load_receiver); // save result
2267 __ LoadRoot(load_name, Heap::kdone_stringRootIndex); // "done" 2265 __ LoadRoot(load_name, Heap::kdone_stringRootIndex); // "done"
2268 __ mov(LoadDescriptor::SlotRegister(), 2266 __ mov(LoadDescriptor::SlotRegister(),
2269 Operand(SmiFromSlot(expr->DoneFeedbackSlot()))); 2267 Operand(SmiFromSlot(expr->DoneFeedbackSlot())));
2270 CallLoadIC(NOT_CONTEXTUAL); // r0=result.done 2268 CallLoadIC(NOT_INSIDE_TYPEOF); // r0=result.done
2271 Handle<Code> bool_ic = ToBooleanStub::GetUninitialized(isolate()); 2269 Handle<Code> bool_ic = ToBooleanStub::GetUninitialized(isolate());
2272 CallIC(bool_ic); 2270 CallIC(bool_ic);
2273 __ cmpi(r3, Operand::Zero()); 2271 __ cmpi(r3, Operand::Zero());
2274 __ beq(&l_try); 2272 __ beq(&l_try);
2275 2273
2276 // result.value 2274 // result.value
2277 __ pop(load_receiver); // result 2275 __ pop(load_receiver); // result
2278 __ LoadRoot(load_name, Heap::kvalue_stringRootIndex); // "value" 2276 __ LoadRoot(load_name, Heap::kvalue_stringRootIndex); // "value"
2279 __ mov(LoadDescriptor::SlotRegister(), 2277 __ mov(LoadDescriptor::SlotRegister(),
2280 Operand(SmiFromSlot(expr->ValueFeedbackSlot()))); 2278 Operand(SmiFromSlot(expr->ValueFeedbackSlot())));
2281 CallLoadIC(NOT_CONTEXTUAL); // r3=result.value 2279 CallLoadIC(NOT_INSIDE_TYPEOF); // r3=result.value
2282 context()->DropAndPlug(2, r3); // drop iter and g 2280 context()->DropAndPlug(2, r3); // drop iter and g
2283 break; 2281 break;
2284 } 2282 }
2285 } 2283 }
2286 } 2284 }
2287 2285
2288 2286
2289 void FullCodeGenerator::EmitGeneratorResume( 2287 void FullCodeGenerator::EmitGeneratorResume(
2290 Expression* generator, Expression* value, 2288 Expression* generator, Expression* value,
2291 JSGeneratorObject::ResumeMode resume_mode) { 2289 JSGeneratorObject::ResumeMode resume_mode) {
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
2432 2430
2433 2431
2434 void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) { 2432 void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) {
2435 SetExpressionPosition(prop); 2433 SetExpressionPosition(prop);
2436 Literal* key = prop->key()->AsLiteral(); 2434 Literal* key = prop->key()->AsLiteral();
2437 DCHECK(!prop->IsSuperAccess()); 2435 DCHECK(!prop->IsSuperAccess());
2438 2436
2439 __ mov(LoadDescriptor::NameRegister(), Operand(key->value())); 2437 __ mov(LoadDescriptor::NameRegister(), Operand(key->value()));
2440 __ mov(LoadDescriptor::SlotRegister(), 2438 __ mov(LoadDescriptor::SlotRegister(),
2441 Operand(SmiFromSlot(prop->PropertyFeedbackSlot()))); 2439 Operand(SmiFromSlot(prop->PropertyFeedbackSlot())));
2442 CallLoadIC(NOT_CONTEXTUAL, language_mode()); 2440 CallLoadIC(NOT_INSIDE_TYPEOF, language_mode());
2443 } 2441 }
2444 2442
2445 2443
2446 void FullCodeGenerator::EmitNamedSuperPropertyLoad(Property* prop) { 2444 void FullCodeGenerator::EmitNamedSuperPropertyLoad(Property* prop) {
2447 // Stack: receiver, home_object. 2445 // Stack: receiver, home_object.
2448 SetExpressionPosition(prop); 2446 SetExpressionPosition(prop);
2449 Literal* key = prop->key()->AsLiteral(); 2447 Literal* key = prop->key()->AsLiteral();
2450 DCHECK(!key->value()->IsSmi()); 2448 DCHECK(!key->value()->IsSmi());
2451 DCHECK(prop->IsSuperAccess()); 2449 DCHECK(prop->IsSuperAccess());
2452 2450
(...skipping 2327 matching lines...) Expand 10 before | Expand all | Expand 10 after
4780 // Push the builtins object as the receiver. 4778 // Push the builtins object as the receiver.
4781 Register receiver = LoadDescriptor::ReceiverRegister(); 4779 Register receiver = LoadDescriptor::ReceiverRegister();
4782 __ LoadP(receiver, GlobalObjectOperand()); 4780 __ LoadP(receiver, GlobalObjectOperand());
4783 __ LoadP(receiver, FieldMemOperand(receiver, GlobalObject::kBuiltinsOffset)); 4781 __ LoadP(receiver, FieldMemOperand(receiver, GlobalObject::kBuiltinsOffset));
4784 __ push(receiver); 4782 __ push(receiver);
4785 4783
4786 // Load the function from the receiver. 4784 // Load the function from the receiver.
4787 __ mov(LoadDescriptor::NameRegister(), Operand(expr->name())); 4785 __ mov(LoadDescriptor::NameRegister(), Operand(expr->name()));
4788 __ mov(LoadDescriptor::SlotRegister(), 4786 __ mov(LoadDescriptor::SlotRegister(),
4789 Operand(SmiFromSlot(expr->CallRuntimeFeedbackSlot()))); 4787 Operand(SmiFromSlot(expr->CallRuntimeFeedbackSlot())));
4790 CallLoadIC(NOT_CONTEXTUAL); 4788 CallLoadIC(NOT_INSIDE_TYPEOF);
4791 } 4789 }
4792 4790
4793 4791
4794 void FullCodeGenerator::EmitCallJSRuntimeFunction(CallRuntime* expr) { 4792 void FullCodeGenerator::EmitCallJSRuntimeFunction(CallRuntime* expr) {
4795 ZoneList<Expression*>* args = expr->arguments(); 4793 ZoneList<Expression*>* args = expr->arguments();
4796 int arg_count = args->length(); 4794 int arg_count = args->length();
4797 4795
4798 SetCallPosition(expr, arg_count); 4796 SetCallPosition(expr, arg_count);
4799 CallFunctionStub stub(isolate(), arg_count, NO_CALL_FUNCTION_FLAGS); 4797 CallFunctionStub stub(isolate(), arg_count, NO_CALL_FUNCTION_FLAGS);
4800 __ LoadP(r4, MemOperand(sp, (arg_count + 1) * kPointerSize), r0); 4798 __ LoadP(r4, MemOperand(sp, (arg_count + 1) * kPointerSize), r0);
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after
5582 return ON_STACK_REPLACEMENT; 5580 return ON_STACK_REPLACEMENT;
5583 } 5581 }
5584 5582
5585 DCHECK(interrupt_address == 5583 DCHECK(interrupt_address ==
5586 isolate->builtins()->OsrAfterStackCheck()->entry()); 5584 isolate->builtins()->OsrAfterStackCheck()->entry());
5587 return OSR_AFTER_STACK_CHECK; 5585 return OSR_AFTER_STACK_CHECK;
5588 } 5586 }
5589 } // namespace internal 5587 } // namespace internal
5590 } // namespace v8 5588 } // namespace v8
5591 #endif // V8_TARGET_ARCH_PPC 5589 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « src/ppc/codegen-ppc.h ('k') | src/ppc/lithium-codegen-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698