Index: src/compiler/x87/instruction-selector-x87.cc |
diff --git a/src/compiler/x87/instruction-selector-x87.cc b/src/compiler/x87/instruction-selector-x87.cc |
index 1c893f895382b2404e014e520681b984d47befd8..bd93fd92cb576da291505ff3e6536153cd3f2ed6 100644 |
--- a/src/compiler/x87/instruction-selector-x87.cc |
+++ b/src/compiler/x87/instruction-selector-x87.cc |
@@ -1083,9 +1083,17 @@ void InstructionSelector::VisitFloat64RoundTiesEven(Node* node) { |
g.UseFixed(node, stX_0), g.Use(node->InputAt(0))); |
} |
-void InstructionSelector::VisitFloat32Neg(Node* node) { UNREACHABLE(); } |
+void InstructionSelector::VisitFloat32Neg(Node* node) { |
+ X87OperandGenerator g(this); |
+ Emit(kX87PushFloat32, g.NoOutput(), g.Use(node->InputAt(0))); |
+ Emit(kX87Float32Neg, g.DefineAsFixed(node, stX_0), 0, nullptr); |
+} |
-void InstructionSelector::VisitFloat64Neg(Node* node) { UNREACHABLE(); } |
+void InstructionSelector::VisitFloat64Neg(Node* node) { |
+ X87OperandGenerator g(this); |
+ Emit(kX87PushFloat64, g.NoOutput(), g.Use(node->InputAt(0))); |
+ Emit(kX87Float64Neg, g.DefineAsFixed(node, stX_0), 0, nullptr); |
+} |
void InstructionSelector::VisitFloat64Ieee754Binop(Node* node, |
InstructionCode opcode) { |
@@ -1715,7 +1723,8 @@ void InstructionSelector::VisitAtomicStore(Node* node) { |
MachineOperatorBuilder::Flags |
InstructionSelector::SupportedMachineOperatorFlags() { |
MachineOperatorBuilder::Flags flags = |
- MachineOperatorBuilder::kWord32ShiftIsSafe; |
+ MachineOperatorBuilder::kWord32ShiftIsSafe | |
+ MachineOperatorBuilder::kFloat32Neg | MachineOperatorBuilder::kFloat64Neg; |
if (CpuFeatures::IsSupported(POPCNT)) { |
flags |= MachineOperatorBuilder::kWord32Popcnt; |
} |