Chromium Code Reviews| Index: courgette/assembly_program.cc |
| diff --git a/courgette/assembly_program.cc b/courgette/assembly_program.cc |
| index f1502a9ee324e956f034578b1776e9afc3aa29fd..96e235d227b346380ca235eda15ce72df07cb817 100644 |
| --- a/courgette/assembly_program.cc |
| +++ b/courgette/assembly_program.cc |
| @@ -194,9 +194,8 @@ class InstructionStoreReceptor : public InstructionReceptor { |
| /******** AssemblyProgram ********/ |
| -AssemblyProgram::AssemblyProgram(ExecutableType kind) |
| - : kind_(kind), image_base_(0) { |
| -} |
| +AssemblyProgram::AssemblyProgram(ExecutableType kind, uint64_t image_base) |
| + : kind_(kind), image_base_(image_base) {} |
| AssemblyProgram::~AssemblyProgram() { |
| for (size_t i = 0; i < instructions_.size(); ++i) { |
| @@ -341,115 +340,6 @@ CheckBool AssemblyProgram::EmitShared(Instruction* instruction) { |
| return instruction && instructions_.push_back(instruction); |
| } |
| -void AssemblyProgram::UnassignIndexes(RVAToLabel* labels) { |
|
grt (UTC plus 2)
2017/01/12 11:56:41
hooray for code deletion!
huangs
2017/01/12 19:54:41
Acknowledged.
|
| - for (RVAToLabel::iterator p = labels->begin(); p != labels->end(); ++p) { |
| - Label* current = p->second; |
| - current->index_ = Label::kNoIndex; |
| - } |
| -} |
| - |
| -// DefaultAssignIndexes takes a set of labels and assigns indexes in increasing |
| -// address order. |
| -void AssemblyProgram::DefaultAssignIndexes(RVAToLabel* labels) { |
| - int index = 0; |
| - for (RVAToLabel::iterator p = labels->begin(); p != labels->end(); ++p) { |
| - Label* current = p->second; |
| - if (current->index_ != Label::kNoIndex) |
| - NOTREACHED(); |
| - current->index_ = index; |
| - ++index; |
| - } |
| -} |
| - |
| -// AssignRemainingIndexes assigns indexes to any addresses (labels) that are not |
| -// yet assigned an index. |
| -void AssemblyProgram::AssignRemainingIndexes(RVAToLabel* labels) { |
| - // An address table compresses best when each index is associated with an |
| - // address that is slight larger than the previous index. |
| - |
| - // First see which indexes have not been used. The 'available' vector could |
| - // grow even bigger, but the number of addresses is a better starting size |
| - // than empty. |
| - std::vector<bool> available(labels->size(), true); |
| - int used = 0; |
| - |
| - for (RVAToLabel::iterator p = labels->begin(); p != labels->end(); ++p) { |
| - int index = p->second->index_; |
| - if (index != Label::kNoIndex) { |
| - while (static_cast<size_t>(index) >= available.size()) |
| - available.push_back(true); |
| - available.at(index) = false; |
| - ++used; |
| - } |
| - } |
| - |
| - VLOG(1) << used << " of " << labels->size() << " labels pre-assigned"; |
| - |
| - // Are there any unused labels that happen to be adjacent following a used |
| - // label? |
| - int fill_forward_count = 0; |
| - Label* prev = 0; |
| - for (RVAToLabel::iterator p = labels->begin(); p != labels->end(); ++p) { |
| - Label* current = p->second; |
| - if (current->index_ == Label::kNoIndex) { |
| - int index = 0; |
| - if (prev && prev->index_ != Label::kNoIndex) |
| - index = prev->index_ + 1; |
| - if (index < static_cast<int>(available.size()) && available.at(index)) { |
| - current->index_ = index; |
| - available.at(index) = false; |
| - ++fill_forward_count; |
| - } |
| - } |
| - prev = current; |
| - } |
| - |
| - // Are there any unused labels that happen to be adjacent preceeding a used |
| - // label? |
| - int fill_backward_count = 0; |
| - prev = 0; |
| - for (RVAToLabel::reverse_iterator p = labels->rbegin(); |
| - p != labels->rend(); |
| - ++p) { |
| - Label* current = p->second; |
| - if (current->index_ == Label::kNoIndex) { |
| - int prev_index; |
| - if (prev) |
| - prev_index = prev->index_; |
| - else |
| - prev_index = static_cast<uint32_t>(available.size()); |
| - if (prev_index != 0 && |
| - prev_index != Label::kNoIndex && |
| - available.at(prev_index - 1)) { |
| - current->index_ = prev_index - 1; |
| - available.at(current->index_) = false; |
| - ++fill_backward_count; |
| - } |
| - } |
| - prev = current; |
| - } |
| - |
| - // Fill in any remaining indexes |
| - int fill_infill_count = 0; |
| - int index = 0; |
| - for (RVAToLabel::iterator p = labels->begin(); p != labels->end(); ++p) { |
| - Label* current = p->second; |
| - if (current->index_ == Label::kNoIndex) { |
| - while (!available.at(index)) { |
| - ++index; |
| - } |
| - current->index_ = index; |
| - available.at(index) = false; |
| - ++index; |
| - ++fill_infill_count; |
| - } |
| - } |
| - |
| - VLOG(1) << " fill forward " << fill_forward_count |
| - << " backward " << fill_backward_count |
| - << " infill " << fill_infill_count; |
| -} |
| - |
| std::unique_ptr<EncodedProgram> AssemblyProgram::Encode() const { |
| std::unique_ptr<EncodedProgram> encoded(new EncodedProgram()); |