summaryrefslogtreecommitdiffstats
path: root/compiler/optimizing
diff options
context:
space:
mode:
authorRoland Levillain <rpl@google.com>2014-11-10 13:39:43 +0000
committerRoland Levillain <rpl@google.com>2014-11-10 13:39:43 +0000
commit666c732cfa211abf44ed90120a87bf8c18138e55 (patch)
treebe5eb89a51ce94314b5c0761171eb276faf1ec36 /compiler/optimizing
parentbb5b390c3b7c1d6571e73672124f82cc40026f6a (diff)
downloadart-666c732cfa211abf44ed90120a87bf8c18138e55.tar.gz
art-666c732cfa211abf44ed90120a87bf8c18138e55.tar.bz2
art-666c732cfa211abf44ed90120a87bf8c18138e55.zip
Support Java conversions from char to long in opt. compiler.
These char to long conversions generate int-to-long Dex instructions. Change-Id: I6a8e71b57870cf5e8d5bc638fabce0fc7593f0b2
Diffstat (limited to 'compiler/optimizing')
-rw-r--r--compiler/optimizing/code_generator_arm.cc2
-rw-r--r--compiler/optimizing/code_generator_x86.cc2
-rw-r--r--compiler/optimizing/code_generator_x86_64.cc2
3 files changed, 6 insertions, 0 deletions
diff --git a/compiler/optimizing/code_generator_arm.cc b/compiler/optimizing/code_generator_arm.cc
index 6218fc973a..467c2a6c29 100644
--- a/compiler/optimizing/code_generator_arm.cc
+++ b/compiler/optimizing/code_generator_arm.cc
@@ -1338,6 +1338,7 @@ void LocationsBuilderARM::VisitTypeConversion(HTypeConversion* conversion) {
case Primitive::kPrimByte:
case Primitive::kPrimShort:
case Primitive::kPrimInt:
+ case Primitive::kPrimChar:
// int-to-long conversion.
locations->SetInAt(0, Location::RequiresRegister());
locations->SetOut(Location::RequiresRegister(), Location::kNoOutputOverlap);
@@ -1380,6 +1381,7 @@ void InstructionCodeGeneratorARM::VisitTypeConversion(HTypeConversion* conversio
case Primitive::kPrimByte:
case Primitive::kPrimShort:
case Primitive::kPrimInt:
+ case Primitive::kPrimChar:
// int-to-long conversion.
DCHECK(out.IsRegisterPair());
DCHECK(in.IsRegister());
diff --git a/compiler/optimizing/code_generator_x86.cc b/compiler/optimizing/code_generator_x86.cc
index 82591b0ebf..d66180be32 100644
--- a/compiler/optimizing/code_generator_x86.cc
+++ b/compiler/optimizing/code_generator_x86.cc
@@ -1266,6 +1266,7 @@ void LocationsBuilderX86::VisitTypeConversion(HTypeConversion* conversion) {
case Primitive::kPrimByte:
case Primitive::kPrimShort:
case Primitive::kPrimInt:
+ case Primitive::kPrimChar:
// int-to-long conversion.
locations->SetInAt(0, Location::RegisterLocation(EAX));
locations->SetOut(Location::RegisterPairLocation(EAX, EDX));
@@ -1308,6 +1309,7 @@ void InstructionCodeGeneratorX86::VisitTypeConversion(HTypeConversion* conversio
case Primitive::kPrimByte:
case Primitive::kPrimShort:
case Primitive::kPrimInt:
+ case Primitive::kPrimChar:
// int-to-long conversion.
DCHECK_EQ(out.AsRegisterPairLow<Register>(), EAX);
DCHECK_EQ(out.AsRegisterPairHigh<Register>(), EDX);
diff --git a/compiler/optimizing/code_generator_x86_64.cc b/compiler/optimizing/code_generator_x86_64.cc
index d2730a5b37..e09b6cab08 100644
--- a/compiler/optimizing/code_generator_x86_64.cc
+++ b/compiler/optimizing/code_generator_x86_64.cc
@@ -1264,6 +1264,7 @@ void LocationsBuilderX86_64::VisitTypeConversion(HTypeConversion* conversion) {
case Primitive::kPrimByte:
case Primitive::kPrimShort:
case Primitive::kPrimInt:
+ case Primitive::kPrimChar:
// int-to-long conversion.
// TODO: We would benefit from a (to-be-implemented)
// Location::RegisterOrStackSlot requirement for this input.
@@ -1309,6 +1310,7 @@ void InstructionCodeGeneratorX86_64::VisitTypeConversion(HTypeConversion* conver
case Primitive::kPrimByte:
case Primitive::kPrimShort:
case Primitive::kPrimInt:
+ case Primitive::kPrimChar:
// int-to-long conversion.
DCHECK(in.IsRegister());
__ movsxd(out.As<CpuRegister>(), in.As<CpuRegister>());