| 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
|
|
|