summaryrefslogtreecommitdiff
path: root/compiler/optimizing/code_generator_mips.cc
diff options
context:
space:
mode:
authorAart Bik <ajcbik@google.com>2018-03-07 11:54:57 -0800
committerAart Bik <ajcbik@google.com>2018-03-07 12:00:42 -0800
commit351df3e70521ebbe00ed6c7ac4ea25a0c26f4034 (patch)
tree8a22bf2eb06d2a5e57c6d6272ac070d368467118 /compiler/optimizing/code_generator_mips.cc
parent72efc159bf4e5cde85cd28e78316681effdceb5b (diff)
Minor cleanup of MIN/MAX code.
Rationale: Share the type dispatching code better. Bug: b/65164101 Test: test-art-host,target Change-Id: Ib06c915d570fd0a53f7734cdb316d2d16310db74
Diffstat (limited to 'compiler/optimizing/code_generator_mips.cc')
-rw-r--r--compiler/optimizing/code_generator_mips.cc45
1 files changed, 19 insertions, 26 deletions
diff --git a/compiler/optimizing/code_generator_mips.cc b/compiler/optimizing/code_generator_mips.cc
index ae42bbcc70..825b2377c8 100644
--- a/compiler/optimizing/code_generator_mips.cc
+++ b/compiler/optimizing/code_generator_mips.cc
@@ -8799,10 +8799,10 @@ static void CreateMinMaxLocations(ArenaAllocator* allocator, HBinaryOperation* m
}
}
-void InstructionCodeGeneratorMIPS::GenerateMinMax(LocationSummary* locations,
- bool is_min,
- bool isR6,
- DataType::Type type) {
+void InstructionCodeGeneratorMIPS::GenerateMinMaxInt(LocationSummary* locations,
+ bool is_min,
+ bool isR6,
+ DataType::Type type) {
if (isR6) {
// Some architectures, such as ARM and MIPS (prior to r6), have a
// conditional move instruction which only changes the target
@@ -9130,44 +9130,37 @@ void InstructionCodeGeneratorMIPS::GenerateMinMaxFP(LocationSummary* locations,
}
}
-void LocationsBuilderMIPS::VisitMin(HMin* min) {
- CreateMinMaxLocations(GetGraph()->GetAllocator(), min);
-}
-
-void InstructionCodeGeneratorMIPS::VisitMin(HMin* min) {
+void InstructionCodeGeneratorMIPS::GenerateMinMax(HBinaryOperation* minmax, bool is_min) {
bool isR6 = codegen_->GetInstructionSetFeatures().IsR6();
- switch (min->GetResultType()) {
+ DataType::Type type = minmax->GetResultType();
+ switch (type) {
case DataType::Type::kInt32:
case DataType::Type::kInt64:
- GenerateMinMax(min->GetLocations(), /*is_min*/ true, isR6, min->GetResultType());
+ GenerateMinMaxInt(minmax->GetLocations(), is_min, isR6, type);
break;
case DataType::Type::kFloat32:
case DataType::Type::kFloat64:
- GenerateMinMaxFP(min->GetLocations(), /*is_min*/ true, isR6, min->GetResultType());
+ GenerateMinMaxFP(minmax->GetLocations(), is_min, isR6, type);
break;
default:
- LOG(FATAL) << "Unexpected type for HMin " << min->GetResultType();
+ LOG(FATAL) << "Unexpected type for HMinMax " << type;
}
}
+void LocationsBuilderMIPS::VisitMin(HMin* min) {
+ CreateMinMaxLocations(GetGraph()->GetAllocator(), min);
+}
+
+void InstructionCodeGeneratorMIPS::VisitMin(HMin* min) {
+ GenerateMinMax(min, /*is_min*/ true);
+}
+
void LocationsBuilderMIPS::VisitMax(HMax* max) {
CreateMinMaxLocations(GetGraph()->GetAllocator(), max);
}
void InstructionCodeGeneratorMIPS::VisitMax(HMax* max) {
- bool isR6 = codegen_->GetInstructionSetFeatures().IsR6();
- switch (max->GetResultType()) {
- case DataType::Type::kInt32:
- case DataType::Type::kInt64:
- GenerateMinMax(max->GetLocations(), /*is_min*/ false, isR6, max->GetResultType());
- break;
- case DataType::Type::kFloat32:
- case DataType::Type::kFloat64:
- GenerateMinMaxFP(max->GetLocations(), /*is_min*/ false, isR6, max->GetResultType());
- break;
- default:
- LOG(FATAL) << "Unexpected type for HMax " << max->GetResultType();
- }
+ GenerateMinMax(max, /*is_min*/ false);
}
void LocationsBuilderMIPS::VisitAbs(HAbs* abs) {