MIPS: [turbofan] Fix implementation of Float64Min.
authorbalazs.kilvady <balazs.kilvady@imgtec.com>
Thu, 25 Jun 2015 17:59:43 +0000 (10:59 -0700)
committerCommit bot <commit-bot@chromium.org>
Thu, 25 Jun 2015 17:59:52 +0000 (17:59 +0000)
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
src/compiler/mips64/instruction-selector-mips64.cc

index ce40753..8ecc25e 100644 (file)
@@ -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 |
index 48185a6..4127c31 100644 (file)
@@ -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