diff options
| author | 2014-11-24 18:29:54 -0800 | |
|---|---|---|
| committer | 2014-11-25 16:02:04 -0800 | |
| commit | eace45873190a27302b3644c32ec82854b59d299 (patch) | |
| tree | 73fbf327839263b6847bdc4359ac1dbea2b897e3 /compiler/dex/quick/gen_common.cc | |
| parent | 8ac8d5556fae9c728bcebcc9036a1bbf40087c76 (diff) | |
Move dexCacheStrings from ArtMethod to Class
Adds one load for const strings which are not direct.
Saves >= 60KB of memory avg per app.
Image size: -350KB.
Bug: 17643507
Change-Id: I2d1a3253d9de09682be9bc6b420a29513d592cc8
(cherry picked from commit f521f423b66e952f746885dd9f6cf8ef2788955d)
Diffstat (limited to 'compiler/dex/quick/gen_common.cc')
| -rw-r--r-- | compiler/dex/quick/gen_common.cc | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/compiler/dex/quick/gen_common.cc b/compiler/dex/quick/gen_common.cc index 0af0ca8840..9be8719b5d 100644 --- a/compiler/dex/quick/gen_common.cc +++ b/compiler/dex/quick/gen_common.cc @@ -1068,7 +1068,11 @@ void Mir2Lir::GenConstString(uint32_t string_idx, RegLocation rl_dest) { r_method = TargetReg(kArg2, kRef); LoadCurrMethodDirect(r_method); } - LoadRefDisp(r_method, mirror::ArtMethod::DexCacheStringsOffset().Int32Value(), + // Method to declaring class. + LoadRefDisp(r_method, mirror::ArtMethod::DeclaringClassOffset().Int32Value(), + TargetReg(kArg0, kRef), kNotVolatile); + // Declaring class to dex cache strings. + LoadRefDisp(TargetReg(kArg0, kRef), mirror::Class::DexCacheStringsOffset().Int32Value(), TargetReg(kArg0, kRef), kNotVolatile); // Might call out to helper, which will return resolved string in kRet0 @@ -1106,7 +1110,9 @@ void Mir2Lir::GenConstString(uint32_t string_idx, RegLocation rl_dest) { RegLocation rl_method = LoadCurrMethod(); RegStorage res_reg = AllocTempRef(); RegLocation rl_result = EvalLoc(rl_dest, kRefReg, true); - LoadRefDisp(rl_method.reg, mirror::ArtMethod::DexCacheStringsOffset().Int32Value(), res_reg, + LoadRefDisp(rl_method.reg, mirror::ArtMethod::DeclaringClassOffset().Int32Value(), res_reg, + kNotVolatile); + LoadRefDisp(res_reg, mirror::Class::DexCacheStringsOffset().Int32Value(), res_reg, kNotVolatile); LoadRefDisp(res_reg, offset_of_string, rl_result.reg, kNotVolatile); StoreValue(rl_dest, rl_result); |