From 97a8a9a3385024d7a070a4b79d45afe9a64587cd Mon Sep 17 00:00:00 2001 From: Christina Wadsworth Date: Fri, 19 Aug 2016 11:23:48 -0700 Subject: [PATCH] ART: Adding asm support for string dex cache Added constants and offsets for the string dex cache fast paths that will be introduced into entrypoints in subsequent commits. Test: test-art-host Change-Id: I19f97526e06cbedc782d5ef11359796731cdad82 --- runtime/asm_support.h | 3 +++ runtime/generated/asm_support_gen.h | 10 ++++++++++ tools/cpp-define-generator/constant_dexcache.def | 24 ++++++++++++++++++++++++ tools/cpp-define-generator/offset_dexcache.def | 21 ++++++++++++++++----- tools/cpp-define-generator/offsets_all.def | 1 + 5 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 tools/cpp-define-generator/constant_dexcache.def diff --git a/runtime/asm_support.h b/runtime/asm_support.h index 848f8e532..102b99368 100644 --- a/runtime/asm_support.h +++ b/runtime/asm_support.h @@ -19,12 +19,15 @@ #if defined(__cplusplus) #include "art_method.h" +#include "base/bit_utils.h" #include "gc/allocator/rosalloc.h" #include "gc/heap.h" #include "jit/jit.h" #include "lock_word.h" #include "mirror/class.h" +#include "mirror/dex_cache.h" #include "mirror/string.h" +#include "utils/dex_cache_arrays_layout.h" #include "runtime.h" #include "thread.h" #endif diff --git a/runtime/generated/asm_support_gen.h b/runtime/generated/asm_support_gen.h index 716c23d1b..40b71c40a 100644 --- a/runtime/generated/asm_support_gen.h +++ b/runtime/generated/asm_support_gen.h @@ -70,6 +70,16 @@ DEFINE_CHECK_EQ(static_cast(ART_METHOD_JNI_OFFSET_64), (static_cast(ART_METHOD_QUICK_CODE_OFFSET_32), (static_cast(art::ArtMethod:: EntryPointFromQuickCompiledCodeOffset(art::PointerSize::k32).Int32Value()))) #define ART_METHOD_QUICK_CODE_OFFSET_64 48 DEFINE_CHECK_EQ(static_cast(ART_METHOD_QUICK_CODE_OFFSET_64), (static_cast(art::ArtMethod:: EntryPointFromQuickCompiledCodeOffset(art::PointerSize::k64).Int32Value()))) +#define ART_METHOD_DECLARING_CLASS_OFFSET 0 +DEFINE_CHECK_EQ(static_cast(ART_METHOD_DECLARING_CLASS_OFFSET), (static_cast(art::ArtMethod:: DeclaringClassOffset().Int32Value()))) +#define DECLARING_CLASS_DEX_CACHE_STRINGS_OFFSET 40 +DEFINE_CHECK_EQ(static_cast(DECLARING_CLASS_DEX_CACHE_STRINGS_OFFSET), (static_cast(art::mirror::Class:: DexCacheStringsOffset().Int32Value()))) +#define STRING_DEX_CACHE_ELEMENT_SIZE_SHIFT 3 +DEFINE_CHECK_EQ(static_cast(STRING_DEX_CACHE_ELEMENT_SIZE_SHIFT), (static_cast(art::WhichPowerOf2(sizeof(art::mirror::StringDexCachePair))))) +#define STRING_DEX_CACHE_SIZE_MINUS_ONE 1023 +DEFINE_CHECK_EQ(static_cast(STRING_DEX_CACHE_SIZE_MINUS_ONE), (static_cast(art::mirror::DexCache::kDexCacheStringCacheSize - 1))) +#define STRING_DEX_CACHE_HASH_BITS 10 +DEFINE_CHECK_EQ(static_cast(STRING_DEX_CACHE_HASH_BITS), (static_cast(art::LeastSignificantBit(art::mirror::DexCache::kDexCacheStringCacheSize)))) #define MIN_LARGE_OBJECT_THRESHOLD 0x3000 DEFINE_CHECK_EQ(static_cast(MIN_LARGE_OBJECT_THRESHOLD), (static_cast(art::gc::Heap::kMinLargeObjectThreshold))) #define LOCK_WORD_STATE_SHIFT 30 diff --git a/tools/cpp-define-generator/constant_dexcache.def b/tools/cpp-define-generator/constant_dexcache.def new file mode 100644 index 000000000..fd197f2b3 --- /dev/null +++ b/tools/cpp-define-generator/constant_dexcache.def @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined(DEFINE_INCLUDE_DEPENDENCIES) +#include "mirror/dex_cache.h" // art::mirror::DexCache, StringDexCachePair +#endif + +DEFINE_EXPR(STRING_DEX_CACHE_ELEMENT_SIZE_SHIFT, int32_t, art::WhichPowerOf2(sizeof(art::mirror::StringDexCachePair))) +DEFINE_EXPR(STRING_DEX_CACHE_SIZE_MINUS_ONE, int32_t, art::mirror::DexCache::kDexCacheStringCacheSize - 1) +DEFINE_EXPR(STRING_DEX_CACHE_HASH_BITS, int32_t, + art::LeastSignificantBit(art::mirror::DexCache::kDexCacheStringCacheSize)) \ No newline at end of file diff --git a/tools/cpp-define-generator/offset_dexcache.def b/tools/cpp-define-generator/offset_dexcache.def index 3b2651878..4b9d481eb 100644 --- a/tools/cpp-define-generator/offset_dexcache.def +++ b/tools/cpp-define-generator/offset_dexcache.def @@ -19,16 +19,27 @@ #if defined(DEFINE_INCLUDE_DEPENDENCIES) #include "art_method.h" // art::ArtMethod #include "base/enums.h" // PointerSize +#include "mirror/dex_cache.h" // art::DexCache #endif -#define DEFINE_ART_METHOD_OFFSET(field_name, method_name) \ +#define DEFINE_ART_METHOD_OFFSET_SIZED(field_name, method_name) \ DEFINE_EXPR(ART_METHOD_ ## field_name ## _OFFSET_32, int32_t, art::ArtMethod::method_name##Offset(art::PointerSize::k32).Int32Value()) \ DEFINE_EXPR(ART_METHOD_ ## field_name ## _OFFSET_64, int32_t, art::ArtMethod::method_name##Offset(art::PointerSize::k64).Int32Value()) +#define DEFINE_ART_METHOD_OFFSET(field_name, method_name) \ + DEFINE_EXPR(ART_METHOD_ ## field_name ## _OFFSET, int32_t, art::ArtMethod::method_name##Offset().Int32Value()) + +#define DEFINE_DECLARING_CLASS_OFFSET(field_name, method_name) \ + DEFINE_EXPR(DECLARING_CLASS_ ## field_name ## _OFFSET, int32_t, art::mirror::Class::method_name##Offset().Int32Value()) + // New macro suffix Method Name (of the Offset method) -DEFINE_ART_METHOD_OFFSET(DEX_CACHE_METHODS, DexCacheResolvedMethods) -DEFINE_ART_METHOD_OFFSET(DEX_CACHE_TYPES, DexCacheResolvedTypes) -DEFINE_ART_METHOD_OFFSET(JNI, EntryPointFromJni) -DEFINE_ART_METHOD_OFFSET(QUICK_CODE, EntryPointFromQuickCompiledCode) +DEFINE_ART_METHOD_OFFSET_SIZED(DEX_CACHE_METHODS, DexCacheResolvedMethods) +DEFINE_ART_METHOD_OFFSET_SIZED(DEX_CACHE_TYPES, DexCacheResolvedTypes) +DEFINE_ART_METHOD_OFFSET_SIZED(JNI, EntryPointFromJni) +DEFINE_ART_METHOD_OFFSET_SIZED(QUICK_CODE, EntryPointFromQuickCompiledCode) +DEFINE_ART_METHOD_OFFSET(DECLARING_CLASS, DeclaringClass) +DEFINE_DECLARING_CLASS_OFFSET(DEX_CACHE_STRINGS, DexCacheStrings) #undef DEFINE_ART_METHOD_OFFSET +#undef DEFINE_ART_METHOD_OFFSET_32 +#undef DEFINE_DECLARING_CLASS_OFFSET diff --git a/tools/cpp-define-generator/offsets_all.def b/tools/cpp-define-generator/offsets_all.def index d2d877710..13371a1f7 100644 --- a/tools/cpp-define-generator/offsets_all.def +++ b/tools/cpp-define-generator/offsets_all.def @@ -48,6 +48,7 @@ // TODO: MIRROR_*_ARRAY offsets (depends on header size) // TODO: MIRROR_STRING offsets (depends on header size) #include "offset_dexcache.def" +#include "constant_dexcache.def" #include "constant_heap.def" #include "constant_lockword.def" #include "constant_globals.def" -- 2.11.0