diff options
author | 2014-10-27 15:14:55 +0000 | |
---|---|---|
committer | 2014-10-27 17:20:35 +0000 | |
commit | 1ba0f596e9e4ddd778ab431237d11baa85594eba (patch) | |
tree | c1d51616adf4d98aab3ebccf47ad5146635cb87f /compiler/optimizing/optimizing_compiler.cc | |
parent | 1ef3495abfa2a858b3cc7a1844383c8e7dff0b60 (diff) |
Support hard float on arm in optimizing compiler.
Also bump oat version, needed after latest hard float switch.
Change-Id: Idf5acfb36c07e74acff00edab998419a3c6b2965
Diffstat (limited to 'compiler/optimizing/optimizing_compiler.cc')
-rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index 0555c00e33..5350dcb7b6 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -199,6 +199,13 @@ void OptimizingCompiler::InitCompilationUnit(CompilationUnit& cu) const { delegate_->InitCompilationUnit(cu); } +static bool IsInstructionSetSupported(InstructionSet instruction_set) { + return instruction_set == kArm64 + || (instruction_set == kThumb2 && !kArm32QuickCodeUseSoftFloat) + || instruction_set == kX86 + || instruction_set == kX86_64; +} + CompiledMethod* OptimizingCompiler::TryCompile(const DexFile::CodeItem* code_item, uint32_t access_flags, InvokeType invoke_type, @@ -215,10 +222,7 @@ CompiledMethod* OptimizingCompiler::TryCompile(const DexFile::CodeItem* code_ite } // Do not attempt to compile on architectures we do not support. - if (instruction_set != kArm64 && - instruction_set != kThumb2 && - instruction_set != kX86 && - instruction_set != kX86_64) { + if (!IsInstructionSetSupported(instruction_set)) { return nullptr; } @@ -233,17 +237,6 @@ CompiledMethod* OptimizingCompiler::TryCompile(const DexFile::CodeItem* code_ite bool shouldOptimize = dex_compilation_unit.GetSymbol().find("00024reg_00024") != std::string::npos; - if (instruction_set == kThumb2 && !kArm32QuickCodeUseSoftFloat) { - uint32_t shorty_len; - const char* shorty = dex_compilation_unit.GetShorty(&shorty_len); - for (uint32_t i = 0; i < shorty_len; ++i) { - if (shorty[i] == 'D' || shorty[i] == 'F') { - CHECK(!shouldCompile) << "Hard float ARM32 parameters are not yet supported"; - return nullptr; - } - } - } - ArenaPool pool; ArenaAllocator arena(&pool); HGraphBuilder builder(&arena, &dex_compilation_unit, &dex_file, GetCompilerDriver()); |