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

Side by Side Diff: src/compiler/instruction.h

Issue 526223002: Use Chrome compatible naming for compiler specifics. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: mips Created 6 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « src/compiler/ia32/instruction-selector-ia32.cc ('k') | src/compiler/instruction-selector.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 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 #ifndef V8_COMPILER_INSTRUCTION_H_ 5 #ifndef V8_COMPILER_INSTRUCTION_H_
6 #define V8_COMPILER_INSTRUCTION_H_ 6 #define V8_COMPILER_INSTRUCTION_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 } 260 }
261 261
262 // [lifetime]: Only for non-FIXED_SLOT. 262 // [lifetime]: Only for non-FIXED_SLOT.
263 bool IsUsedAtStart() { 263 bool IsUsedAtStart() {
264 DCHECK(basic_policy() == EXTENDED_POLICY); 264 DCHECK(basic_policy() == EXTENDED_POLICY);
265 return LifetimeField::decode(value_) == USED_AT_START; 265 return LifetimeField::decode(value_) == USED_AT_START;
266 } 266 }
267 }; 267 };
268 268
269 269
270 class MoveOperands V8_FINAL { 270 class MoveOperands FINAL {
271 public: 271 public:
272 MoveOperands(InstructionOperand* source, InstructionOperand* destination) 272 MoveOperands(InstructionOperand* source, InstructionOperand* destination)
273 : source_(source), destination_(destination) {} 273 : source_(source), destination_(destination) {}
274 274
275 InstructionOperand* source() const { return source_; } 275 InstructionOperand* source() const { return source_; }
276 void set_source(InstructionOperand* operand) { source_ = operand; } 276 void set_source(InstructionOperand* operand) { source_ = operand; }
277 277
278 InstructionOperand* destination() const { return destination_; } 278 InstructionOperand* destination() const { return destination_; }
279 void set_destination(InstructionOperand* operand) { destination_ = operand; } 279 void set_destination(InstructionOperand* operand) { destination_ = operand; }
280 280
(...skipping 25 matching lines...) Expand all
306 } 306 }
307 307
308 private: 308 private:
309 InstructionOperand* source_; 309 InstructionOperand* source_;
310 InstructionOperand* destination_; 310 InstructionOperand* destination_;
311 }; 311 };
312 312
313 OStream& operator<<(OStream& os, const MoveOperands& mo); 313 OStream& operator<<(OStream& os, const MoveOperands& mo);
314 314
315 template <InstructionOperand::Kind kOperandKind, int kNumCachedOperands> 315 template <InstructionOperand::Kind kOperandKind, int kNumCachedOperands>
316 class SubKindOperand V8_FINAL : public InstructionOperand { 316 class SubKindOperand FINAL : public InstructionOperand {
317 public: 317 public:
318 static SubKindOperand* Create(int index, Zone* zone) { 318 static SubKindOperand* Create(int index, Zone* zone) {
319 DCHECK(index >= 0); 319 DCHECK(index >= 0);
320 if (index < kNumCachedOperands) return &cache[index]; 320 if (index < kNumCachedOperands) return &cache[index];
321 return new (zone) SubKindOperand(index); 321 return new (zone) SubKindOperand(index);
322 } 322 }
323 323
324 static SubKindOperand* cast(InstructionOperand* op) { 324 static SubKindOperand* cast(InstructionOperand* op) {
325 DCHECK(op->kind() == kOperandKind); 325 DCHECK(op->kind() == kOperandKind);
326 return reinterpret_cast<SubKindOperand*>(op); 326 return reinterpret_cast<SubKindOperand*>(op);
(...skipping 10 matching lines...) Expand all
337 : InstructionOperand(kOperandKind, index) {} 337 : InstructionOperand(kOperandKind, index) {}
338 }; 338 };
339 339
340 340
341 #define INSTRUCTION_TYPEDEF_SUBKIND_OPERAND_CLASS(name, type, number) \ 341 #define INSTRUCTION_TYPEDEF_SUBKIND_OPERAND_CLASS(name, type, number) \
342 typedef SubKindOperand<InstructionOperand::type, number> name##Operand; 342 typedef SubKindOperand<InstructionOperand::type, number> name##Operand;
343 INSTRUCTION_OPERAND_LIST(INSTRUCTION_TYPEDEF_SUBKIND_OPERAND_CLASS) 343 INSTRUCTION_OPERAND_LIST(INSTRUCTION_TYPEDEF_SUBKIND_OPERAND_CLASS)
344 #undef INSTRUCTION_TYPEDEF_SUBKIND_OPERAND_CLASS 344 #undef INSTRUCTION_TYPEDEF_SUBKIND_OPERAND_CLASS
345 345
346 346
347 class ParallelMove V8_FINAL : public ZoneObject { 347 class ParallelMove FINAL : public ZoneObject {
348 public: 348 public:
349 explicit ParallelMove(Zone* zone) : move_operands_(4, zone) {} 349 explicit ParallelMove(Zone* zone) : move_operands_(4, zone) {}
350 350
351 void AddMove(InstructionOperand* from, InstructionOperand* to, Zone* zone) { 351 void AddMove(InstructionOperand* from, InstructionOperand* to, Zone* zone) {
352 move_operands_.Add(MoveOperands(from, to), zone); 352 move_operands_.Add(MoveOperands(from, to), zone);
353 } 353 }
354 354
355 bool IsRedundant() const; 355 bool IsRedundant() const;
356 356
357 ZoneList<MoveOperands>* move_operands() { return &move_operands_; } 357 ZoneList<MoveOperands>* move_operands() { return &move_operands_; }
358 const ZoneList<MoveOperands>* move_operands() const { 358 const ZoneList<MoveOperands>* move_operands() const {
359 return &move_operands_; 359 return &move_operands_;
360 } 360 }
361 361
362 private: 362 private:
363 ZoneList<MoveOperands> move_operands_; 363 ZoneList<MoveOperands> move_operands_;
364 }; 364 };
365 365
366 OStream& operator<<(OStream& os, const ParallelMove& pm); 366 OStream& operator<<(OStream& os, const ParallelMove& pm);
367 367
368 class PointerMap V8_FINAL : public ZoneObject { 368 class PointerMap FINAL : public ZoneObject {
369 public: 369 public:
370 explicit PointerMap(Zone* zone) 370 explicit PointerMap(Zone* zone)
371 : pointer_operands_(8, zone), 371 : pointer_operands_(8, zone),
372 untagged_operands_(0, zone), 372 untagged_operands_(0, zone),
373 instruction_position_(-1) {} 373 instruction_position_(-1) {}
374 374
375 const ZoneList<InstructionOperand*>* GetNormalizedOperands() { 375 const ZoneList<InstructionOperand*>* GetNormalizedOperands() {
376 for (int i = 0; i < untagged_operands_.length(); ++i) { 376 for (int i = 0; i < untagged_operands_.length(); ++i) {
377 RemovePointer(untagged_operands_[i]); 377 RemovePointer(untagged_operands_[i]);
378 } 378 }
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 590
591 private: 591 private:
592 friend OStream& operator<<(OStream& os, const Instruction& instr); 592 friend OStream& operator<<(OStream& os, const Instruction& instr);
593 ParallelMove* parallel_moves_[LAST_INNER_POSITION + 1]; 593 ParallelMove* parallel_moves_[LAST_INNER_POSITION + 1];
594 }; 594 };
595 595
596 596
597 // This special kind of gap move instruction represents the beginning of a 597 // This special kind of gap move instruction represents the beginning of a
598 // block of code. 598 // block of code.
599 // TODO(titzer): move code_start and code_end from BasicBlock to here. 599 // TODO(titzer): move code_start and code_end from BasicBlock to here.
600 class BlockStartInstruction V8_FINAL : public GapInstruction { 600 class BlockStartInstruction FINAL : public GapInstruction {
601 public: 601 public:
602 BasicBlock* block() const { return block_; } 602 BasicBlock* block() const { return block_; }
603 Label* label() { return &label_; } 603 Label* label() { return &label_; }
604 604
605 static BlockStartInstruction* New(Zone* zone, BasicBlock* block) { 605 static BlockStartInstruction* New(Zone* zone, BasicBlock* block) {
606 void* buffer = zone->New(sizeof(BlockStartInstruction)); 606 void* buffer = zone->New(sizeof(BlockStartInstruction));
607 return new (buffer) BlockStartInstruction(block); 607 return new (buffer) BlockStartInstruction(block);
608 } 608 }
609 609
610 static BlockStartInstruction* cast(Instruction* instr) { 610 static BlockStartInstruction* cast(Instruction* instr) {
611 DCHECK(instr->IsBlockStart()); 611 DCHECK(instr->IsBlockStart());
612 return static_cast<BlockStartInstruction*>(instr); 612 return static_cast<BlockStartInstruction*>(instr);
613 } 613 }
614 614
615 private: 615 private:
616 explicit BlockStartInstruction(BasicBlock* block) 616 explicit BlockStartInstruction(BasicBlock* block)
617 : GapInstruction(kBlockStartInstruction), block_(block) {} 617 : GapInstruction(kBlockStartInstruction), block_(block) {}
618 618
619 BasicBlock* block_; 619 BasicBlock* block_;
620 Label label_; 620 Label label_;
621 }; 621 };
622 622
623 623
624 class SourcePositionInstruction V8_FINAL : public Instruction { 624 class SourcePositionInstruction FINAL : public Instruction {
625 public: 625 public:
626 static SourcePositionInstruction* New(Zone* zone, SourcePosition position) { 626 static SourcePositionInstruction* New(Zone* zone, SourcePosition position) {
627 void* buffer = zone->New(sizeof(SourcePositionInstruction)); 627 void* buffer = zone->New(sizeof(SourcePositionInstruction));
628 return new (buffer) SourcePositionInstruction(position); 628 return new (buffer) SourcePositionInstruction(position);
629 } 629 }
630 630
631 SourcePosition source_position() const { return source_position_; } 631 SourcePosition source_position() const { return source_position_; }
632 632
633 static SourcePositionInstruction* cast(Instruction* instr) { 633 static SourcePositionInstruction* cast(Instruction* instr) {
634 DCHECK(instr->IsSourcePosition()); 634 DCHECK(instr->IsSourcePosition());
(...skipping 10 matching lines...) Expand all
645 : Instruction(kSourcePositionInstruction), 645 : Instruction(kSourcePositionInstruction),
646 source_position_(source_position) { 646 source_position_(source_position) {
647 DCHECK(!source_position_.IsInvalid()); 647 DCHECK(!source_position_.IsInvalid());
648 DCHECK(!source_position_.IsUnknown()); 648 DCHECK(!source_position_.IsUnknown());
649 } 649 }
650 650
651 SourcePosition source_position_; 651 SourcePosition source_position_;
652 }; 652 };
653 653
654 654
655 class Constant V8_FINAL { 655 class Constant FINAL {
656 public: 656 public:
657 enum Type { kInt32, kInt64, kFloat64, kExternalReference, kHeapObject }; 657 enum Type { kInt32, kInt64, kFloat64, kExternalReference, kHeapObject };
658 658
659 explicit Constant(int32_t v) : type_(kInt32), value_(v) {} 659 explicit Constant(int32_t v) : type_(kInt32), value_(v) {}
660 explicit Constant(int64_t v) : type_(kInt64), value_(v) {} 660 explicit Constant(int64_t v) : type_(kInt64), value_(v) {}
661 explicit Constant(double v) : type_(kFloat64), value_(BitCast<int64_t>(v)) {} 661 explicit Constant(double v) : type_(kFloat64), value_(BitCast<int64_t>(v)) {}
662 explicit Constant(ExternalReference ref) 662 explicit Constant(ExternalReference ref)
663 : type_(kExternalReference), value_(BitCast<intptr_t>(ref)) {} 663 : type_(kExternalReference), value_(BitCast<intptr_t>(ref)) {}
664 explicit Constant(Handle<HeapObject> obj) 664 explicit Constant(Handle<HeapObject> obj)
665 : type_(kHeapObject), value_(BitCast<intptr_t>(obj)) {} 665 : type_(kHeapObject), value_(BitCast<intptr_t>(obj)) {}
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 typedef std::map<int, Constant, std::less<int>, 734 typedef std::map<int, Constant, std::less<int>,
735 zone_allocator<std::pair<int, Constant> > > ConstantMap; 735 zone_allocator<std::pair<int, Constant> > > ConstantMap;
736 736
737 typedef ZoneDeque<Instruction*> InstructionDeque; 737 typedef ZoneDeque<Instruction*> InstructionDeque;
738 typedef ZoneDeque<PointerMap*> PointerMapDeque; 738 typedef ZoneDeque<PointerMap*> PointerMapDeque;
739 typedef ZoneVector<FrameStateDescriptor*> DeoptimizationVector; 739 typedef ZoneVector<FrameStateDescriptor*> DeoptimizationVector;
740 740
741 // Represents architecture-specific generated code before, during, and after 741 // Represents architecture-specific generated code before, during, and after
742 // register allocation. 742 // register allocation.
743 // TODO(titzer): s/IsDouble/IsFloat64/ 743 // TODO(titzer): s/IsDouble/IsFloat64/
744 class InstructionSequence V8_FINAL { 744 class InstructionSequence FINAL {
745 public: 745 public:
746 InstructionSequence(Linkage* linkage, Graph* graph, Schedule* schedule) 746 InstructionSequence(Linkage* linkage, Graph* graph, Schedule* schedule)
747 : graph_(graph), 747 : graph_(graph),
748 linkage_(linkage), 748 linkage_(linkage),
749 schedule_(schedule), 749 schedule_(schedule),
750 constants_(ConstantMap::key_compare(), 750 constants_(ConstantMap::key_compare(),
751 ConstantMap::allocator_type(zone())), 751 ConstantMap::allocator_type(zone())),
752 immediates_(zone()), 752 immediates_(zone()),
753 instructions_(zone()), 753 instructions_(zone()),
754 next_virtual_register_(graph->NodeCount()), 754 next_virtual_register_(graph->NodeCount()),
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
877 DeoptimizationVector deoptimization_entries_; 877 DeoptimizationVector deoptimization_entries_;
878 }; 878 };
879 879
880 OStream& operator<<(OStream& os, const InstructionSequence& code); 880 OStream& operator<<(OStream& os, const InstructionSequence& code);
881 881
882 } // namespace compiler 882 } // namespace compiler
883 } // namespace internal 883 } // namespace internal
884 } // namespace v8 884 } // namespace v8
885 885
886 #endif // V8_COMPILER_INSTRUCTION_H_ 886 #endif // V8_COMPILER_INSTRUCTION_H_
OLDNEW
« no previous file with comments | « src/compiler/ia32/instruction-selector-ia32.cc ('k') | src/compiler/instruction-selector.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698