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

Side by Side Diff: src/x64/full-codegen-x64.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/x64/codegen-x64.h ('k') | src/x64/lithium-codegen-x64.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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_X64 7 #if V8_TARGET_ARCH_X64
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 1315 matching lines...) Expand 10 before | Expand all | Expand 10 after
1326 isolate()->factory()->home_object_symbol()); 1326 isolate()->factory()->home_object_symbol());
1327 __ movp(StoreDescriptor::ValueRegister(), 1327 __ movp(StoreDescriptor::ValueRegister(),
1328 Operand(rsp, offset * kPointerSize)); 1328 Operand(rsp, offset * kPointerSize));
1329 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 1329 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot);
1330 CallStoreIC(); 1330 CallStoreIC();
1331 } 1331 }
1332 } 1332 }
1333 1333
1334 1334
1335 void FullCodeGenerator::EmitLoadGlobalCheckExtensions(VariableProxy* proxy, 1335 void FullCodeGenerator::EmitLoadGlobalCheckExtensions(VariableProxy* proxy,
1336 TypeofState typeof_state, 1336 TypeofMode typeof_mode,
1337 Label* slow) { 1337 Label* slow) {
1338 Register context = rsi; 1338 Register context = rsi;
1339 Register temp = rdx; 1339 Register temp = rdx;
1340 1340
1341 Scope* s = scope(); 1341 Scope* s = scope();
1342 while (s != NULL) { 1342 while (s != NULL) {
1343 if (s->num_heap_slots() > 0) { 1343 if (s->num_heap_slots() > 0) {
1344 if (s->calls_sloppy_eval()) { 1344 if (s->calls_sloppy_eval()) {
1345 // Check that extension is NULL. 1345 // Check that extension is NULL.
1346 __ cmpp(ContextOperand(context, Context::EXTENSION_INDEX), 1346 __ cmpp(ContextOperand(context, Context::EXTENSION_INDEX),
(...skipping 29 matching lines...) Expand all
1376 __ cmpp(ContextOperand(temp, Context::EXTENSION_INDEX), Immediate(0)); 1376 __ cmpp(ContextOperand(temp, Context::EXTENSION_INDEX), Immediate(0));
1377 __ j(not_equal, slow); 1377 __ j(not_equal, slow);
1378 // Load next context in chain. 1378 // Load next context in chain.
1379 __ movp(temp, ContextOperand(temp, Context::PREVIOUS_INDEX)); 1379 __ movp(temp, ContextOperand(temp, Context::PREVIOUS_INDEX));
1380 __ jmp(&next); 1380 __ jmp(&next);
1381 __ bind(&fast); 1381 __ bind(&fast);
1382 } 1382 }
1383 1383
1384 // All extension objects were empty and it is safe to use a normal global 1384 // All extension objects were empty and it is safe to use a normal global
1385 // load machinery. 1385 // load machinery.
1386 EmitGlobalVariableLoad(proxy, typeof_state); 1386 EmitGlobalVariableLoad(proxy, typeof_mode);
1387 } 1387 }
1388 1388
1389 1389
1390 MemOperand FullCodeGenerator::ContextSlotOperandCheckExtensions(Variable* var, 1390 MemOperand FullCodeGenerator::ContextSlotOperandCheckExtensions(Variable* var,
1391 Label* slow) { 1391 Label* slow) {
1392 DCHECK(var->IsContextSlot()); 1392 DCHECK(var->IsContextSlot());
1393 Register context = rsi; 1393 Register context = rsi;
1394 Register temp = rbx; 1394 Register temp = rbx;
1395 1395
1396 for (Scope* s = scope(); s != var->scope(); s = s->outer_scope()) { 1396 for (Scope* s = scope(); s != var->scope(); s = s->outer_scope()) {
(...skipping 14 matching lines...) Expand all
1411 __ j(not_equal, slow); 1411 __ j(not_equal, slow);
1412 1412
1413 // This function is used only for loads, not stores, so it's safe to 1413 // This function is used only for loads, not stores, so it's safe to
1414 // return an rsi-based operand (the write barrier cannot be allowed to 1414 // return an rsi-based operand (the write barrier cannot be allowed to
1415 // destroy the rsi register). 1415 // destroy the rsi register).
1416 return ContextOperand(context, var->index()); 1416 return ContextOperand(context, var->index());
1417 } 1417 }
1418 1418
1419 1419
1420 void FullCodeGenerator::EmitDynamicLookupFastCase(VariableProxy* proxy, 1420 void FullCodeGenerator::EmitDynamicLookupFastCase(VariableProxy* proxy,
1421 TypeofState typeof_state, 1421 TypeofMode typeof_mode,
1422 Label* slow, 1422 Label* slow, Label* done) {
1423 Label* done) {
1424 // Generate fast-case code for variables that might be shadowed by 1423 // Generate fast-case code for variables that might be shadowed by
1425 // eval-introduced variables. Eval is used a lot without 1424 // eval-introduced variables. Eval is used a lot without
1426 // introducing variables. In those cases, we do not want to 1425 // introducing variables. In those cases, we do not want to
1427 // perform a runtime call for all variables in the scope 1426 // perform a runtime call for all variables in the scope
1428 // containing the eval. 1427 // containing the eval.
1429 Variable* var = proxy->var(); 1428 Variable* var = proxy->var();
1430 if (var->mode() == DYNAMIC_GLOBAL) { 1429 if (var->mode() == DYNAMIC_GLOBAL) {
1431 EmitLoadGlobalCheckExtensions(proxy, typeof_state, slow); 1430 EmitLoadGlobalCheckExtensions(proxy, typeof_mode, slow);
1432 __ jmp(done); 1431 __ jmp(done);
1433 } else if (var->mode() == DYNAMIC_LOCAL) { 1432 } else if (var->mode() == DYNAMIC_LOCAL) {
1434 Variable* local = var->local_if_not_shadowed(); 1433 Variable* local = var->local_if_not_shadowed();
1435 __ movp(rax, ContextSlotOperandCheckExtensions(local, slow)); 1434 __ movp(rax, ContextSlotOperandCheckExtensions(local, slow));
1436 if (local->mode() == LET || local->mode() == CONST || 1435 if (local->mode() == LET || local->mode() == CONST ||
1437 local->mode() == CONST_LEGACY) { 1436 local->mode() == CONST_LEGACY) {
1438 __ CompareRoot(rax, Heap::kTheHoleValueRootIndex); 1437 __ CompareRoot(rax, Heap::kTheHoleValueRootIndex);
1439 __ j(not_equal, done); 1438 __ j(not_equal, done);
1440 if (local->mode() == CONST_LEGACY) { 1439 if (local->mode() == CONST_LEGACY) {
1441 __ LoadRoot(rax, Heap::kUndefinedValueRootIndex); 1440 __ LoadRoot(rax, Heap::kUndefinedValueRootIndex);
1442 } else { // LET || CONST 1441 } else { // LET || CONST
1443 __ Push(var->name()); 1442 __ Push(var->name());
1444 __ CallRuntime(Runtime::kThrowReferenceError, 1); 1443 __ CallRuntime(Runtime::kThrowReferenceError, 1);
1445 } 1444 }
1446 } 1445 }
1447 __ jmp(done); 1446 __ jmp(done);
1448 } 1447 }
1449 } 1448 }
1450 1449
1451 1450
1452 void FullCodeGenerator::EmitGlobalVariableLoad(VariableProxy* proxy, 1451 void FullCodeGenerator::EmitGlobalVariableLoad(VariableProxy* proxy,
1453 TypeofState typeof_state) { 1452 TypeofMode typeof_mode) {
1454 Variable* var = proxy->var(); 1453 Variable* var = proxy->var();
1455 DCHECK(var->IsUnallocatedOrGlobalSlot() || 1454 DCHECK(var->IsUnallocatedOrGlobalSlot() ||
1456 (var->IsLookupSlot() && var->mode() == DYNAMIC_GLOBAL)); 1455 (var->IsLookupSlot() && var->mode() == DYNAMIC_GLOBAL));
1457 if (var->IsGlobalSlot()) { 1456 if (var->IsGlobalSlot()) {
1458 DCHECK(var->index() > 0); 1457 DCHECK(var->index() > 0);
1459 DCHECK(var->IsStaticGlobalObjectProperty()); 1458 DCHECK(var->IsStaticGlobalObjectProperty());
1460 // Each var occupies two slots in the context: for reads and writes. 1459 // Each var occupies two slots in the context: for reads and writes.
1461 int slot_index = var->index(); 1460 int slot_index = var->index();
1462 int depth = scope()->ContextChainLength(var->scope()); 1461 int depth = scope()->ContextChainLength(var->scope());
1463 __ Move(LoadGlobalViaContextDescriptor::DepthRegister(), 1462 __ Move(LoadGlobalViaContextDescriptor::DepthRegister(),
1464 Smi::FromInt(depth)); 1463 Smi::FromInt(depth));
1465 __ Move(LoadGlobalViaContextDescriptor::SlotRegister(), 1464 __ Move(LoadGlobalViaContextDescriptor::SlotRegister(),
1466 Smi::FromInt(slot_index)); 1465 Smi::FromInt(slot_index));
1467 __ Move(LoadGlobalViaContextDescriptor::NameRegister(), var->name()); 1466 __ Move(LoadGlobalViaContextDescriptor::NameRegister(), var->name());
1468 LoadGlobalViaContextStub stub(isolate(), depth); 1467 LoadGlobalViaContextStub stub(isolate(), depth);
1469 __ CallStub(&stub); 1468 __ CallStub(&stub);
1470 1469
1471 } else { 1470 } else {
1472 __ Move(LoadDescriptor::NameRegister(), var->name()); 1471 __ Move(LoadDescriptor::NameRegister(), var->name());
1473 __ movp(LoadDescriptor::ReceiverRegister(), GlobalObjectOperand()); 1472 __ movp(LoadDescriptor::ReceiverRegister(), GlobalObjectOperand());
1474 __ Move(LoadDescriptor::SlotRegister(), 1473 __ Move(LoadDescriptor::SlotRegister(),
1475 SmiFromSlot(proxy->VariableFeedbackSlot())); 1474 SmiFromSlot(proxy->VariableFeedbackSlot()));
1476 // Inside typeof use a regular load, not a contextual load, to avoid 1475 CallLoadIC(typeof_mode);
1477 // a reference error.
1478 CallLoadIC(typeof_state == NOT_INSIDE_TYPEOF ? CONTEXTUAL : NOT_CONTEXTUAL);
1479 } 1476 }
1480 } 1477 }
1481 1478
1482 1479
1483 void FullCodeGenerator::EmitVariableLoad(VariableProxy* proxy, 1480 void FullCodeGenerator::EmitVariableLoad(VariableProxy* proxy,
1484 TypeofState typeof_state) { 1481 TypeofMode typeof_mode) {
1485 // Record position before possible IC call. 1482 // Record position before possible IC call.
1486 SetExpressionPosition(proxy); 1483 SetExpressionPosition(proxy);
1487 PrepareForBailoutForId(proxy->BeforeId(), NO_REGISTERS); 1484 PrepareForBailoutForId(proxy->BeforeId(), NO_REGISTERS);
1488 Variable* var = proxy->var(); 1485 Variable* var = proxy->var();
1489 1486
1490 // Three cases: global variables, lookup variables, and all other types of 1487 // Three cases: global variables, lookup variables, and all other types of
1491 // variables. 1488 // variables.
1492 switch (var->location()) { 1489 switch (var->location()) {
1493 case VariableLocation::GLOBAL: 1490 case VariableLocation::GLOBAL:
1494 case VariableLocation::UNALLOCATED: { 1491 case VariableLocation::UNALLOCATED: {
1495 Comment cmnt(masm_, "[ Global variable"); 1492 Comment cmnt(masm_, "[ Global variable");
1496 EmitGlobalVariableLoad(proxy, typeof_state); 1493 EmitGlobalVariableLoad(proxy, typeof_mode);
1497 context()->Plug(rax); 1494 context()->Plug(rax);
1498 break; 1495 break;
1499 } 1496 }
1500 1497
1501 case VariableLocation::PARAMETER: 1498 case VariableLocation::PARAMETER:
1502 case VariableLocation::LOCAL: 1499 case VariableLocation::LOCAL:
1503 case VariableLocation::CONTEXT: { 1500 case VariableLocation::CONTEXT: {
1504 DCHECK_EQ(NOT_INSIDE_TYPEOF, typeof_state); 1501 DCHECK_EQ(NOT_INSIDE_TYPEOF, typeof_mode);
1505 Comment cmnt(masm_, var->IsContextSlot() ? "[ Context slot" 1502 Comment cmnt(masm_, var->IsContextSlot() ? "[ Context slot"
1506 : "[ Stack slot"); 1503 : "[ Stack slot");
1507 if (var->binding_needs_init()) { 1504 if (var->binding_needs_init()) {
1508 // var->scope() may be NULL when the proxy is located in eval code and 1505 // var->scope() may be NULL when the proxy is located in eval code and
1509 // refers to a potential outside binding. Currently those bindings are 1506 // refers to a potential outside binding. Currently those bindings are
1510 // always looked up dynamically, i.e. in that case 1507 // always looked up dynamically, i.e. in that case
1511 // var->location() == LOOKUP. 1508 // var->location() == LOOKUP.
1512 // always holds. 1509 // always holds.
1513 DCHECK(var->scope() != NULL); 1510 DCHECK(var->scope() != NULL);
1514 1511
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1567 } 1564 }
1568 context()->Plug(var); 1565 context()->Plug(var);
1569 break; 1566 break;
1570 } 1567 }
1571 1568
1572 case VariableLocation::LOOKUP: { 1569 case VariableLocation::LOOKUP: {
1573 Comment cmnt(masm_, "[ Lookup slot"); 1570 Comment cmnt(masm_, "[ Lookup slot");
1574 Label done, slow; 1571 Label done, slow;
1575 // Generate code for loading from variables potentially shadowed 1572 // Generate code for loading from variables potentially shadowed
1576 // by eval-introduced variables. 1573 // by eval-introduced variables.
1577 EmitDynamicLookupFastCase(proxy, typeof_state, &slow, &done); 1574 EmitDynamicLookupFastCase(proxy, typeof_mode, &slow, &done);
1578 __ bind(&slow); 1575 __ bind(&slow);
1579 __ Push(rsi); // Context. 1576 __ Push(rsi); // Context.
1580 __ Push(var->name()); 1577 __ Push(var->name());
1581 Runtime::FunctionId function_id = 1578 Runtime::FunctionId function_id =
1582 typeof_state == NOT_INSIDE_TYPEOF 1579 typeof_mode == NOT_INSIDE_TYPEOF
1583 ? Runtime::kLoadLookupSlot 1580 ? Runtime::kLoadLookupSlot
1584 : Runtime::kLoadLookupSlotNoReferenceError; 1581 : Runtime::kLoadLookupSlotNoReferenceError;
1585 __ CallRuntime(function_id, 2); 1582 __ CallRuntime(function_id, 2);
1586 __ bind(&done); 1583 __ bind(&done);
1587 context()->Plug(rax); 1584 context()->Plug(rax);
1588 break; 1585 break;
1589 } 1586 }
1590 } 1587 }
1591 } 1588 }
1592 1589
(...skipping 659 matching lines...) Expand 10 before | Expand all | Expand 10 after
2252 __ movp(rsi, Operand(rbp, StandardFrameConstants::kContextOffset)); 2249 __ movp(rsi, Operand(rbp, StandardFrameConstants::kContextOffset));
2253 __ Drop(1); // The function is still on the stack; drop it. 2250 __ Drop(1); // The function is still on the stack; drop it.
2254 2251
2255 // if (!result.done) goto l_try; 2252 // if (!result.done) goto l_try;
2256 __ bind(&l_loop); 2253 __ bind(&l_loop);
2257 __ Move(load_receiver, rax); 2254 __ Move(load_receiver, rax);
2258 __ Push(load_receiver); // save result 2255 __ Push(load_receiver); // save result
2259 __ LoadRoot(load_name, Heap::kdone_stringRootIndex); // "done" 2256 __ LoadRoot(load_name, Heap::kdone_stringRootIndex); // "done"
2260 __ Move(LoadDescriptor::SlotRegister(), 2257 __ Move(LoadDescriptor::SlotRegister(),
2261 SmiFromSlot(expr->DoneFeedbackSlot())); 2258 SmiFromSlot(expr->DoneFeedbackSlot()));
2262 CallLoadIC(NOT_CONTEXTUAL); // rax=result.done 2259 CallLoadIC(NOT_INSIDE_TYPEOF); // rax=result.done
2263 Handle<Code> bool_ic = ToBooleanStub::GetUninitialized(isolate()); 2260 Handle<Code> bool_ic = ToBooleanStub::GetUninitialized(isolate());
2264 CallIC(bool_ic); 2261 CallIC(bool_ic);
2265 __ testp(result_register(), result_register()); 2262 __ testp(result_register(), result_register());
2266 __ j(zero, &l_try); 2263 __ j(zero, &l_try);
2267 2264
2268 // result.value 2265 // result.value
2269 __ Pop(load_receiver); // result 2266 __ Pop(load_receiver); // result
2270 __ LoadRoot(load_name, Heap::kvalue_stringRootIndex); // "value" 2267 __ LoadRoot(load_name, Heap::kvalue_stringRootIndex); // "value"
2271 __ Move(LoadDescriptor::SlotRegister(), 2268 __ Move(LoadDescriptor::SlotRegister(),
2272 SmiFromSlot(expr->ValueFeedbackSlot())); 2269 SmiFromSlot(expr->ValueFeedbackSlot()));
2273 CallLoadIC(NOT_CONTEXTUAL); // result.value in rax 2270 CallLoadIC(NOT_INSIDE_TYPEOF); // result.value in rax
2274 context()->DropAndPlug(2, rax); // drop iter and g 2271 context()->DropAndPlug(2, rax); // drop iter and g
2275 break; 2272 break;
2276 } 2273 }
2277 } 2274 }
2278 } 2275 }
2279 2276
2280 2277
2281 void FullCodeGenerator::EmitGeneratorResume(Expression *generator, 2278 void FullCodeGenerator::EmitGeneratorResume(Expression *generator,
2282 Expression *value, 2279 Expression *value,
2283 JSGeneratorObject::ResumeMode resume_mode) { 2280 JSGeneratorObject::ResumeMode resume_mode) {
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
2403 2400
2404 2401
2405 void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) { 2402 void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) {
2406 SetExpressionPosition(prop); 2403 SetExpressionPosition(prop);
2407 Literal* key = prop->key()->AsLiteral(); 2404 Literal* key = prop->key()->AsLiteral();
2408 DCHECK(!prop->IsSuperAccess()); 2405 DCHECK(!prop->IsSuperAccess());
2409 2406
2410 __ Move(LoadDescriptor::NameRegister(), key->value()); 2407 __ Move(LoadDescriptor::NameRegister(), key->value());
2411 __ Move(LoadDescriptor::SlotRegister(), 2408 __ Move(LoadDescriptor::SlotRegister(),
2412 SmiFromSlot(prop->PropertyFeedbackSlot())); 2409 SmiFromSlot(prop->PropertyFeedbackSlot()));
2413 CallLoadIC(NOT_CONTEXTUAL, language_mode()); 2410 CallLoadIC(NOT_INSIDE_TYPEOF, language_mode());
2414 } 2411 }
2415 2412
2416 2413
2417 void FullCodeGenerator::EmitNamedSuperPropertyLoad(Property* prop) { 2414 void FullCodeGenerator::EmitNamedSuperPropertyLoad(Property* prop) {
2418 // Stack: receiver, home_object 2415 // Stack: receiver, home_object
2419 SetExpressionPosition(prop); 2416 SetExpressionPosition(prop);
2420 Literal* key = prop->key()->AsLiteral(); 2417 Literal* key = prop->key()->AsLiteral();
2421 DCHECK(!key->value()->IsSmi()); 2418 DCHECK(!key->value()->IsSmi());
2422 DCHECK(prop->IsSuperAccess()); 2419 DCHECK(prop->IsSuperAccess());
2423 2420
(...skipping 2283 matching lines...) Expand 10 before | Expand all | Expand 10 after
4707 void FullCodeGenerator::EmitLoadJSRuntimeFunction(CallRuntime* expr) { 4704 void FullCodeGenerator::EmitLoadJSRuntimeFunction(CallRuntime* expr) {
4708 // Push the builtins object as receiver. 4705 // Push the builtins object as receiver.
4709 __ movp(rax, GlobalObjectOperand()); 4706 __ movp(rax, GlobalObjectOperand());
4710 __ Push(FieldOperand(rax, GlobalObject::kBuiltinsOffset)); 4707 __ Push(FieldOperand(rax, GlobalObject::kBuiltinsOffset));
4711 4708
4712 // Load the function from the receiver. 4709 // Load the function from the receiver.
4713 __ movp(LoadDescriptor::ReceiverRegister(), Operand(rsp, 0)); 4710 __ movp(LoadDescriptor::ReceiverRegister(), Operand(rsp, 0));
4714 __ Move(LoadDescriptor::NameRegister(), expr->name()); 4711 __ Move(LoadDescriptor::NameRegister(), expr->name());
4715 __ Move(LoadDescriptor::SlotRegister(), 4712 __ Move(LoadDescriptor::SlotRegister(),
4716 SmiFromSlot(expr->CallRuntimeFeedbackSlot())); 4713 SmiFromSlot(expr->CallRuntimeFeedbackSlot()));
4717 CallLoadIC(NOT_CONTEXTUAL); 4714 CallLoadIC(NOT_INSIDE_TYPEOF);
4718 } 4715 }
4719 4716
4720 4717
4721 void FullCodeGenerator::EmitCallJSRuntimeFunction(CallRuntime* expr) { 4718 void FullCodeGenerator::EmitCallJSRuntimeFunction(CallRuntime* expr) {
4722 ZoneList<Expression*>* args = expr->arguments(); 4719 ZoneList<Expression*>* args = expr->arguments();
4723 int arg_count = args->length(); 4720 int arg_count = args->length();
4724 4721
4725 SetCallPosition(expr, arg_count); 4722 SetCallPosition(expr, arg_count);
4726 CallFunctionStub stub(isolate(), arg_count, NO_CALL_FUNCTION_FLAGS); 4723 CallFunctionStub stub(isolate(), arg_count, NO_CALL_FUNCTION_FLAGS);
4727 __ movp(rdi, Operand(rsp, (arg_count + 1) * kPointerSize)); 4724 __ movp(rdi, Operand(rsp, (arg_count + 1) * kPointerSize));
(...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after
5519 Assembler::target_address_at(call_target_address, 5516 Assembler::target_address_at(call_target_address,
5520 unoptimized_code)); 5517 unoptimized_code));
5521 return OSR_AFTER_STACK_CHECK; 5518 return OSR_AFTER_STACK_CHECK;
5522 } 5519 }
5523 5520
5524 5521
5525 } // namespace internal 5522 } // namespace internal
5526 } // namespace v8 5523 } // namespace v8
5527 5524
5528 #endif // V8_TARGET_ARCH_X64 5525 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/x64/codegen-x64.h ('k') | src/x64/lithium-codegen-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698