summaryrefslogtreecommitdiffstats
path: root/compiler/optimizing/code_generator.cc
diff options
context:
space:
mode:
authorCalin Juravle <calin@google.com>2014-12-08 14:24:46 +0000
committerCalin Juravle <calin@google.com>2014-12-08 17:02:11 +0000
commitd2ec87d84057174d4884ee16f652cbcfd31362e9 (patch)
tree9456c5851f157566380c37895407dfce4749bb4d /compiler/optimizing/code_generator.cc
parentf551efff34c20e2f0cf962c3fc267204d5e7611f (diff)
downloadart-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.cc16
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.