summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/int64-lowering.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/compiler/int64-lowering.cc')
-rw-r--r--deps/v8/src/compiler/int64-lowering.cc19
1 files changed, 13 insertions, 6 deletions
diff --git a/deps/v8/src/compiler/int64-lowering.cc b/deps/v8/src/compiler/int64-lowering.cc
index 8066ce5dca..41a5098081 100644
--- a/deps/v8/src/compiler/int64-lowering.cc
+++ b/deps/v8/src/compiler/int64-lowering.cc
@@ -127,9 +127,10 @@ void Int64Lowering::LowerWord64AtomicBinop(Node* node, const Operator* op) {
}
void Int64Lowering::LowerWord64AtomicNarrowOp(Node* node, const Operator* op) {
- DefaultLowering(node, true);
+ Node* value = node->InputAt(2);
+ node->ReplaceInput(2, GetReplacementLow(value));
NodeProperties::ChangeOp(node, op);
- ReplaceNodeWithProjections(node);
+ ReplaceNode(node, node, graph()->NewNode(common()->Int32Constant(0)));
}
// static
@@ -915,8 +916,7 @@ void Int64Lowering::LowerNode(Node* node) {
if (type == MachineType::Uint64()) { \
LowerWord64AtomicBinop(node, machine()->Word32AtomicPair##name()); \
} else { \
- LowerWord64AtomicNarrowOp(node, \
- machine()->Word64AtomicNarrow##name(type)); \
+ LowerWord64AtomicNarrowOp(node, machine()->Word32Atomic##name(type)); \
} \
break; \
}
@@ -940,8 +940,15 @@ void Int64Lowering::LowerNode(Node* node) {
machine()->Word32AtomicPairCompareExchange());
ReplaceNodeWithProjections(node);
} else {
- LowerWord64AtomicNarrowOp(
- node, machine()->Word64AtomicNarrowCompareExchange(type));
+ DCHECK(type == MachineType::Uint32() || type == MachineType::Uint16() ||
+ type == MachineType::Uint8());
+ Node* old_value = node->InputAt(2);
+ node->ReplaceInput(2, GetReplacementLow(old_value));
+ Node* new_value = node->InputAt(3);
+ node->ReplaceInput(3, GetReplacementLow(new_value));
+ NodeProperties::ChangeOp(node,
+ machine()->Word32AtomicCompareExchange(type));
+ ReplaceNode(node, node, graph()->NewNode(common()->Int32Constant(0)));
}
break;
}