From 803b0c7487ecc09197cc8ba1667a5a0f3100a8d8 Mon Sep 17 00:00:00 2001 From: "balazs.kilvady" Date: Thu, 25 Jun 2015 10:59:43 -0700 Subject: [PATCH] MIPS: [turbofan] Fix implementation of Float64Min. Port d783b763629526a1ec57a9f14caa61d0166efac7 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} --- src/compiler/mips/instruction-selector-mips.cc | 26 +++--------------- src/compiler/mips64/instruction-selector-mips64.cc | 32 ++++------------------ 2 files changed, 10 insertions(+), 48 deletions(-) diff --git a/src/compiler/mips/instruction-selector-mips.cc b/src/compiler/mips/instruction-selector-mips.cc index ce40753..8ecc25e 100644 --- a/src/compiler/mips/instruction-selector-mips.cc +++ b/src/compiler/mips/instruction-selector-mips.cc @@ -452,28 +452,16 @@ void InstructionSelector::VisitFloat64Mod(Node* node) { } -void InstructionSelector::VisitFloat32Max(Node* node) { - DCHECK(kArchVariant == kMips32r6); - VisitRRR(this, kMipsMaxS, node); -} +void InstructionSelector::VisitFloat32Max(Node* node) { UNREACHABLE(); } -void InstructionSelector::VisitFloat64Max(Node* node) { - DCHECK(kArchVariant == kMips32r6); - VisitRRR(this, kMipsMaxD, node); -} +void InstructionSelector::VisitFloat64Max(Node* node) { UNREACHABLE(); } -void InstructionSelector::VisitFloat32Min(Node* node) { - DCHECK(kArchVariant == kMips32r6); - VisitRRR(this, kMipsMinS, node); -} +void InstructionSelector::VisitFloat32Min(Node* node) { UNREACHABLE(); } -void InstructionSelector::VisitFloat64Min(Node* node) { - DCHECK(kArchVariant == kMips32r6); - VisitRRR(this, kMipsMinD, node); -} +void InstructionSelector::VisitFloat64Min(Node* node) { UNREACHABLE(); } void InstructionSelector::VisitFloat32Abs(Node* node) { @@ -1095,12 +1083,6 @@ void InstructionSelector::VisitFloat64InsertHighWord32(Node* node) { MachineOperatorBuilder::Flags InstructionSelector::SupportedMachineOperatorFlags() { MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kNoFlags; - if (IsMipsArchVariant(kMips32r6)) { - flags |= MachineOperatorBuilder::kFloat32Max | - MachineOperatorBuilder::kFloat32Min | - MachineOperatorBuilder::kFloat64Max | - MachineOperatorBuilder::kFloat64Min; - } if ((IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)) && IsFp64Mode()) { flags |= MachineOperatorBuilder::kFloat64RoundDown | diff --git a/src/compiler/mips64/instruction-selector-mips64.cc b/src/compiler/mips64/instruction-selector-mips64.cc index 48185a6..4127c31 100644 --- a/src/compiler/mips64/instruction-selector-mips64.cc +++ b/src/compiler/mips64/instruction-selector-mips64.cc @@ -601,28 +601,16 @@ void InstructionSelector::VisitFloat64Mod(Node* node) { } -void InstructionSelector::VisitFloat32Max(Node* node) { - DCHECK(kArchVariant == kMips64r6); - VisitRRR(this, kMips64MaxS, node); -} +void InstructionSelector::VisitFloat32Max(Node* node) { UNREACHABLE(); } -void InstructionSelector::VisitFloat64Max(Node* node) { - DCHECK(kArchVariant == kMips64r6); - VisitRRR(this, kMips64MaxD, node); -} +void InstructionSelector::VisitFloat64Max(Node* node) { UNREACHABLE(); } -void InstructionSelector::VisitFloat32Min(Node* node) { - DCHECK(kArchVariant == kMips64r6); - VisitRRR(this, kMips64MinS, node); -} +void InstructionSelector::VisitFloat32Min(Node* node) { UNREACHABLE(); } -void InstructionSelector::VisitFloat64Min(Node* node) { - DCHECK(kArchVariant == kMips64r6); - VisitRRR(this, kMips64MinD, node); -} +void InstructionSelector::VisitFloat64Min(Node* node) { UNREACHABLE(); } void InstructionSelector::VisitFloat32Abs(Node* node) { @@ -1307,16 +1295,8 @@ void InstructionSelector::VisitFloat64InsertHighWord32(Node* node) { // static MachineOperatorBuilder::Flags InstructionSelector::SupportedMachineOperatorFlags() { - MachineOperatorBuilder::Flags flags = - MachineOperatorBuilder::kFloat64RoundDown | - MachineOperatorBuilder::kFloat64RoundTruncate; - if (kArchVariant == kMips64r6) { - flags |= MachineOperatorBuilder::kFloat32Max | - MachineOperatorBuilder::kFloat32Min | - MachineOperatorBuilder::kFloat64Max | - MachineOperatorBuilder::kFloat64Min; - } - return flags; + return MachineOperatorBuilder::kFloat64RoundDown | + MachineOperatorBuilder::kFloat64RoundTruncate; } } // namespace compiler -- 2.7.4