diff options
Diffstat (limited to 'deps/v8/src/compiler/int64-lowering.cc')
-rw-r--r-- | deps/v8/src/compiler/int64-lowering.cc | 19 |
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; } |