diff options
author | Vladimir Marko <vmarko@google.com> | 2014-06-06 14:50:36 +0100 |
---|---|---|
committer | Vladimir Marko <vmarko@google.com> | 2014-06-12 18:25:00 +0100 |
commit | 8dea81ca9c0201ceaa88086b927a5838a06a3e69 (patch) | |
tree | 6a074462c1c13d23aa21cef3f4d2d1a7a880de32 /compiler/dex/quick/arm/codegen_arm.h | |
parent | 3e1e549c564045d852ace46388eb06427d63e6ca (diff) | |
download | android_art-8dea81ca9c0201ceaa88086b927a5838a06a3e69.tar.gz android_art-8dea81ca9c0201ceaa88086b927a5838a06a3e69.tar.bz2 android_art-8dea81ca9c0201ceaa88086b927a5838a06a3e69.zip |
Rewrite use/def masks to support 128 bits.
Reduce LIR memory usage by holding masks by pointers in the
LIR rather than directly and using pre-defined const masks
for the common cases, allocating very few on the arena.
Change-Id: I0f6d27ef6867acd157184c8c74f9612cebfe6c16
Diffstat (limited to 'compiler/dex/quick/arm/codegen_arm.h')
-rw-r--r-- | compiler/dex/quick/arm/codegen_arm.h | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/compiler/dex/quick/arm/codegen_arm.h b/compiler/dex/quick/arm/codegen_arm.h index 9c801a520b..c977a2311d 100644 --- a/compiler/dex/quick/arm/codegen_arm.h +++ b/compiler/dex/quick/arm/codegen_arm.h @@ -63,7 +63,7 @@ class ArmMir2Lir FINAL : public Mir2Lir { RegLocation LocCReturnDouble(); RegLocation LocCReturnFloat(); RegLocation LocCReturnWide(); - uint64_t GetRegMaskCommon(RegStorage reg); + ResourceMask GetRegMaskCommon(const RegStorage& reg) const OVERRIDE; void AdjustSpillMask(); void ClobberCallerSave(); void FreeCallTemps(); @@ -79,12 +79,13 @@ class ArmMir2Lir FINAL : public Mir2Lir { int AssignInsnOffsets(); void AssignOffsets(); static uint8_t* EncodeLIRs(uint8_t* write_pos, LIR* lir); - void DumpResourceMask(LIR* lir, uint64_t mask, const char* prefix); - void SetupTargetResourceMasks(LIR* lir, uint64_t flags); + void DumpResourceMask(LIR* lir, const ResourceMask& mask, const char* prefix) OVERRIDE; + void SetupTargetResourceMasks(LIR* lir, uint64_t flags, + ResourceMask* use_mask, ResourceMask* def_mask) OVERRIDE; const char* GetTargetInstFmt(int opcode); const char* GetTargetInstName(int opcode); std::string BuildInsnString(const char* fmt, LIR* lir, unsigned char* base_addr); - uint64_t GetPCUseDefEncoding(); + ResourceMask GetPCUseDefEncoding() const OVERRIDE; uint64_t GetTargetInstFlags(int opcode); int GetInsnSize(LIR* lir); bool IsUnconditionalBranch(LIR* lir); @@ -217,6 +218,10 @@ class ArmMir2Lir FINAL : public Mir2Lir { bool GetEasyMultiplyOp(int lit, EasyMultiplyOp* op); bool GetEasyMultiplyTwoOps(int lit, EasyMultiplyOp* ops); void GenEasyMultiplyTwoOps(RegStorage r_dest, RegStorage r_src, EasyMultiplyOp* ops); + + static constexpr ResourceMask GetRegMaskArm(RegStorage reg); + static constexpr ResourceMask EncodeArmRegList(int reg_list); + static constexpr ResourceMask EncodeArmRegFpcsList(int reg_list); }; } // namespace art |