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

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

Issue 1424153003: VectorICs: Remove --vector-stores flag. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Response to Hannes comment. Created 5 years, 1 month 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/full-codegen/mips64/full-codegen-mips64.cc ('k') | src/heap/heap.h » ('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_X64 5 #if V8_TARGET_ARCH_X64
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/debug/debug.h" 10 #include "src/debug/debug.h"
(...skipping 1175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1186 1186
1187 1187
1188 void FullCodeGenerator::EmitSetHomeObject(Expression* initializer, int offset, 1188 void FullCodeGenerator::EmitSetHomeObject(Expression* initializer, int offset,
1189 FeedbackVectorSlot slot) { 1189 FeedbackVectorSlot slot) {
1190 DCHECK(NeedsHomeObject(initializer)); 1190 DCHECK(NeedsHomeObject(initializer));
1191 __ movp(StoreDescriptor::ReceiverRegister(), Operand(rsp, 0)); 1191 __ movp(StoreDescriptor::ReceiverRegister(), Operand(rsp, 0));
1192 __ Move(StoreDescriptor::NameRegister(), 1192 __ Move(StoreDescriptor::NameRegister(),
1193 isolate()->factory()->home_object_symbol()); 1193 isolate()->factory()->home_object_symbol());
1194 __ movp(StoreDescriptor::ValueRegister(), 1194 __ movp(StoreDescriptor::ValueRegister(),
1195 Operand(rsp, offset * kPointerSize)); 1195 Operand(rsp, offset * kPointerSize));
1196 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 1196 EmitLoadStoreICSlot(slot);
1197 CallStoreIC(); 1197 CallStoreIC();
1198 } 1198 }
1199 1199
1200 1200
1201 void FullCodeGenerator::EmitSetHomeObjectAccumulator(Expression* initializer, 1201 void FullCodeGenerator::EmitSetHomeObjectAccumulator(Expression* initializer,
1202 int offset, 1202 int offset,
1203 FeedbackVectorSlot slot) { 1203 FeedbackVectorSlot slot) {
1204 DCHECK(NeedsHomeObject(initializer)); 1204 DCHECK(NeedsHomeObject(initializer));
1205 __ movp(StoreDescriptor::ReceiverRegister(), rax); 1205 __ movp(StoreDescriptor::ReceiverRegister(), rax);
1206 __ Move(StoreDescriptor::NameRegister(), 1206 __ Move(StoreDescriptor::NameRegister(),
1207 isolate()->factory()->home_object_symbol()); 1207 isolate()->factory()->home_object_symbol());
1208 __ movp(StoreDescriptor::ValueRegister(), 1208 __ movp(StoreDescriptor::ValueRegister(),
1209 Operand(rsp, offset * kPointerSize)); 1209 Operand(rsp, offset * kPointerSize));
1210 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 1210 EmitLoadStoreICSlot(slot);
1211 CallStoreIC(); 1211 CallStoreIC();
1212 } 1212 }
1213 1213
1214 1214
1215 void FullCodeGenerator::EmitLoadGlobalCheckExtensions(VariableProxy* proxy, 1215 void FullCodeGenerator::EmitLoadGlobalCheckExtensions(VariableProxy* proxy,
1216 TypeofMode typeof_mode, 1216 TypeofMode typeof_mode,
1217 Label* slow) { 1217 Label* slow) {
1218 Register context = rsi; 1218 Register context = rsi;
1219 Register temp = rdx; 1219 Register temp = rdx;
1220 1220
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
1528 // Fall through. 1528 // Fall through.
1529 case ObjectLiteral::Property::COMPUTED: 1529 case ObjectLiteral::Property::COMPUTED:
1530 // It is safe to use [[Put]] here because the boilerplate already 1530 // It is safe to use [[Put]] here because the boilerplate already
1531 // contains computed properties with an uninitialized value. 1531 // contains computed properties with an uninitialized value.
1532 if (key->value()->IsInternalizedString()) { 1532 if (key->value()->IsInternalizedString()) {
1533 if (property->emit_store()) { 1533 if (property->emit_store()) {
1534 VisitForAccumulatorValue(value); 1534 VisitForAccumulatorValue(value);
1535 DCHECK(StoreDescriptor::ValueRegister().is(rax)); 1535 DCHECK(StoreDescriptor::ValueRegister().is(rax));
1536 __ Move(StoreDescriptor::NameRegister(), key->value()); 1536 __ Move(StoreDescriptor::NameRegister(), key->value());
1537 __ movp(StoreDescriptor::ReceiverRegister(), Operand(rsp, 0)); 1537 __ movp(StoreDescriptor::ReceiverRegister(), Operand(rsp, 0));
1538 if (FLAG_vector_stores) { 1538 EmitLoadStoreICSlot(property->GetSlot(0));
1539 EmitLoadStoreICSlot(property->GetSlot(0)); 1539 CallStoreIC();
1540 CallStoreIC();
1541 } else {
1542 CallStoreIC(key->LiteralFeedbackId());
1543 }
1544 PrepareForBailoutForId(key->id(), NO_REGISTERS); 1540 PrepareForBailoutForId(key->id(), NO_REGISTERS);
1545 1541
1546 if (NeedsHomeObject(value)) { 1542 if (NeedsHomeObject(value)) {
1547 EmitSetHomeObjectAccumulator(value, 0, property->GetSlot(1)); 1543 EmitSetHomeObjectAccumulator(value, 0, property->GetSlot(1));
1548 } 1544 }
1549 } else { 1545 } else {
1550 VisitForEffect(value); 1546 VisitForEffect(value);
1551 } 1547 }
1552 break; 1548 break;
1553 } 1549 }
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
1717 // is already set in the cloned array. 1713 // is already set in the cloned array.
1718 if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue; 1714 if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue;
1719 1715
1720 if (!result_saved) { 1716 if (!result_saved) {
1721 __ Push(rax); // array literal 1717 __ Push(rax); // array literal
1722 __ Push(Smi::FromInt(expr->literal_index())); 1718 __ Push(Smi::FromInt(expr->literal_index()));
1723 result_saved = true; 1719 result_saved = true;
1724 } 1720 }
1725 VisitForAccumulatorValue(subexpr); 1721 VisitForAccumulatorValue(subexpr);
1726 1722
1727 if (FLAG_vector_stores) { 1723 __ Move(StoreDescriptor::NameRegister(), Smi::FromInt(array_index));
1728 __ Move(StoreDescriptor::NameRegister(), Smi::FromInt(array_index)); 1724 __ movp(StoreDescriptor::ReceiverRegister(), Operand(rsp, kPointerSize));
1729 __ movp(StoreDescriptor::ReceiverRegister(), Operand(rsp, kPointerSize)); 1725 EmitLoadStoreICSlot(expr->LiteralFeedbackSlot());
1730 EmitLoadStoreICSlot(expr->LiteralFeedbackSlot()); 1726 Handle<Code> ic =
1731 Handle<Code> ic = 1727 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code();
1732 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code(); 1728 CallIC(ic);
1733 CallIC(ic);
1734 } else if (has_constant_fast_elements) {
1735 // Fast-case array literal with ElementsKind of FAST_*_ELEMENTS, they
1736 // cannot transition and don't need to call the runtime stub.
1737 int offset = FixedArray::kHeaderSize + (array_index * kPointerSize);
1738 __ movp(rbx, Operand(rsp, kPointerSize)); // Copy of array literal.
1739 __ movp(rbx, FieldOperand(rbx, JSObject::kElementsOffset));
1740 // Store the subexpression value in the array's elements.
1741 __ movp(FieldOperand(rbx, offset), result_register());
1742 // Update the write barrier for the array store.
1743 __ RecordWriteField(rbx, offset, result_register(), rcx,
1744 kDontSaveFPRegs,
1745 EMIT_REMEMBERED_SET,
1746 INLINE_SMI_CHECK);
1747 } else {
1748 // Store the subexpression value in the array's elements.
1749 __ Move(rcx, Smi::FromInt(array_index));
1750 StoreArrayLiteralElementStub stub(isolate());
1751 __ CallStub(&stub);
1752 }
1753 1729
1754 PrepareForBailoutForId(expr->GetIdForElement(array_index), NO_REGISTERS); 1730 PrepareForBailoutForId(expr->GetIdForElement(array_index), NO_REGISTERS);
1755 } 1731 }
1756 1732
1757 // In case the array literal contains spread expressions it has two parts. The 1733 // In case the array literal contains spread expressions it has two parts. The
1758 // first part is the "static" array which has a literal index is handled 1734 // first part is the "static" array which has a literal index is handled
1759 // above. The second part is the part after the first spread expression 1735 // above. The second part is the part after the first spread expression
1760 // (inclusive) and these elements gets appended to the array. Note that the 1736 // (inclusive) and these elements gets appended to the array. Note that the
1761 // number elements an iterable produces is unknown ahead of time. 1737 // number elements an iterable produces is unknown ahead of time.
1762 if (array_index < length && result_saved) { 1738 if (array_index < length && result_saved) {
(...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after
2400 EmitVariableAssignment(var, Token::ASSIGN, slot); 2376 EmitVariableAssignment(var, Token::ASSIGN, slot);
2401 break; 2377 break;
2402 } 2378 }
2403 case NAMED_PROPERTY: { 2379 case NAMED_PROPERTY: {
2404 __ Push(rax); // Preserve value. 2380 __ Push(rax); // Preserve value.
2405 VisitForAccumulatorValue(prop->obj()); 2381 VisitForAccumulatorValue(prop->obj());
2406 __ Move(StoreDescriptor::ReceiverRegister(), rax); 2382 __ Move(StoreDescriptor::ReceiverRegister(), rax);
2407 __ Pop(StoreDescriptor::ValueRegister()); // Restore value. 2383 __ Pop(StoreDescriptor::ValueRegister()); // Restore value.
2408 __ Move(StoreDescriptor::NameRegister(), 2384 __ Move(StoreDescriptor::NameRegister(),
2409 prop->key()->AsLiteral()->value()); 2385 prop->key()->AsLiteral()->value());
2410 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 2386 EmitLoadStoreICSlot(slot);
2411 CallStoreIC(); 2387 CallStoreIC();
2412 break; 2388 break;
2413 } 2389 }
2414 case NAMED_SUPER_PROPERTY: { 2390 case NAMED_SUPER_PROPERTY: {
2415 __ Push(rax); 2391 __ Push(rax);
2416 VisitForStackValue(prop->obj()->AsSuperPropertyReference()->this_var()); 2392 VisitForStackValue(prop->obj()->AsSuperPropertyReference()->this_var());
2417 VisitForAccumulatorValue( 2393 VisitForAccumulatorValue(
2418 prop->obj()->AsSuperPropertyReference()->home_object()); 2394 prop->obj()->AsSuperPropertyReference()->home_object());
2419 // stack: value, this; rax: home_object 2395 // stack: value, this; rax: home_object
2420 Register scratch = rcx; 2396 Register scratch = rcx;
(...skipping 27 matching lines...) Expand all
2448 EmitKeyedSuperPropertyStore(prop); 2424 EmitKeyedSuperPropertyStore(prop);
2449 break; 2425 break;
2450 } 2426 }
2451 case KEYED_PROPERTY: { 2427 case KEYED_PROPERTY: {
2452 __ Push(rax); // Preserve value. 2428 __ Push(rax); // Preserve value.
2453 VisitForStackValue(prop->obj()); 2429 VisitForStackValue(prop->obj());
2454 VisitForAccumulatorValue(prop->key()); 2430 VisitForAccumulatorValue(prop->key());
2455 __ Move(StoreDescriptor::NameRegister(), rax); 2431 __ Move(StoreDescriptor::NameRegister(), rax);
2456 __ Pop(StoreDescriptor::ReceiverRegister()); 2432 __ Pop(StoreDescriptor::ReceiverRegister());
2457 __ Pop(StoreDescriptor::ValueRegister()); // Restore value. 2433 __ Pop(StoreDescriptor::ValueRegister()); // Restore value.
2458 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 2434 EmitLoadStoreICSlot(slot);
2459 Handle<Code> ic = 2435 Handle<Code> ic =
2460 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code(); 2436 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code();
2461 CallIC(ic); 2437 CallIC(ic);
2462 break; 2438 break;
2463 } 2439 }
2464 } 2440 }
2465 context()->Plug(rax); 2441 context()->Plug(rax);
2466 } 2442 }
2467 2443
2468 2444
2469 void FullCodeGenerator::EmitStoreToStackLocalOrContextSlot( 2445 void FullCodeGenerator::EmitStoreToStackLocalOrContextSlot(
2470 Variable* var, MemOperand location) { 2446 Variable* var, MemOperand location) {
2471 __ movp(location, rax); 2447 __ movp(location, rax);
2472 if (var->IsContextSlot()) { 2448 if (var->IsContextSlot()) {
2473 __ movp(rdx, rax); 2449 __ movp(rdx, rax);
2474 __ RecordWriteContextSlot( 2450 __ RecordWriteContextSlot(
2475 rcx, Context::SlotOffset(var->index()), rdx, rbx, kDontSaveFPRegs); 2451 rcx, Context::SlotOffset(var->index()), rdx, rbx, kDontSaveFPRegs);
2476 } 2452 }
2477 } 2453 }
2478 2454
2479 2455
2480 void FullCodeGenerator::EmitVariableAssignment(Variable* var, Token::Value op, 2456 void FullCodeGenerator::EmitVariableAssignment(Variable* var, Token::Value op,
2481 FeedbackVectorSlot slot) { 2457 FeedbackVectorSlot slot) {
2482 if (var->IsUnallocated()) { 2458 if (var->IsUnallocated()) {
2483 // Global var, const, or let. 2459 // Global var, const, or let.
2484 __ Move(StoreDescriptor::NameRegister(), var->name()); 2460 __ Move(StoreDescriptor::NameRegister(), var->name());
2485 __ movp(StoreDescriptor::ReceiverRegister(), GlobalObjectOperand()); 2461 __ movp(StoreDescriptor::ReceiverRegister(), GlobalObjectOperand());
2486 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 2462 EmitLoadStoreICSlot(slot);
2487 CallStoreIC(); 2463 CallStoreIC();
2488 2464
2489 } else if (var->mode() == LET && op != Token::INIT) { 2465 } else if (var->mode() == LET && op != Token::INIT) {
2490 // Non-initializing assignment to let variable needs a write barrier. 2466 // Non-initializing assignment to let variable needs a write barrier.
2491 DCHECK(!var->IsLookupSlot()); 2467 DCHECK(!var->IsLookupSlot());
2492 DCHECK(var->IsStackAllocated() || var->IsContextSlot()); 2468 DCHECK(var->IsStackAllocated() || var->IsContextSlot());
2493 Label assign; 2469 Label assign;
2494 MemOperand location = VarOperand(var, rcx); 2470 MemOperand location = VarOperand(var, rcx);
2495 __ movp(rdx, location); 2471 __ movp(rdx, location);
2496 __ CompareRoot(rdx, Heap::kTheHoleValueRootIndex); 2472 __ CompareRoot(rdx, Heap::kTheHoleValueRootIndex);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
2580 2556
2581 2557
2582 void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) { 2558 void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) {
2583 // Assignment to a property, using a named store IC. 2559 // Assignment to a property, using a named store IC.
2584 Property* prop = expr->target()->AsProperty(); 2560 Property* prop = expr->target()->AsProperty();
2585 DCHECK(prop != NULL); 2561 DCHECK(prop != NULL);
2586 DCHECK(prop->key()->IsLiteral()); 2562 DCHECK(prop->key()->IsLiteral());
2587 2563
2588 __ Move(StoreDescriptor::NameRegister(), prop->key()->AsLiteral()->value()); 2564 __ Move(StoreDescriptor::NameRegister(), prop->key()->AsLiteral()->value());
2589 __ Pop(StoreDescriptor::ReceiverRegister()); 2565 __ Pop(StoreDescriptor::ReceiverRegister());
2590 if (FLAG_vector_stores) { 2566 EmitLoadStoreICSlot(expr->AssignmentSlot());
2591 EmitLoadStoreICSlot(expr->AssignmentSlot()); 2567 CallStoreIC();
2592 CallStoreIC();
2593 } else {
2594 CallStoreIC(expr->AssignmentFeedbackId());
2595 }
2596 2568
2597 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 2569 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
2598 context()->Plug(rax); 2570 context()->Plug(rax);
2599 } 2571 }
2600 2572
2601 2573
2602 void FullCodeGenerator::EmitNamedSuperPropertyStore(Property* prop) { 2574 void FullCodeGenerator::EmitNamedSuperPropertyStore(Property* prop) {
2603 // Assignment to named property of super. 2575 // Assignment to named property of super.
2604 // rax : value 2576 // rax : value
2605 // stack : receiver ('this'), home_object 2577 // stack : receiver ('this'), home_object
(...skipping 23 matching lines...) Expand all
2629 } 2601 }
2630 2602
2631 2603
2632 void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) { 2604 void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) {
2633 // Assignment to a property, using a keyed store IC. 2605 // Assignment to a property, using a keyed store IC.
2634 __ Pop(StoreDescriptor::NameRegister()); // Key. 2606 __ Pop(StoreDescriptor::NameRegister()); // Key.
2635 __ Pop(StoreDescriptor::ReceiverRegister()); 2607 __ Pop(StoreDescriptor::ReceiverRegister());
2636 DCHECK(StoreDescriptor::ValueRegister().is(rax)); 2608 DCHECK(StoreDescriptor::ValueRegister().is(rax));
2637 Handle<Code> ic = 2609 Handle<Code> ic =
2638 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code(); 2610 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code();
2639 if (FLAG_vector_stores) { 2611 EmitLoadStoreICSlot(expr->AssignmentSlot());
2640 EmitLoadStoreICSlot(expr->AssignmentSlot()); 2612 CallIC(ic);
2641 CallIC(ic);
2642 } else {
2643 CallIC(ic, expr->AssignmentFeedbackId());
2644 }
2645 2613
2646 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 2614 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
2647 context()->Plug(rax); 2615 context()->Plug(rax);
2648 } 2616 }
2649 2617
2650 2618
2651 void FullCodeGenerator::VisitProperty(Property* expr) { 2619 void FullCodeGenerator::VisitProperty(Property* expr) {
2652 Comment cmnt(masm_, "[ Property"); 2620 Comment cmnt(masm_, "[ Property");
2653 SetExpressionPosition(expr); 2621 SetExpressionPosition(expr);
2654 2622
(...skipping 1881 matching lines...) Expand 10 before | Expand all | Expand 10 after
4536 EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(), 4504 EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(),
4537 Token::ASSIGN, expr->CountSlot()); 4505 Token::ASSIGN, expr->CountSlot());
4538 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 4506 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
4539 context()->Plug(rax); 4507 context()->Plug(rax);
4540 } 4508 }
4541 break; 4509 break;
4542 case NAMED_PROPERTY: { 4510 case NAMED_PROPERTY: {
4543 __ Move(StoreDescriptor::NameRegister(), 4511 __ Move(StoreDescriptor::NameRegister(),
4544 prop->key()->AsLiteral()->value()); 4512 prop->key()->AsLiteral()->value());
4545 __ Pop(StoreDescriptor::ReceiverRegister()); 4513 __ Pop(StoreDescriptor::ReceiverRegister());
4546 if (FLAG_vector_stores) { 4514 EmitLoadStoreICSlot(expr->CountSlot());
4547 EmitLoadStoreICSlot(expr->CountSlot()); 4515 CallStoreIC();
4548 CallStoreIC();
4549 } else {
4550 CallStoreIC(expr->CountStoreFeedbackId());
4551 }
4552 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 4516 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
4553 if (expr->is_postfix()) { 4517 if (expr->is_postfix()) {
4554 if (!context()->IsEffect()) { 4518 if (!context()->IsEffect()) {
4555 context()->PlugTOS(); 4519 context()->PlugTOS();
4556 } 4520 }
4557 } else { 4521 } else {
4558 context()->Plug(rax); 4522 context()->Plug(rax);
4559 } 4523 }
4560 break; 4524 break;
4561 } 4525 }
(...skipping 17 matching lines...) Expand all
4579 } else { 4543 } else {
4580 context()->Plug(rax); 4544 context()->Plug(rax);
4581 } 4545 }
4582 break; 4546 break;
4583 } 4547 }
4584 case KEYED_PROPERTY: { 4548 case KEYED_PROPERTY: {
4585 __ Pop(StoreDescriptor::NameRegister()); 4549 __ Pop(StoreDescriptor::NameRegister());
4586 __ Pop(StoreDescriptor::ReceiverRegister()); 4550 __ Pop(StoreDescriptor::ReceiverRegister());
4587 Handle<Code> ic = 4551 Handle<Code> ic =
4588 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code(); 4552 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code();
4589 if (FLAG_vector_stores) { 4553 EmitLoadStoreICSlot(expr->CountSlot());
4590 EmitLoadStoreICSlot(expr->CountSlot()); 4554 CallIC(ic);
4591 CallIC(ic);
4592 } else {
4593 CallIC(ic, expr->CountStoreFeedbackId());
4594 }
4595 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 4555 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
4596 if (expr->is_postfix()) { 4556 if (expr->is_postfix()) {
4597 if (!context()->IsEffect()) { 4557 if (!context()->IsEffect()) {
4598 context()->PlugTOS(); 4558 context()->PlugTOS();
4599 } 4559 }
4600 } else { 4560 } else {
4601 context()->Plug(rax); 4561 context()->Plug(rax);
4602 } 4562 }
4603 break; 4563 break;
4604 } 4564 }
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
4886 void FullCodeGenerator::ClearPendingMessage() { 4846 void FullCodeGenerator::ClearPendingMessage() {
4887 DCHECK(!result_register().is(rdx)); 4847 DCHECK(!result_register().is(rdx));
4888 ExternalReference pending_message_obj = 4848 ExternalReference pending_message_obj =
4889 ExternalReference::address_of_pending_message_obj(isolate()); 4849 ExternalReference::address_of_pending_message_obj(isolate());
4890 __ LoadRoot(rdx, Heap::kTheHoleValueRootIndex); 4850 __ LoadRoot(rdx, Heap::kTheHoleValueRootIndex);
4891 __ Store(pending_message_obj, rdx); 4851 __ Store(pending_message_obj, rdx);
4892 } 4852 }
4893 4853
4894 4854
4895 void FullCodeGenerator::EmitLoadStoreICSlot(FeedbackVectorSlot slot) { 4855 void FullCodeGenerator::EmitLoadStoreICSlot(FeedbackVectorSlot slot) {
4896 DCHECK(FLAG_vector_stores && !slot.IsInvalid()); 4856 DCHECK(!slot.IsInvalid());
4897 __ Move(VectorStoreICTrampolineDescriptor::SlotRegister(), SmiFromSlot(slot)); 4857 __ Move(VectorStoreICTrampolineDescriptor::SlotRegister(), SmiFromSlot(slot));
4898 } 4858 }
4899 4859
4900 4860
4901 #undef __ 4861 #undef __
4902 4862
4903 4863
4904 static const byte kJnsInstruction = 0x79; 4864 static const byte kJnsInstruction = 0x79;
4905 static const byte kNopByteOne = 0x66; 4865 static const byte kNopByteOne = 0x66;
4906 static const byte kNopByteTwo = 0x90; 4866 static const byte kNopByteTwo = 0x90;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
4975 Assembler::target_address_at(call_target_address, 4935 Assembler::target_address_at(call_target_address,
4976 unoptimized_code)); 4936 unoptimized_code));
4977 return OSR_AFTER_STACK_CHECK; 4937 return OSR_AFTER_STACK_CHECK;
4978 } 4938 }
4979 4939
4980 4940
4981 } // namespace internal 4941 } // namespace internal
4982 } // namespace v8 4942 } // namespace v8
4983 4943
4984 #endif // V8_TARGET_ARCH_X64 4944 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/full-codegen/mips64/full-codegen-mips64.cc ('k') | src/heap/heap.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698