Index: src/compiler/js-intrinsic-lowering.cc |
diff --git a/src/compiler/js-intrinsic-lowering.cc b/src/compiler/js-intrinsic-lowering.cc |
index 87e74b73d95f619369456c62a42fd86d08eccb27..0d3b3e642e8d7b0d5ede5058e3ae99b2249218f8 100644 |
--- a/src/compiler/js-intrinsic-lowering.cc |
+++ b/src/compiler/js-intrinsic-lowering.cc |
@@ -31,6 +31,12 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) { |
return ReduceInlineIsInstanceType(node, JS_ARRAY_TYPE); |
case Runtime::kInlineIsFunction: |
return ReduceInlineIsInstanceType(node, JS_FUNCTION_TYPE); |
+ case Runtime::kInlineOptimizedConstructDouble: |
+ return ReduceInlineOptimizedConstructDouble(node); |
+ case Runtime::kInlineOptimizedDoubleLo: |
+ return ReduceInlineOptimizedDoubleLo(node); |
+ case Runtime::kInlineOptimizedDoubleHi: |
+ return ReduceInlineOptimizedDoubleHi(node); |
case Runtime::kInlineIsRegExp: |
return ReduceInlineIsInstanceType(node, JS_REGEXP_TYPE); |
case Runtime::kInlineValueOf: |
@@ -92,6 +98,30 @@ Reduction JSIntrinsicLowering::ReduceInlineIsNonNegativeSmi(Node* node) { |
} |
+Reduction JSIntrinsicLowering::ReduceInlineOptimizedConstructDouble( |
+ Node* node) { |
+ Node* high = NodeProperties::GetValueInput(node, 0); |
+ Node* low = NodeProperties::GetValueInput(node, 1); |
+ Node* value = |
+ graph()->NewNode(machine()->Float64InsertHighWord32(), |
+ graph()->NewNode(machine()->Float64InsertLowWord32(), |
+ jsgraph()->Constant(0), low), |
+ high); |
+ NodeProperties::ReplaceWithValue(node, value); |
+ return Replace(value); |
+} |
+ |
+ |
+Reduction JSIntrinsicLowering::ReduceInlineOptimizedDoubleLo(Node* node) { |
+ return Change(node, machine()->Float64ExtractLowWord32()); |
+} |
+ |
+ |
+Reduction JSIntrinsicLowering::ReduceInlineOptimizedDoubleHi(Node* node) { |
+ return Change(node, machine()->Float64ExtractHighWord32()); |
+} |
+ |
+ |
Reduction JSIntrinsicLowering::ReduceInlineIsInstanceType( |
Node* node, InstanceType instance_type) { |
// if (%_IsSmi(value)) { |