diff options
author | Vladimir Marko <vmarko@google.com> | 2015-04-06 12:10:19 +0100 |
---|---|---|
committer | Vladimir Marko <vmarko@google.com> | 2015-04-07 19:13:39 +0100 |
commit | e5c76c515a481074aaa6b869aa16490a47ba98bc (patch) | |
tree | 4297274a9fa46201b399ce7568ecb4a89293f9e7 /compiler/dex/quick/arm/codegen_arm.h | |
parent | 3477307fdf93a1ef9a80d4e096125705c47e8024 (diff) | |
download | android_art-e5c76c515a481074aaa6b869aa16490a47ba98bc.tar.gz android_art-e5c76c515a481074aaa6b869aa16490a47ba98bc.tar.bz2 android_art-e5c76c515a481074aaa6b869aa16490a47ba98bc.zip |
PC-relative loads from dex cache arrays for arm.
Change-Id: Ic25df4b51a901ff1d2ca356b5eec71d4acc5d9b7
Diffstat (limited to 'compiler/dex/quick/arm/codegen_arm.h')
-rw-r--r-- | compiler/dex/quick/arm/codegen_arm.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/compiler/dex/quick/arm/codegen_arm.h b/compiler/dex/quick/arm/codegen_arm.h index 4141bcfe98..619c11fb94 100644 --- a/compiler/dex/quick/arm/codegen_arm.h +++ b/compiler/dex/quick/arm/codegen_arm.h @@ -82,6 +82,9 @@ class ArmMir2Lir FINAL : public Mir2Lir { /// @copydoc Mir2Lir::UnconditionallyMarkGCCard(RegStorage) void UnconditionallyMarkGCCard(RegStorage tgt_addr_reg) OVERRIDE; + bool CanUseOpPcRelDexCacheArrayLoad() const OVERRIDE; + void OpPcRelDexCacheArrayLoad(const DexFile* dex_file, int offset, RegStorage r_dest) OVERRIDE; + // Required for target - register utilities. RegStorage TargetReg(SpecialTargetRegister reg) OVERRIDE; RegStorage TargetReg(SpecialTargetRegister reg, WideKind wide_kind) OVERRIDE { @@ -300,6 +303,9 @@ class ArmMir2Lir FINAL : public Mir2Lir { ArenaVector<LIR*> call_method_insns_; + // Instructions needing patching with PC relative code addresses. + ArenaVector<LIR*> dex_cache_access_insns_; + /** * @brief Given float register pair, returns Solo64 float register. * @param reg #RegStorage containing a float register pair (e.g. @c s2 and @c s3). @@ -329,6 +335,12 @@ class ArmMir2Lir FINAL : public Mir2Lir { } int GenDalvikArgsBulkCopy(CallInfo* info, int first, int count) OVERRIDE; + + static int ArmNextSDCallInsn(CompilationUnit* cu, CallInfo* info ATTRIBUTE_UNUSED, + int state, const MethodReference& target_method, + uint32_t unused_idx ATTRIBUTE_UNUSED, + uintptr_t direct_code, uintptr_t direct_method, + InvokeType type); }; } // namespace art |