Index: src/compiler/int64-lowering.cc |
diff --git a/src/compiler/int64-lowering.cc b/src/compiler/int64-lowering.cc |
index a6f355d4f5e90aadab205ed4af07623f3f7d5da2..3d3c2419b1fa797327b9127217ac258bd28b1846 100644 |
--- a/src/compiler/int64-lowering.cc |
+++ b/src/compiler/int64-lowering.cc |
@@ -444,7 +444,30 @@ void Int64Lowering::LowerNode(Node* node) { |
} |
// kExprF64ReinterpretI64: |
// kExprI64ReinterpretF64: |
+ case IrOpcode::kBitcastFloat64ToInt64: { |
+ DCHECK(node->InputCount() == 1); |
+ Node* input = node->InputAt(0); |
+ Node* stack_slot = graph()->NewNode( |
+ machine()->StackSlot(MachineRepresentation::kWord64)); |
+ Node* store = graph()->NewNode( |
+ machine()->Store( |
+ StoreRepresentation(MachineRepresentation::kFloat64, |
+ WriteBarrierKind::kNoWriteBarrier)), |
+ stack_slot, graph()->NewNode(common()->Int32Constant(0)), input, |
+ graph()->start(), graph()->start()); |
+ |
+ Node* high_node = |
+ graph()->NewNode(machine()->Load(MachineType::Int32()), stack_slot, |
+ graph()->NewNode(common()->Int32Constant(4)), store, |
+ graph()->start()); |
+ Node* low_node = |
+ graph()->NewNode(machine()->Load(MachineType::Int32()), stack_slot, |
+ graph()->NewNode(common()->Int32Constant(0)), store, |
+ graph()->start()); |
+ ReplaceNode(node, low_node, high_node); |
+ break; |
+ } |
// kExprI64Clz: |
// kExprI64Ctz: |
case IrOpcode::kWord64Popcnt: { |