Commit f68059b7 authored by ahaas's avatar ahaas Committed by Commit bot

[x64][ia32] Add Support for the Float64Neg and Float32Neg turbofan operators.

Benedikt, do you think we could also provide these operators on mips,
maybe by expanding them to "-0.0 -x"? If mips can provide these operators,
then we could make Float64Neg and Float32Neg real operators and not just
OptionalOperators.

R=bmeurer@chromium.org

Review-Url: https://codereview.chromium.org/2218023002
Cr-Commit-Position: refs/heads/master@{#38383}
parent 172bfb58
...@@ -1082,9 +1082,13 @@ void InstructionSelector::VisitFloat64RoundTiesEven(Node* node) { ...@@ -1082,9 +1082,13 @@ void InstructionSelector::VisitFloat64RoundTiesEven(Node* node) {
VisitRR(this, node, kSSEFloat64Round | MiscField::encode(kRoundToNearest)); VisitRR(this, node, kSSEFloat64Round | MiscField::encode(kRoundToNearest));
} }
void InstructionSelector::VisitFloat32Neg(Node* node) { UNREACHABLE(); } void InstructionSelector::VisitFloat32Neg(Node* node) {
VisitFloatUnop(this, node, node->InputAt(0), kAVXFloat32Neg, kSSEFloat32Neg);
}
void InstructionSelector::VisitFloat64Neg(Node* node) { UNREACHABLE(); } void InstructionSelector::VisitFloat64Neg(Node* node) {
VisitFloatUnop(this, node, node->InputAt(0), kAVXFloat64Neg, kSSEFloat64Neg);
}
void InstructionSelector::VisitFloat64Ieee754Binop(Node* node, void InstructionSelector::VisitFloat64Ieee754Binop(Node* node,
InstructionCode opcode) { InstructionCode opcode) {
...@@ -1701,7 +1705,8 @@ MachineOperatorBuilder::Flags ...@@ -1701,7 +1705,8 @@ MachineOperatorBuilder::Flags
InstructionSelector::SupportedMachineOperatorFlags() { InstructionSelector::SupportedMachineOperatorFlags() {
MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::Flags flags =
MachineOperatorBuilder::kWord32ShiftIsSafe | MachineOperatorBuilder::kWord32ShiftIsSafe |
MachineOperatorBuilder::kWord32Ctz; MachineOperatorBuilder::kWord32Ctz | MachineOperatorBuilder::kFloat32Neg |
MachineOperatorBuilder::kFloat64Neg;
if (CpuFeatures::IsSupported(POPCNT)) { if (CpuFeatures::IsSupported(POPCNT)) {
flags |= MachineOperatorBuilder::kWord32Popcnt; flags |= MachineOperatorBuilder::kWord32Popcnt;
} }
......
...@@ -1455,9 +1455,13 @@ void InstructionSelector::VisitFloat64RoundTiesEven(Node* node) { ...@@ -1455,9 +1455,13 @@ void InstructionSelector::VisitFloat64RoundTiesEven(Node* node) {
VisitRR(this, node, kSSEFloat64Round | MiscField::encode(kRoundToNearest)); VisitRR(this, node, kSSEFloat64Round | MiscField::encode(kRoundToNearest));
} }
void InstructionSelector::VisitFloat32Neg(Node* node) { UNREACHABLE(); } void InstructionSelector::VisitFloat32Neg(Node* node) {
VisitFloatUnop(this, node, node->InputAt(0), kAVXFloat32Neg, kSSEFloat32Neg);
}
void InstructionSelector::VisitFloat64Neg(Node* node) { UNREACHABLE(); } void InstructionSelector::VisitFloat64Neg(Node* node) {
VisitFloatUnop(this, node, node->InputAt(0), kAVXFloat64Neg, kSSEFloat64Neg);
}
void InstructionSelector::VisitFloat64Ieee754Binop(Node* node, void InstructionSelector::VisitFloat64Ieee754Binop(Node* node,
InstructionCode opcode) { InstructionCode opcode) {
...@@ -2182,7 +2186,8 @@ MachineOperatorBuilder::Flags ...@@ -2182,7 +2186,8 @@ MachineOperatorBuilder::Flags
InstructionSelector::SupportedMachineOperatorFlags() { InstructionSelector::SupportedMachineOperatorFlags() {
MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::Flags flags =
MachineOperatorBuilder::kWord32ShiftIsSafe | MachineOperatorBuilder::kWord32ShiftIsSafe |
MachineOperatorBuilder::kWord32Ctz | MachineOperatorBuilder::kWord64Ctz; MachineOperatorBuilder::kWord32Ctz | MachineOperatorBuilder::kWord64Ctz |
MachineOperatorBuilder::kFloat32Neg | MachineOperatorBuilder::kFloat64Neg;
if (CpuFeatures::IsSupported(POPCNT)) { if (CpuFeatures::IsSupported(POPCNT)) {
flags |= MachineOperatorBuilder::kWord32Popcnt | flags |= MachineOperatorBuilder::kWord32Popcnt |
MachineOperatorBuilder::kWord64Popcnt; MachineOperatorBuilder::kWord64Popcnt;
......
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