Reviewers: danno, jbramley, Paul Neave, dusmil.imgtec, akos.palfi.imgtec,

Description:
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

Please review this at https://codereview.chromium.org/1204903004/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+10, -48 lines):
  M src/compiler/mips/instruction-selector-mips.cc
  M src/compiler/mips64/instruction-selector-mips64.cc


Index: src/compiler/mips/instruction-selector-mips.cc
diff --git a/src/compiler/mips/instruction-selector-mips.cc b/src/compiler/mips/instruction-selector-mips.cc index ce40753995db0a93dded1fd3b1c8e03b1b6a4f84..8ecc25e9e084951baa2c6d1626e18a894a5cd67d 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 |
Index: src/compiler/mips64/instruction-selector-mips64.cc
diff --git a/src/compiler/mips64/instruction-selector-mips64.cc b/src/compiler/mips64/instruction-selector-mips64.cc index 48185a676ffb495c5104f86ff9998be100b74046..4127c312f21f8e777b4d0f1b4e1503a6d0c3a68e 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


--
--
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to