Minor cleanup of MIN/MAX code.
Rationale:
Share the type dispatching code better.
Bug: b/65164101
Test: test-art-host,target
Change-Id: Ib06c915d570fd0a53f7734cdb316d2d16310db74
diff --git a/compiler/optimizing/code_generator_x86.cc b/compiler/optimizing/code_generator_x86.cc
index 536909a..c887d9e 100644
--- a/compiler/optimizing/code_generator_x86.cc
+++ b/compiler/optimizing/code_generator_x86.cc
@@ -3836,9 +3836,9 @@
}
}
-void InstructionCodeGeneratorX86::GenerateMinMax(LocationSummary* locations,
- bool is_min,
- DataType::Type type) {
+void InstructionCodeGeneratorX86::GenerateMinMaxInt(LocationSummary* locations,
+ bool is_min,
+ DataType::Type type) {
Location op1_loc = locations->InAt(0);
Location op2_loc = locations->InAt(1);
@@ -3978,23 +3978,28 @@
__ Bind(&done);
}
+void InstructionCodeGeneratorX86::GenerateMinMax(HBinaryOperation* minmax, bool is_min) {
+ DataType::Type type = minmax->GetResultType();
+ switch (type) {
+ case DataType::Type::kInt32:
+ case DataType::Type::kInt64:
+ GenerateMinMaxInt(minmax->GetLocations(), is_min, type);
+ break;
+ case DataType::Type::kFloat32:
+ case DataType::Type::kFloat64:
+ GenerateMinMaxFP(minmax->GetLocations(), is_min, type);
+ break;
+ default:
+ LOG(FATAL) << "Unexpected type for HMinMax " << type;
+ }
+}
+
void LocationsBuilderX86::VisitMin(HMin* min) {
CreateMinMaxLocations(GetGraph()->GetAllocator(), min);
}
void InstructionCodeGeneratorX86::VisitMin(HMin* min) {
- switch (min->GetResultType()) {
- case DataType::Type::kInt32:
- case DataType::Type::kInt64:
- GenerateMinMax(min->GetLocations(), /*is_min*/ true, min->GetResultType());
- break;
- case DataType::Type::kFloat32:
- case DataType::Type::kFloat64:
- GenerateMinMaxFP(min->GetLocations(), /*is_min*/ true, min->GetResultType());
- break;
- default:
- LOG(FATAL) << "Unexpected type for HMin " << min->GetResultType();
- }
+ GenerateMinMax(min, /*is_min*/ true);
}
void LocationsBuilderX86::VisitMax(HMax* max) {
@@ -4002,18 +4007,7 @@
}
void InstructionCodeGeneratorX86::VisitMax(HMax* max) {
- switch (max->GetResultType()) {
- case DataType::Type::kInt32:
- case DataType::Type::kInt64:
- GenerateMinMax(max->GetLocations(), /*is_min*/ false, max->GetResultType());
- break;
- case DataType::Type::kFloat32:
- case DataType::Type::kFloat64:
- GenerateMinMaxFP(max->GetLocations(), /*is_min*/ false, max->GetResultType());
- break;
- default:
- LOG(FATAL) << "Unexpected type for HMax " << max->GetResultType();
- }
+ GenerateMinMax(max, /*is_min*/ false);
}
void LocationsBuilderX86::VisitAbs(HAbs* abs) {