OLD | NEW |
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/compiler/common-operator.h" | 5 #include "src/compiler/common-operator.h" |
6 #include "src/compiler/graph.h" | 6 #include "src/compiler/graph.h" |
7 #include "src/compiler/instruction.h" | 7 #include "src/compiler/instruction.h" |
8 | 8 |
9 namespace v8 { | 9 namespace v8 { |
10 namespace internal { | 10 namespace internal { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 case InstructionOperand::DOUBLE_REGISTER: | 51 case InstructionOperand::DOUBLE_REGISTER: |
52 return os << "[" << conf->double_register_name(op.index()) << "|R]"; | 52 return os << "[" << conf->double_register_name(op.index()) << "|R]"; |
53 case InstructionOperand::INVALID: | 53 case InstructionOperand::INVALID: |
54 return os << "(x)"; | 54 return os << "(x)"; |
55 } | 55 } |
56 UNREACHABLE(); | 56 UNREACHABLE(); |
57 return os; | 57 return os; |
58 } | 58 } |
59 | 59 |
60 | 60 |
61 template <InstructionOperand::Kind kOperandKind, int kNumCachedOperands> | |
62 SubKindOperand<kOperandKind, kNumCachedOperands>* | |
63 SubKindOperand<kOperandKind, kNumCachedOperands>::cache = NULL; | |
64 | |
65 | |
66 template <InstructionOperand::Kind kOperandKind, int kNumCachedOperands> | |
67 void SubKindOperand<kOperandKind, kNumCachedOperands>::SetUpCache() { | |
68 if (cache) return; | |
69 cache = new SubKindOperand[kNumCachedOperands]; | |
70 for (int i = 0; i < kNumCachedOperands; i++) { | |
71 cache[i].ConvertTo(kOperandKind, i); | |
72 } | |
73 } | |
74 | |
75 | |
76 template <InstructionOperand::Kind kOperandKind, int kNumCachedOperands> | |
77 void SubKindOperand<kOperandKind, kNumCachedOperands>::TearDownCache() { | |
78 delete[] cache; | |
79 cache = NULL; | |
80 } | |
81 | |
82 | |
83 void InstructionOperand::SetUpCaches() { | |
84 #define INSTRUCTION_OPERAND_SETUP(name, type, number) \ | |
85 name##Operand::SetUpCache(); | |
86 INSTRUCTION_OPERAND_LIST(INSTRUCTION_OPERAND_SETUP) | |
87 #undef INSTRUCTION_OPERAND_SETUP | |
88 } | |
89 | |
90 | |
91 void InstructionOperand::TearDownCaches() { | |
92 #define INSTRUCTION_OPERAND_TEARDOWN(name, type, number) \ | |
93 name##Operand::TearDownCache(); | |
94 INSTRUCTION_OPERAND_LIST(INSTRUCTION_OPERAND_TEARDOWN) | |
95 #undef INSTRUCTION_OPERAND_TEARDOWN | |
96 } | |
97 | |
98 | |
99 std::ostream& operator<<(std::ostream& os, | 61 std::ostream& operator<<(std::ostream& os, |
100 const PrintableMoveOperands& printable) { | 62 const PrintableMoveOperands& printable) { |
101 const MoveOperands& mo = *printable.move_operands_; | 63 const MoveOperands& mo = *printable.move_operands_; |
102 PrintableInstructionOperand printable_op = {printable.register_configuration_, | 64 PrintableInstructionOperand printable_op = {printable.register_configuration_, |
103 mo.destination()}; | 65 mo.destination()}; |
104 | 66 |
105 os << printable_op; | 67 os << printable_op; |
106 if (!mo.source()->Equals(mo.destination())) { | 68 if (!mo.source()->Equals(mo.destination())) { |
107 printable_op.op_ = mo.source(); | 69 printable_op.op_ = mo.source(); |
108 os << " = " << printable_op; | 70 os << " = " << printable_op; |
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 pointer_maps_(zone()), | 443 pointer_maps_(zone()), |
482 doubles_(std::less<int>(), VirtualRegisterSet::allocator_type(zone())), | 444 doubles_(std::less<int>(), VirtualRegisterSet::allocator_type(zone())), |
483 references_(std::less<int>(), VirtualRegisterSet::allocator_type(zone())), | 445 references_(std::less<int>(), VirtualRegisterSet::allocator_type(zone())), |
484 deoptimization_entries_(zone()) { | 446 deoptimization_entries_(zone()) { |
485 block_starts_.reserve(instruction_blocks_->size()); | 447 block_starts_.reserve(instruction_blocks_->size()); |
486 } | 448 } |
487 | 449 |
488 | 450 |
489 int InstructionSequence::NextVirtualRegister() { | 451 int InstructionSequence::NextVirtualRegister() { |
490 int virtual_register = next_virtual_register_++; | 452 int virtual_register = next_virtual_register_++; |
491 CHECK_NE(virtual_register, UnallocatedOperand::kInvalidVirtualRegister); | 453 CHECK_NE(virtual_register, InstructionOperand::kInvalidVirtualRegister); |
492 return virtual_register; | 454 return virtual_register; |
493 } | 455 } |
494 | 456 |
495 | 457 |
496 GapInstruction* InstructionSequence::GetBlockStart( | 458 GapInstruction* InstructionSequence::GetBlockStart( |
497 BasicBlock::RpoNumber rpo) const { | 459 BasicBlock::RpoNumber rpo) const { |
498 const InstructionBlock* block = InstructionBlockAt(rpo); | 460 const InstructionBlock* block = InstructionBlockAt(rpo); |
499 return GapInstruction::cast(InstructionAt(block->code_start())); | 461 return GapInstruction::cast(InstructionAt(block->code_start())); |
500 } | 462 } |
501 | 463 |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
729 os << " B" << succ_block->id(); | 691 os << " B" << succ_block->id(); |
730 } | 692 } |
731 os << "\n"; | 693 os << "\n"; |
732 } | 694 } |
733 return os; | 695 return os; |
734 } | 696 } |
735 | 697 |
736 } // namespace compiler | 698 } // namespace compiler |
737 } // namespace internal | 699 } // namespace internal |
738 } // namespace v8 | 700 } // namespace v8 |
OLD | NEW |