diff options
Diffstat (limited to 'compiler/optimizing/optimizing_compiler.cc')
-rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index 80e9cdb16f..0555c00e33 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -233,23 +233,30 @@ 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()); HGraph* graph = builder.BuildGraph(*code_item); if (graph == nullptr) { - if (shouldCompile) { - LOG(FATAL) << "Could not build graph in optimizing compiler"; - } + CHECK(!shouldCompile) << "Could not build graph in optimizing compiler"; return nullptr; } CodeGenerator* codegen = CodeGenerator::Create(&arena, graph, instruction_set); if (codegen == nullptr) { - if (shouldCompile) { - LOG(FATAL) << "Could not find code generator for optimizing compiler"; - } + CHECK(!shouldCompile) << "Could not find code generator for optimizing compiler"; return nullptr; } @@ -305,7 +312,7 @@ CompiledMethod* OptimizingCompiler::TryCompile(const DexFile::CodeItem* code_ite stack_map); } else if (shouldOptimize && RegisterAllocator::Supports(instruction_set)) { LOG(FATAL) << "Could not allocate registers in optimizing compiler"; - return nullptr; + UNREACHABLE(); } else { unoptimized_compiled_methods_++; codegen->CompileBaseline(&allocator); |