diff options
author | Roland Levillain <rpl@google.com> | 2014-12-04 11:54:28 +0000 |
---|---|---|
committer | Roland Levillain <rpl@google.com> | 2014-12-04 11:54:28 +0000 |
commit | 624279f3c70f9904cbaf428078981b05d3b324c0 (patch) | |
tree | a81f8d8facfc28cac479a68a1042edc74c36d25b /compiler/optimizing/code_generator.cc | |
parent | 9a64a46e8edfa89402598d8650b8ebb337ba3d52 (diff) | |
download | android_art-624279f3c70f9904cbaf428078981b05d3b324c0.tar.gz android_art-624279f3c70f9904cbaf428078981b05d3b324c0.tar.bz2 android_art-624279f3c70f9904cbaf428078981b05d3b324c0.zip |
Add support for float-to-long in the optimizing compiler.
- Add support for the float-to-long Dex instruction in the
optimizing compiler.
- Add a Dex PC field to art::HTypeConversion to allow the
x86 and ARM code generators to produce runtime calls.
- Instruct art::CodeGenerator::RecordPcInfo not to record
PC information for HTypeConversion instructions.
- Add S0 to the list of ARM FPU parameter registers.
- Have art::x86_64::X86_64Assembler::cvttss2si work with
64-bit operands.
- Generate x86, x86-64 and ARM (but not ARM64) code for
float to long HTypeConversion nodes.
- Add related tests to test/422-type-conversion.
Change-Id: I954214f0d537187883f83f7a83a1bb2dd8a21fd4
Diffstat (limited to 'compiler/optimizing/code_generator.cc')
-rw-r--r-- | compiler/optimizing/code_generator.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/compiler/optimizing/code_generator.cc b/compiler/optimizing/code_generator.cc index e581af22aa..7f358eaa6b 100644 --- a/compiler/optimizing/code_generator.cc +++ b/compiler/optimizing/code_generator.cc @@ -499,6 +499,21 @@ void CodeGenerator::BuildStackMaps(std::vector<uint8_t>* data) { } void CodeGenerator::RecordPcInfo(HInstruction* instruction, uint32_t dex_pc) { + if (instruction != nullptr && instruction->IsTypeConversion()) { + // The code generated for some type conversions may call the + // runtime, thus normally requiring a subsequent call to this + // method. However, the method verifier does not produce PC + // information for Dex type conversion instructions, as it + // considers them as "atomic" (they cannot join a GC). + // Therefore we do not currently record PC information for such + // instructions. As this may change later, we added this special + // case so that code generators may nevertheless call + // CodeGenerator::RecordPcInfo without triggering an error in + // CodeGenerator::BuildNativeGCMap ("Missing ref for dex pc 0x") + // thereafter. + return; + } + // Collect PC infos for the mapping table. struct PcInfo pc_info; pc_info.dex_pc = dex_pc; |