diff options
author | Jeff Hao <jeffhao@google.com> | 2014-01-15 13:49:50 -0800 |
---|---|---|
committer | Jeff Hao <jeffhao@google.com> | 2015-04-27 18:54:52 -0700 |
commit | 848f70a3d73833fc1bf3032a9ff6812e429661d9 (patch) | |
tree | b0349b3a40aab5a915af491b100659a5ca9fbbf6 /compiler/driver/compiler_driver.cc | |
parent | d14438f0c5071962be7fab572b54687d32d9d087 (diff) | |
download | android_art-848f70a3d73833fc1bf3032a9ff6812e429661d9.tar.gz android_art-848f70a3d73833fc1bf3032a9ff6812e429661d9.tar.bz2 android_art-848f70a3d73833fc1bf3032a9ff6812e429661d9.zip |
Replace String CharArray with internal uint16_t array.
Summary of high level changes:
- Adds compiler inliner support to identify string init methods
- Adds compiler support (quick & optimizing) with new invoke code path
that calls method off the thread pointer
- Adds thread entrypoints for all string init methods
- Adds map to verifier to log when receiver of string init has been
copied to other registers. used by compiler and interpreter
Change-Id: I797b992a8feb566f9ad73060011ab6f51eb7ce01
Diffstat (limited to 'compiler/driver/compiler_driver.cc')
-rw-r--r-- | compiler/driver/compiler_driver.cc | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index c858326562..47288b5098 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -40,6 +40,7 @@ #include "dex/verification_results.h" #include "dex/verified_method.h" #include "dex/quick/dex_file_method_inliner.h" +#include "dex/quick/dex_file_to_method_inliner_map.h" #include "driver/compiler_options.h" #include "elf_writer_quick.h" #include "jni_internal.h" @@ -2485,4 +2486,16 @@ std::string CompilerDriver::GetMemoryUsageString(bool extended) const { return oss.str(); } +bool CompilerDriver::IsStringTypeIndex(uint16_t type_index, const DexFile* dex_file) { + const char* type = dex_file->GetTypeDescriptor(dex_file->GetTypeId(type_index)); + return strcmp(type, "Ljava/lang/String;") == 0; +} + +bool CompilerDriver::IsStringInit(uint32_t method_index, const DexFile* dex_file, int32_t* offset) { + DexFileMethodInliner* inliner = GetMethodInlinerMap()->GetMethodInliner(dex_file); + size_t pointer_size = InstructionSetPointerSize(GetInstructionSet()); + *offset = inliner->GetOffsetForStringInit(method_index, pointer_size); + return inliner->IsStringInitMethodIndex(method_index); +} + } // namespace art |