Commit 803b0c74 authored by balazs.kilvady's avatar balazs.kilvady Committed by Commit bot

MIPS: [turbofan] Fix implementation of Float64Min.

Port d783b763

Original commit message:
ARM64's `fmin` and `fmax` instructions don't have the same behaviour as
TurboFan's Float(32|64)(Min|Max) functions.

BUG=4206
LOG=N

Review URL: https://codereview.chromium.org/1204903004

Cr-Commit-Position: refs/heads/master@{#29305}
parent 81c7e247
...@@ -452,28 +452,16 @@ void InstructionSelector::VisitFloat64Mod(Node* node) { ...@@ -452,28 +452,16 @@ void InstructionSelector::VisitFloat64Mod(Node* node) {
} }
void InstructionSelector::VisitFloat32Max(Node* node) { void InstructionSelector::VisitFloat32Max(Node* node) { UNREACHABLE(); }
DCHECK(kArchVariant == kMips32r6);
VisitRRR(this, kMipsMaxS, node);
}
void InstructionSelector::VisitFloat64Max(Node* node) { void InstructionSelector::VisitFloat64Max(Node* node) { UNREACHABLE(); }
DCHECK(kArchVariant == kMips32r6);
VisitRRR(this, kMipsMaxD, node);
}
void InstructionSelector::VisitFloat32Min(Node* node) { void InstructionSelector::VisitFloat32Min(Node* node) { UNREACHABLE(); }
DCHECK(kArchVariant == kMips32r6);
VisitRRR(this, kMipsMinS, node);
}
void InstructionSelector::VisitFloat64Min(Node* node) { void InstructionSelector::VisitFloat64Min(Node* node) { UNREACHABLE(); }
DCHECK(kArchVariant == kMips32r6);
VisitRRR(this, kMipsMinD, node);
}
void InstructionSelector::VisitFloat32Abs(Node* node) { void InstructionSelector::VisitFloat32Abs(Node* node) {
...@@ -1095,12 +1083,6 @@ void InstructionSelector::VisitFloat64InsertHighWord32(Node* node) { ...@@ -1095,12 +1083,6 @@ void InstructionSelector::VisitFloat64InsertHighWord32(Node* node) {
MachineOperatorBuilder::Flags MachineOperatorBuilder::Flags
InstructionSelector::SupportedMachineOperatorFlags() { InstructionSelector::SupportedMachineOperatorFlags() {
MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags; MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags;
if (IsMipsArchVariant(kMips32r6)) {
flags |= MachineOperatorBuilder::kFloat32Max |
MachineOperatorBuilder::kFloat32Min |
MachineOperatorBuilder::kFloat64Max |
MachineOperatorBuilder::kFloat64Min;
}
if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) && if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) &&
IsFp64Mode()) { IsFp64Mode()) {
flags |= MachineOperatorBuilder::kFloat64RoundDown | flags |= MachineOperatorBuilder::kFloat64RoundDown |
......
...@@ -601,28 +601,16 @@ void InstructionSelector::VisitFloat64Mod(Node* node) { ...@@ -601,28 +601,16 @@ void InstructionSelector::VisitFloat64Mod(Node* node) {
} }
void InstructionSelector::VisitFloat32Max(Node* node) { void InstructionSelector::VisitFloat32Max(Node* node) { UNREACHABLE(); }
DCHECK(kArchVariant == kMips64r6);
VisitRRR(this, kMips64MaxS, node);
}
void InstructionSelector::VisitFloat64Max(Node* node) { void InstructionSelector::VisitFloat64Max(Node* node) { UNREACHABLE(); }
DCHECK(kArchVariant == kMips64r6);
VisitRRR(this, kMips64MaxD, node);
}
void InstructionSelector::VisitFloat32Min(Node* node) { void InstructionSelector::VisitFloat32Min(Node* node) { UNREACHABLE(); }
DCHECK(kArchVariant == kMips64r6);
VisitRRR(this, kMips64MinS, node);
}
void InstructionSelector::VisitFloat64Min(Node* node) { void InstructionSelector::VisitFloat64Min(Node* node) { UNREACHABLE(); }
DCHECK(kArchVariant == kMips64r6);
VisitRRR(this, kMips64MinD, node);
}
void InstructionSelector::VisitFloat32Abs(Node* node) { void InstructionSelector::VisitFloat32Abs(Node* node) {
...@@ -1307,16 +1295,8 @@ void InstructionSelector::VisitFloat64InsertHighWord32(Node* node) { ...@@ -1307,16 +1295,8 @@ void InstructionSelector::VisitFloat64InsertHighWord32(Node* node) {
// static // static
MachineOperatorBuilder::Flags MachineOperatorBuilder::Flags
InstructionSelector::SupportedMachineOperatorFlags() { InstructionSelector::SupportedMachineOperatorFlags() {
MachineOperatorBuilder::Flags flags = return MachineOperatorBuilder::kFloat64RoundDown |
MachineOperatorBuilder::kFloat64RoundDown |
MachineOperatorBuilder::kFloat64RoundTruncate; MachineOperatorBuilder::kFloat64RoundTruncate;
if (kArchVariant == kMips64r6) {
flags |= MachineOperatorBuilder::kFloat32Max |
MachineOperatorBuilder::kFloat32Min |
MachineOperatorBuilder::kFloat64Max |
MachineOperatorBuilder::kFloat64Min;
}
return flags;
} }
} // namespace compiler } // namespace compiler
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment