| OLD | NEW | 
|    1 // Copyright 2013 the V8 project authors. All rights reserved. |    1 // Copyright 2013 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/code-generator.h" |    5 #include "src/compiler/code-generator.h" | 
|    6  |    6  | 
|    7 #include "src/compiler/code-generator-impl.h" |    7 #include "src/compiler/code-generator-impl.h" | 
|    8 #include "src/compiler/linkage.h" |    8 #include "src/compiler/linkage.h" | 
|    9 #include "src/compiler/pipeline.h" |    9 #include "src/compiler/pipeline.h" | 
|   10  |   10  | 
|   11 namespace v8 { |   11 namespace v8 { | 
|   12 namespace internal { |   12 namespace internal { | 
|   13 namespace compiler { |   13 namespace compiler { | 
|   14  |   14  | 
|   15 CodeGenerator::CodeGenerator(Frame* frame, Linkage* linkage, |   15 CodeGenerator::CodeGenerator(Frame* frame, Linkage* linkage, | 
|   16                              InstructionSequence* code, CompilationInfo* info) |   16                              InstructionSequence* code, CompilationInfo* info) | 
|   17     : frame_(frame), |   17     : frame_(frame), | 
|   18       linkage_(linkage), |   18       linkage_(linkage), | 
|   19       code_(code), |   19       code_(code), | 
|   20       info_(info), |   20       info_(info), | 
|   21       labels_(zone()->NewArray<Label>(code->InstructionBlockCount())), |   21       labels_(zone()->NewArray<Label>(code->InstructionBlockCount())), | 
|   22       current_block_(BasicBlock::RpoNumber::Invalid()), |   22       current_block_(BasicBlock::RpoNumber::Invalid()), | 
|   23       current_source_position_(SourcePosition::Invalid()), |   23       current_source_position_(SourcePosition::Invalid()), | 
|   24       masm_(code->zone()->isolate(), NULL, 0), |   24       masm_(code->zone()->isolate(), NULL, 0), | 
|   25       resolver_(this), |   25       resolver_(this), | 
|   26       safepoints_(code->zone()), |   26       safepoints_(code->zone()), | 
|   27       deoptimization_states_(code->zone()), |   27       deoptimization_states_(code->zone()), | 
|   28       deoptimization_literals_(code->zone()), |   28       deoptimization_literals_(code->zone()), | 
|   29       translations_(code->zone()), |   29       translations_(code->zone()), | 
|   30       last_lazy_deopt_pc_(0) { |   30       last_lazy_deopt_pc_(0), | 
 |   31       ools_(nullptr) { | 
|   31   for (int i = 0; i < code->InstructionBlockCount(); ++i) { |   32   for (int i = 0; i < code->InstructionBlockCount(); ++i) { | 
|   32     new (&labels_[i]) Label; |   33     new (&labels_[i]) Label; | 
|   33   } |   34   } | 
|   34 } |   35 } | 
|   35  |   36  | 
|   36  |   37  | 
|   37 Handle<Code> CodeGenerator::GenerateCode() { |   38 Handle<Code> CodeGenerator::GenerateCode() { | 
|   38   CompilationInfo* info = this->info(); |   39   CompilationInfo* info = this->info(); | 
|   39  |   40  | 
|   40   // Emit a code line info recording start event. |   41   // Emit a code line info recording start event. | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
|   64         SNPrintF(buffer, "-- B%d start --", block->id().ToInt()); |   65         SNPrintF(buffer, "-- B%d start --", block->id().ToInt()); | 
|   65         masm()->RecordComment(buffer.start()); |   66         masm()->RecordComment(buffer.start()); | 
|   66       } |   67       } | 
|   67       masm()->bind(GetLabel(current_block_)); |   68       masm()->bind(GetLabel(current_block_)); | 
|   68       for (int i = block->code_start(); i < block->code_end(); ++i) { |   69       for (int i = block->code_start(); i < block->code_end(); ++i) { | 
|   69         AssembleInstruction(code()->InstructionAt(i)); |   70         AssembleInstruction(code()->InstructionAt(i)); | 
|   70       } |   71       } | 
|   71     } |   72     } | 
|   72   } |   73   } | 
|   73  |   74  | 
 |   75   // Assemble all out-of-line code. | 
 |   76   if (ools_) { | 
 |   77     masm()->RecordComment("-- Out of line code --"); | 
 |   78     for (OutOfLineCode* ool = ools_; ool; ool = ool->next()) { | 
 |   79       masm()->bind(ool->entry()); | 
 |   80       ool->Generate(); | 
 |   81       masm()->jmp(ool->exit()); | 
 |   82     } | 
 |   83   } | 
 |   84  | 
|   74   FinishCode(masm()); |   85   FinishCode(masm()); | 
|   75  |   86  | 
|   76   // Ensure there is space for lazy deopt. |   87   // Ensure there is space for lazy deopt. | 
|   77   if (!info->IsStub()) { |   88   if (!info->IsStub()) { | 
|   78     int target_offset = masm()->pc_offset() + Deoptimizer::patch_size(); |   89     int target_offset = masm()->pc_offset() + Deoptimizer::patch_size(); | 
|   79     while (masm()->pc_offset() < target_offset) { |   90     while (masm()->pc_offset() < target_offset) { | 
|   80       masm()->nop(); |   91       masm()->nop(); | 
|   81     } |   92     } | 
|   82   } |   93   } | 
|   83  |   94  | 
| (...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  548 void CodeGenerator::AssembleSwap(InstructionOperand* source, |  559 void CodeGenerator::AssembleSwap(InstructionOperand* source, | 
|  549                                  InstructionOperand* destination) { |  560                                  InstructionOperand* destination) { | 
|  550   UNIMPLEMENTED(); |  561   UNIMPLEMENTED(); | 
|  551 } |  562 } | 
|  552  |  563  | 
|  553  |  564  | 
|  554 void CodeGenerator::AddNopForSmiCodeInlining() { UNIMPLEMENTED(); } |  565 void CodeGenerator::AddNopForSmiCodeInlining() { UNIMPLEMENTED(); } | 
|  555  |  566  | 
|  556 #endif  // !V8_TURBOFAN_BACKEND |  567 #endif  // !V8_TURBOFAN_BACKEND | 
|  557  |  568  | 
 |  569  | 
 |  570 OutOfLineCode::OutOfLineCode(CodeGenerator* gen) | 
 |  571     : masm_(gen->masm()), next_(gen->ools_) { | 
 |  572   gen->ools_ = this; | 
 |  573 } | 
 |  574  | 
 |  575  | 
 |  576 OutOfLineCode::~OutOfLineCode() {} | 
 |  577  | 
|  558 }  // namespace compiler |  578 }  // namespace compiler | 
|  559 }  // namespace internal |  579 }  // namespace internal | 
|  560 }  // namespace v8 |  580 }  // namespace v8 | 
| OLD | NEW |