diff options
author | Roland Levillain <rpl@google.com> | 2014-11-10 13:39:43 +0000 |
---|---|---|
committer | Roland Levillain <rpl@google.com> | 2014-11-10 13:39:43 +0000 |
commit | 666c732cfa211abf44ed90120a87bf8c18138e55 (patch) | |
tree | be5eb89a51ce94314b5c0761171eb276faf1ec36 /compiler/optimizing | |
parent | bb5b390c3b7c1d6571e73672124f82cc40026f6a (diff) | |
download | art-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.cc | 2 | ||||
-rw-r--r-- | compiler/optimizing/code_generator_x86.cc | 2 | ||||
-rw-r--r-- | compiler/optimizing/code_generator_x86_64.cc | 2 |
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>()); |