diff options
| author | 2015-08-19 11:27:57 +0000 | |
|---|---|---|
| committer | 2015-08-19 11:27:57 +0000 | |
| commit | 464581adaf895d14f73db3d768729f0c9c6f5366 (patch) | |
| tree | 0a839dc0e7add5f1f6f473baa261fe3296a47105 /compiler/optimizing/code_generator.h | |
| parent | 5a4f0032d797cef0bd110ed03b4342862cd27fc8 (diff) | |
| parent | 9b688a095afbae21112df5d495487ac5231b12d0 (diff) | |
Merge "Optimizing: Better invoke-static/-direct dispatch."
Diffstat (limited to 'compiler/optimizing/code_generator.h')
| -rw-r--r-- | compiler/optimizing/code_generator.h | 17 | 
1 files changed, 15 insertions, 2 deletions
| diff --git a/compiler/optimizing/code_generator.h b/compiler/optimizing/code_generator.h index 25824448c5..938369b58c 100644 --- a/compiler/optimizing/code_generator.h +++ b/compiler/optimizing/code_generator.h @@ -48,6 +48,7 @@ static int64_t constexpr kPrimLongMax = INT64_C(0x7fffffffffffffff);  class Assembler;  class CodeGenerator;  class DexCompilationUnit; +class LinkerPatch;  class ParallelMoveResolver;  class SrcMapElem;  template <class Alloc> @@ -160,6 +161,7 @@ class CodeGenerator {    virtual void Initialize() = 0;    virtual void Finalize(CodeAllocator* allocator); +  virtual void EmitLinkerPatches(ArenaVector<LinkerPatch>* linker_patches);    virtual void GenerateFrameEntry() = 0;    virtual void GenerateFrameExit() = 0;    virtual void Bind(HBasicBlock* block) = 0; @@ -356,6 +358,17 @@ class CodeGenerator {    DisassemblyInformation* GetDisassemblyInformation() const { return disasm_info_; }   protected: +  // Method patch info used for recording locations of required linker patches and +  // target methods. The target method can be used for various purposes, whether for +  // patching the address of the method or the code pointer or a PC-relative call. +  template <typename LabelType> +  struct MethodPatchInfo { +    explicit MethodPatchInfo(MethodReference m) : target_method(m), label() { } + +    MethodReference target_method; +    LabelType label; +  }; +    CodeGenerator(HGraph* graph,                  size_t number_of_core_registers,                  size_t number_of_fpu_registers, @@ -427,8 +440,8 @@ class CodeGenerator {    // Arm64 has its own type for a label, so we need to templatize this method    // to share the logic. -  template <typename T> -  T* CommonGetLabelOf(T* raw_pointer_to_labels_array, HBasicBlock* block) const { +  template <typename LabelType> +  LabelType* CommonGetLabelOf(LabelType* raw_pointer_to_labels_array, HBasicBlock* block) const {      block = FirstNonEmptyBlock(block);      return raw_pointer_to_labels_array + block->GetBlockId();    } |