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

Side by Side Diff: src/assembler.h

Issue 908443002: Remove redundant source position information in RelocInfo (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Nits Created 5 years, 10 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/arm64/assembler-arm64.cc ('k') | src/assembler.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 (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 // is returned by RelocInfo::target_reference_address(). 637 // is returned by RelocInfo::target_reference_address().
638 Address reconstructed_adr_ptr_; 638 Address reconstructed_adr_ptr_;
639 friend class RelocIterator; 639 friend class RelocIterator;
640 }; 640 };
641 641
642 642
643 // RelocInfoWriter serializes a stream of relocation info. It writes towards 643 // RelocInfoWriter serializes a stream of relocation info. It writes towards
644 // lower addresses. 644 // lower addresses.
645 class RelocInfoWriter BASE_EMBEDDED { 645 class RelocInfoWriter BASE_EMBEDDED {
646 public: 646 public:
647 RelocInfoWriter() : pos_(NULL), 647 RelocInfoWriter()
648 last_pc_(NULL), 648 : pos_(NULL),
649 last_id_(0), 649 last_pc_(NULL),
650 last_position_(0) {} 650 last_id_(0),
651 RelocInfoWriter(byte* pos, byte* pc) : pos_(pos), 651 last_position_(0),
652 last_pc_(pc), 652 last_mode_(RelocInfo::NUMBER_OF_MODES),
653 last_id_(0), 653 next_position_candidate_pos_delta_(0),
654 last_position_(0) {} 654 next_position_candidate_pc_delta_(0),
655 next_position_candidate_flushed_(true) {}
656 RelocInfoWriter(byte* pos, byte* pc)
657 : pos_(pos),
658 last_pc_(pc),
659 last_id_(0),
660 last_position_(0),
661 last_mode_(RelocInfo::NUMBER_OF_MODES),
662 next_position_candidate_pos_delta_(0),
663 next_position_candidate_pc_delta_(0),
664 next_position_candidate_flushed_(true) {}
655 665
656 byte* pos() const { return pos_; } 666 byte* pos() const { return pos_; }
657 byte* last_pc() const { return last_pc_; } 667 byte* last_pc() const { return last_pc_; }
658 668
659 void Write(const RelocInfo* rinfo); 669 void Write(const RelocInfo* rinfo);
660 670
661 // Update the state of the stream after reloc info buffer 671 // Update the state of the stream after reloc info buffer
662 // and/or code is moved while the stream is active. 672 // and/or code is moved while the stream is active.
663 void Reposition(byte* pos, byte* pc) { 673 void Reposition(byte* pos, byte* pc) {
664 pos_ = pos; 674 pos_ = pos;
665 last_pc_ = pc; 675 last_pc_ = pc;
666 } 676 }
667 677
678 void Finish() { FlushPosition(); }
679
668 // Max size (bytes) of a written RelocInfo. Longest encoding is 680 // Max size (bytes) of a written RelocInfo. Longest encoding is
669 // ExtraTag, VariableLengthPCJump, ExtraTag, pc_delta, ExtraTag, data_delta. 681 // ExtraTag, VariableLengthPCJump, ExtraTag, pc_delta, ExtraTag, data_delta.
670 // On ia32 and arm this is 1 + 4 + 1 + 1 + 1 + 4 = 12. 682 // On ia32 and arm this is 1 + 4 + 1 + 1 + 1 + 4 = 12.
671 // On x64 this is 1 + 4 + 1 + 1 + 1 + 8 == 16; 683 // On x64 this is 1 + 4 + 1 + 1 + 1 + 8 == 16;
672 // Here we use the maximum of the two. 684 // Here we use the maximum of the two.
673 static const int kMaxSize = 16; 685 static const int kMaxSize = 16;
674 686
675 private: 687 private:
676 inline uint32_t WriteVariableLengthPCJump(uint32_t pc_delta); 688 inline uint32_t WriteVariableLengthPCJump(uint32_t pc_delta);
677 inline void WriteTaggedPC(uint32_t pc_delta, int tag); 689 inline void WriteTaggedPC(uint32_t pc_delta, int tag);
678 inline void WriteExtraTaggedPC(uint32_t pc_delta, int extra_tag); 690 inline void WriteExtraTaggedPC(uint32_t pc_delta, int extra_tag);
679 inline void WriteExtraTaggedIntData(int data_delta, int top_tag); 691 inline void WriteExtraTaggedIntData(int data_delta, int top_tag);
680 inline void WriteExtraTaggedPoolData(int data, int pool_type); 692 inline void WriteExtraTaggedPoolData(int data, int pool_type);
681 inline void WriteExtraTaggedData(intptr_t data_delta, int top_tag); 693 inline void WriteExtraTaggedData(intptr_t data_delta, int top_tag);
682 inline void WriteTaggedData(intptr_t data_delta, int tag); 694 inline void WriteTaggedData(intptr_t data_delta, int tag);
683 inline void WriteExtraTag(int extra_tag, int top_tag); 695 inline void WriteExtraTag(int extra_tag, int top_tag);
696 inline void WritePosition(int pc_delta, int pos_delta, RelocInfo::Mode rmode);
697
698 void FlushPosition();
684 699
685 byte* pos_; 700 byte* pos_;
686 byte* last_pc_; 701 byte* last_pc_;
687 int last_id_; 702 int last_id_;
688 int last_position_; 703 int last_position_;
704 RelocInfo::Mode last_mode_;
705 int next_position_candidate_pos_delta_;
706 uint32_t next_position_candidate_pc_delta_;
707 bool next_position_candidate_flushed_;
708
689 DISALLOW_COPY_AND_ASSIGN(RelocInfoWriter); 709 DISALLOW_COPY_AND_ASSIGN(RelocInfoWriter);
690 }; 710 };
691 711
692 712
693 // A RelocIterator iterates over relocation information. 713 // A RelocIterator iterates over relocation information.
694 // Typical use: 714 // Typical use:
695 // 715 //
696 // for (RelocIterator it(code); !it.done(); it.next()) { 716 // for (RelocIterator it(code); !it.done(); it.next()) {
697 // // do something with it.rinfo() here 717 // // do something with it.rinfo() here
698 // } 718 // }
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
1132 NullCallWrapper() { } 1152 NullCallWrapper() { }
1133 virtual ~NullCallWrapper() { } 1153 virtual ~NullCallWrapper() { }
1134 virtual void BeforeCall(int call_size) const { } 1154 virtual void BeforeCall(int call_size) const { }
1135 virtual void AfterCall() const { } 1155 virtual void AfterCall() const { }
1136 }; 1156 };
1137 1157
1138 1158
1139 } } // namespace v8::internal 1159 } } // namespace v8::internal
1140 1160
1141 #endif // V8_ASSEMBLER_H_ 1161 #endif // V8_ASSEMBLER_H_
OLDNEW
« no previous file with comments | « src/arm64/assembler-arm64.cc ('k') | src/assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698