Index: src/compiler/machine-operator.cc |
diff --git a/src/compiler/machine-operator.cc b/src/compiler/machine-operator.cc |
index b5da8297e1d2c62e73d06866f50d8eaa489ea071..33ada6e92274c121c5ee0e00e7e9b3699c86fef0 100644 |
--- a/src/compiler/machine-operator.cc |
+++ b/src/compiler/machine-operator.cc |
@@ -181,6 +181,22 @@ struct MachineOperatorBuilderImpl { |
Store##Type##FullWriteBarrier##Operator k##Store##Type##FullWriteBarrier; |
MACHINE_TYPE_LIST(STORE) |
#undef STORE |
+ |
+ struct Float64RoundOperator FINAL : public Operator1<Float64RoundMode> { |
+ explicit Float64RoundOperator(Float64RoundMode mode) |
+ : Operator1(IrOpcode::kFloat64Round, Operator::kPure, 1, 1, |
+ "Float64Round", mode) {} |
+ }; |
+ Float64RoundOperator kFloat64RoundDown; |
+ Float64RoundOperator kFloat64RoundUp; |
+ Float64RoundOperator kFloat64RoundAway; |
+ Float64RoundOperator kFloat64RoundTowards; |
+ |
+ MachineOperatorBuilderImpl() |
+ : kFloat64RoundDown(kRoundDown), |
+ kFloat64RoundUp(kRoundUp), |
+ kFloat64RoundAway(kRoundAway), |
+ kFloat64RoundTowards(kRoundTowards) {} |
}; |
@@ -188,8 +204,9 @@ static base::LazyInstance<MachineOperatorBuilderImpl>::type kImpl = |
LAZY_INSTANCE_INITIALIZER; |
-MachineOperatorBuilder::MachineOperatorBuilder(MachineType word) |
- : impl_(kImpl.Get()), word_(word) { |
+MachineOperatorBuilder::MachineOperatorBuilder( |
+ MachineType word, SupportedOperators supportedOperators) |
+ : impl_(kImpl.Get()), word_(word), supportedOperators_(supportedOperators) { |
DCHECK(word == kRepWord32 || word == kRepWord64); |
} |
@@ -237,6 +254,25 @@ const Operator* MachineOperatorBuilder::Store(StoreRepresentation rep) { |
return NULL; |
} |
+ |
+const Operator* MachineOperatorBuilder::Float64Round(Float64RoundMode mode) { |
+ switch (mode) { |
+ case kRoundDown: |
+ DCHECK(HasFloat64Floor()); |
+ return &impl_.kFloat64RoundDown; |
+ case kRoundUp: |
+ DCHECK(HasFloat64Ceil()); |
+ return &impl_.kFloat64RoundUp; |
+ case kRoundAway: |
+ DCHECK(HasFloat64RoundTiesAway()); |
+ return &impl_.kFloat64RoundAway; |
+ case kRoundTowards: |
+ DCHECK(HasFloat64RoundTiesTowards()); |
+ return &impl_.kFloat64RoundTowards; |
+ } |
+ UNREACHABLE(); |
+ return NULL; |
+} |
} // namespace compiler |
} // namespace internal |
} // namespace v8 |