diff options
| author | 2014-02-10 21:50:25 +0000 | |
|---|---|---|
| committer | 2014-02-10 21:50:25 +0000 | |
| commit | 35d7e414134bd9f3d39e018a756617b21d49c877 (patch) | |
| tree | 175f04bb11570679deed2c1195c746e71cabcab2 /compiler/driver/compiler_driver.h | |
| parent | 6c92e7d619986ecb02a379068bd6623cd5852cea (diff) | |
| parent | 55d0eac918321e0525f6e6491f36a80977e0d416 (diff) | |
Merge "Support Direct Method/Type access for X86"
Diffstat (limited to 'compiler/driver/compiler_driver.h')
| -rw-r--r-- | compiler/driver/compiler_driver.h | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/compiler/driver/compiler_driver.h b/compiler/driver/compiler_driver.h index ea43e4f498..e9b695ba9f 100644 --- a/compiler/driver/compiler_driver.h +++ b/compiler/driver/compiler_driver.h @@ -238,6 +238,15 @@ class CompilerDriver { InvokeType target_invoke_type, size_t literal_offset) LOCKS_EXCLUDED(compiled_methods_lock_); + void AddRelativeCodePatch(const DexFile* dex_file, + uint16_t referrer_class_def_idx, + uint32_t referrer_method_idx, + InvokeType referrer_invoke_type, + uint32_t target_method_idx, + InvokeType target_invoke_type, + size_t literal_offset, + int32_t pc_relative_offset) + LOCKS_EXCLUDED(compiled_methods_lock_); void AddMethodPatch(const DexFile* dex_file, uint16_t referrer_class_def_idx, uint32_t referrer_method_idx, @@ -362,8 +371,14 @@ class CompilerDriver { bool IsCall() const { return true; } + virtual bool IsRelative() const { + return false; + } + virtual int RelativeOffset() const { + return 0; + } - private: + protected: CallPatchInformation(const DexFile* dex_file, uint16_t referrer_class_def_idx, uint32_t referrer_method_idx, @@ -378,6 +393,7 @@ class CompilerDriver { target_invoke_type_(target_invoke_type) { } + private: const InvokeType referrer_invoke_type_; const uint32_t target_method_idx_; const InvokeType target_invoke_type_; @@ -386,6 +402,36 @@ class CompilerDriver { DISALLOW_COPY_AND_ASSIGN(CallPatchInformation); }; + class RelativeCallPatchInformation : public CallPatchInformation { + public: + bool IsRelative() const { + return true; + } + int RelativeOffset() const { + return offset_; + } + + private: + RelativeCallPatchInformation(const DexFile* dex_file, + uint16_t referrer_class_def_idx, + uint32_t referrer_method_idx, + InvokeType referrer_invoke_type, + uint32_t target_method_idx, + InvokeType target_invoke_type, + size_t literal_offset, + int32_t pc_relative_offset) + : CallPatchInformation(dex_file, referrer_class_def_idx, + referrer_method_idx, referrer_invoke_type, + target_method_idx, target_invoke_type, literal_offset), + offset_(pc_relative_offset) { + } + + const int offset_; + + friend class CompilerDriver; + DISALLOW_COPY_AND_ASSIGN(RelativeCallPatchInformation); + }; + class TypePatchInformation : public PatchInformation { public: uint32_t GetTargetTypeIdx() const { |