diff options
| author | 2014-04-24 17:30:35 +0000 | |
|---|---|---|
| committer | 2014-04-24 17:30:35 +0000 | |
| commit | b5a14d2a6c18c1ea3c019c53b10af2e8f5dea234 (patch) | |
| tree | 185fd3643ae9503c2506c24b26c9869dd34fbbf3 | |
| parent | 973cc95da6fb617bab133bd7a693c1cb7eafd393 (diff) | |
Revert "ART: Extracts an utility function of the duplicated code"
This reverts commit 973cc95da6fb617bab133bd7a693c1cb7eafd393.
Change-Id: I3883c74ba06116e89d89d9cf085f20cff5d15f77
| -rw-r--r-- | compiler/dex/quick/gen_common.cc | 25 | ||||
| -rw-r--r-- | runtime/mirror/array.h | 6 |
2 files changed, 18 insertions, 13 deletions
diff --git a/compiler/dex/quick/gen_common.cc b/compiler/dex/quick/gen_common.cc index bd662b71c7..aa9b2a491a 100644 --- a/compiler/dex/quick/gen_common.cc +++ b/compiler/dex/quick/gen_common.cc @@ -519,7 +519,8 @@ void Mir2Lir::GenSput(MIR* mir, RegLocation rl_src, bool is_long_or_double, r_base = TargetReg(kArg0); LockTemp(r_base); LoadRefDisp(r_method, mirror::ArtMethod::DexCacheResolvedTypesOffset().Int32Value(), r_base); - LoadRefDisp(r_base, mirror::Array::DataOffsetOfType<mirror::Object>(field_info.StorageIndex()), r_base); + LoadRefDisp(r_base, mirror::Array::DataOffset(sizeof(mirror::Object*)).Int32Value() + + sizeof(int32_t*) * field_info.StorageIndex(), r_base); // r_base now points at static storage (Class*) or NULL if the type is not yet resolved. if (!field_info.IsInitialized() && (mir->optimization_flags & MIR_IGNORE_CLINIT_CHECK) == 0) { @@ -607,7 +608,8 @@ void Mir2Lir::GenSget(MIR* mir, RegLocation rl_dest, r_base = TargetReg(kArg0); LockTemp(r_base); LoadRefDisp(r_method, mirror::ArtMethod::DexCacheResolvedTypesOffset().Int32Value(), r_base); - LoadRefDisp(r_base, mirror::Array::DataOffsetOfType<mirror::Object>(field_info.StorageIndex()), r_base); + LoadRefDisp(r_base, mirror::Array::DataOffset(sizeof(mirror::Object*)).Int32Value() + + sizeof(int32_t*) * field_info.StorageIndex(), r_base); // r_base now points at static storage (Class*) or NULL if the type is not yet resolved. if (!field_info.IsInitialized() && (mir->optimization_flags & MIR_IGNORE_CLINIT_CHECK) == 0) { @@ -863,7 +865,9 @@ void Mir2Lir::GenConstClass(uint32_t type_idx, RegLocation rl_dest) { int32_t dex_cache_offset = mirror::ArtMethod::DexCacheResolvedTypesOffset().Int32Value(); Load32Disp(rl_method.reg, dex_cache_offset, res_reg); - int32_t offset_of_type = mirror::Array::DataOffsetOfType<mirror::Class>(type_idx); + int32_t offset_of_type = + mirror::Array::DataOffset(sizeof(mirror::Class*)).Int32Value() + (sizeof(mirror::Class*) + * type_idx); Load32Disp(res_reg, offset_of_type, rl_result.reg); if (!cu_->compiler_driver->CanAssumeTypeIsPresentInDexCache(*cu_->dex_file, type_idx) || SLOW_TYPE_PATH) { @@ -910,7 +914,8 @@ void Mir2Lir::GenConstClass(uint32_t type_idx, RegLocation rl_dest) { void Mir2Lir::GenConstString(uint32_t string_idx, RegLocation rl_dest) { /* NOTE: Most strings should be available at compile time */ - int32_t offset_of_string = mirror::Array::DataOffsetOfType<mirror::String>(string_idx); + int32_t offset_of_string = mirror::Array::DataOffset(sizeof(mirror::String*)).Int32Value() + + (sizeof(mirror::String*) * string_idx); if (!cu_->compiler_driver->CanAssumeStringIsPresentInDexCache( *cu_->dex_file, string_idx) || SLOW_STRING_PATH) { // slow path, resolve string if not in dex cache @@ -1074,7 +1079,9 @@ void Mir2Lir::GenInstanceofFinal(bool use_declaring_class, uint32_t type_idx, Re LoadRefDisp(check_class, mirror::ArtMethod::DexCacheResolvedTypesOffset().Int32Value(), check_class); LoadRefDisp(object.reg, mirror::Object::ClassOffset().Int32Value(), object_class); - int32_t offset_of_type = mirror::Array::DataOffsetOfType<mirror::Class>(type_idx); + int32_t offset_of_type = + mirror::Array::DataOffset(sizeof(mirror::Class*)).Int32Value() + + (sizeof(mirror::Class*) * type_idx); LoadRefDisp(check_class, offset_of_type, check_class); } @@ -1132,7 +1139,9 @@ void Mir2Lir::GenInstanceofCallingHelper(bool needs_access_check, bool type_know LoadValueDirectFixed(rl_src, TargetReg(kArg0)); // kArg0 <= ref LoadRefDisp(TargetReg(kArg1), mirror::ArtMethod::DexCacheResolvedTypesOffset().Int32Value(), class_reg); - int32_t offset_of_type = mirror::Array::DataOffsetOfType<mirror::Class>(type_idx); + int32_t offset_of_type = + mirror::Array::DataOffset(sizeof(mirror::Class*)).Int32Value() + (sizeof(mirror::Class*) + * type_idx); LoadRefDisp(class_reg, offset_of_type, class_reg); if (!can_assume_type_is_in_dex_cache) { // Need to test presence of type in dex cache at runtime @@ -1266,7 +1275,9 @@ void Mir2Lir::GenCheckCast(uint32_t insn_idx, uint32_t type_idx, RegLocation rl_ // Load dex cache entry into class_reg (kArg2) LoadRefDisp(TargetReg(kArg1), mirror::ArtMethod::DexCacheResolvedTypesOffset().Int32Value(), class_reg); - int32_t offset_of_type = mirror::Array::DataOffsetOfType<mirror::Class>(type_idx); + int32_t offset_of_type = + mirror::Array::DataOffset(sizeof(mirror::Class*)).Int32Value() + + (sizeof(mirror::Class*) * type_idx); LoadRefDisp(class_reg, offset_of_type, class_reg); if (!cu_->compiler_driver->CanAssumeTypeIsPresentInDexCache(*cu_->dex_file, type_idx)) { // Need to test presence of type in dex cache at runtime diff --git a/runtime/mirror/array.h b/runtime/mirror/array.h index a9dcfe6aee..772d303360 100644 --- a/runtime/mirror/array.h +++ b/runtime/mirror/array.h @@ -68,12 +68,6 @@ class MANAGED Array : public Object { } } - template<class MirrorType> - static int32_t DataOffsetOfType(uint32_t index) { - return DataOffset(sizeof(HeapReference<MirrorType>)).Int32Value() + - (sizeof(HeapReference<MirrorType>) * index); - } - void* GetRawData(size_t component_size, int32_t index) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { intptr_t data = reinterpret_cast<intptr_t>(this) + DataOffset(component_size).Int32Value() + |