diff options
author | Calin Juravle <calin@google.com> | 2014-12-08 14:24:46 +0000 |
---|---|---|
committer | Calin Juravle <calin@google.com> | 2014-12-08 17:02:11 +0000 |
commit | d2ec87d84057174d4884ee16f652cbcfd31362e9 (patch) | |
tree | 9456c5851f157566380c37895407dfce4749bb4d /compiler/optimizing/code_generator.cc | |
parent | f551efff34c20e2f0cf962c3fc267204d5e7611f (diff) | |
download | art-d2ec87d84057174d4884ee16f652cbcfd31362e9.tar.gz art-d2ec87d84057174d4884ee16f652cbcfd31362e9.tar.bz2 art-d2ec87d84057174d4884ee16f652cbcfd31362e9.zip |
[optimizing compiler] Add REM_FLOAT and REM_DOUBLE
- for arm, x86, x86_64 backends
- reinstated fmod quick entry points for x86. This is a partial revert
of bd3682eada753de52975ae2b4a712bd87dc139a6 which added inline assembly
for floting point rem on x86. Note that Quick still uses the inline
version.
- fix rem tests for longs
Change-Id: I73be19a9f2f2bcf3f718d9ca636e67bdd72b5440
Diffstat (limited to 'compiler/optimizing/code_generator.cc')
-rw-r--r-- | compiler/optimizing/code_generator.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/compiler/optimizing/code_generator.cc b/compiler/optimizing/code_generator.cc index 7f358eaa6b..461409ddca 100644 --- a/compiler/optimizing/code_generator.cc +++ b/compiler/optimizing/code_generator.cc @@ -499,19 +499,27 @@ void CodeGenerator::BuildStackMaps(std::vector<uint8_t>* data) { } void CodeGenerator::RecordPcInfo(HInstruction* instruction, uint32_t dex_pc) { - if (instruction != nullptr && instruction->IsTypeConversion()) { + if (instruction != nullptr) { // 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). + // information for certain instructions, which are considered "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; + if (instruction->IsTypeConversion()) { + return; + } + if (instruction->IsRem()) { + Primitive::Type type = instruction->AsRem()->GetResultType(); + if ((type == Primitive::kPrimFloat) || (type == Primitive::kPrimDouble)) { + return; + } + } } // Collect PC infos for the mapping table. |