| Index: src/compiler/js-operator.cc
|
| diff --git a/src/compiler/js-operator.cc b/src/compiler/js-operator.cc
|
| index 8481ba002890859ce2dd0d1ab36dc6304e09aab1..1050928c9b4c6772275c1bc2ef760b1b0a19c0da 100644
|
| --- a/src/compiler/js-operator.cc
|
| +++ b/src/compiler/js-operator.cc
|
| @@ -63,6 +63,46 @@ std::ostream& operator<<(std::ostream& os, TailCallMode mode) {
|
| }
|
|
|
|
|
| +bool operator==(BinaryOperationParameters const& lhs,
|
| + BinaryOperationParameters const& rhs) {
|
| + return lhs.language_mode() == rhs.language_mode() &&
|
| + lhs.hints() == rhs.hints();
|
| +}
|
| +
|
| +
|
| +bool operator!=(BinaryOperationParameters const& lhs,
|
| + BinaryOperationParameters const& rhs) {
|
| + return !(lhs == rhs);
|
| +}
|
| +
|
| +
|
| +size_t hash_value(BinaryOperationParameters const& p) {
|
| + return base::hash_combine(p.language_mode(), p.hints());
|
| +}
|
| +
|
| +
|
| +std::ostream& operator<<(std::ostream& os, BinaryOperationParameters const& p) {
|
| + return os << p.language_mode() << ", " << p.hints();
|
| +}
|
| +
|
| +
|
| +BinaryOperationParameters const& BinaryOperationParametersOf(
|
| + Operator const* op) {
|
| + DCHECK(op->opcode() == IrOpcode::kJSBitwiseOr ||
|
| + op->opcode() == IrOpcode::kJSBitwiseXor ||
|
| + op->opcode() == IrOpcode::kJSBitwiseAnd ||
|
| + op->opcode() == IrOpcode::kJSShiftLeft ||
|
| + op->opcode() == IrOpcode::kJSShiftRight ||
|
| + op->opcode() == IrOpcode::kJSShiftRightLogical ||
|
| + op->opcode() == IrOpcode::kJSAdd ||
|
| + op->opcode() == IrOpcode::kJSSubtract ||
|
| + op->opcode() == IrOpcode::kJSMultiply ||
|
| + op->opcode() == IrOpcode::kJSDivide ||
|
| + op->opcode() == IrOpcode::kJSModulus);
|
| + return OpParameter<BinaryOperationParameters>(op);
|
| +}
|
| +
|
| +
|
| bool operator==(CallConstructParameters const& lhs,
|
| CallConstructParameters const& rhs) {
|
| return lhs.arity() == rhs.arity() && lhs.feedback() == rhs.feedback();
|
| @@ -468,22 +508,11 @@ const CreateLiteralParameters& CreateLiteralParametersOf(const Operator* op) {
|
| V(CreateModuleContext, Operator::kNoProperties, 2, 1)
|
|
|
|
|
| -#define CACHED_OP_LIST_WITH_LANGUAGE_MODE(V) \
|
| - V(LessThan, Operator::kNoProperties, 2, 1) \
|
| - V(GreaterThan, Operator::kNoProperties, 2, 1) \
|
| - V(LessThanOrEqual, Operator::kNoProperties, 2, 1) \
|
| - V(GreaterThanOrEqual, Operator::kNoProperties, 2, 1) \
|
| - V(BitwiseOr, Operator::kNoProperties, 2, 1) \
|
| - V(BitwiseXor, Operator::kNoProperties, 2, 1) \
|
| - V(BitwiseAnd, Operator::kNoProperties, 2, 1) \
|
| - V(ShiftLeft, Operator::kNoProperties, 2, 1) \
|
| - V(ShiftRight, Operator::kNoProperties, 2, 1) \
|
| - V(ShiftRightLogical, Operator::kNoProperties, 2, 1) \
|
| - V(Add, Operator::kNoProperties, 2, 1) \
|
| - V(Subtract, Operator::kNoProperties, 2, 1) \
|
| - V(Multiply, Operator::kNoProperties, 2, 1) \
|
| - V(Divide, Operator::kNoProperties, 2, 1) \
|
| - V(Modulus, Operator::kNoProperties, 2, 1)
|
| +#define CACHED_OP_LIST_WITH_LANGUAGE_MODE(V) \
|
| + V(LessThan, Operator::kNoProperties, 2, 1) \
|
| + V(GreaterThan, Operator::kNoProperties, 2, 1) \
|
| + V(LessThanOrEqual, Operator::kNoProperties, 2, 1) \
|
| + V(GreaterThanOrEqual, Operator::kNoProperties, 2, 1)
|
|
|
|
|
| struct JSOperatorGlobalCache final {
|
| @@ -557,6 +586,138 @@ CACHED_OP_LIST_WITH_LANGUAGE_MODE(CACHED_WITH_LANGUAGE_MODE)
|
| #undef CACHED_WITH_LANGUAGE_MODE
|
|
|
|
|
| +const Operator* JSOperatorBuilder::BitwiseOr(LanguageMode language_mode,
|
| + BinaryOperationHints hints) {
|
| + // TODO(turbofan): Cache most important versions of this operator.
|
| + BinaryOperationParameters parameters(language_mode, hints);
|
| + return new (zone()) Operator1<BinaryOperationParameters>( //--
|
| + IrOpcode::kJSBitwiseOr, Operator::kNoProperties, // opcode
|
| + "JSBitwiseOr", // name
|
| + 2, 1, 1, 1, 1, 2, // inputs/outputs
|
| + parameters); // parameter
|
| +}
|
| +
|
| +
|
| +const Operator* JSOperatorBuilder::BitwiseXor(LanguageMode language_mode,
|
| + BinaryOperationHints hints) {
|
| + // TODO(turbofan): Cache most important versions of this operator.
|
| + BinaryOperationParameters parameters(language_mode, hints);
|
| + return new (zone()) Operator1<BinaryOperationParameters>( //--
|
| + IrOpcode::kJSBitwiseXor, Operator::kNoProperties, // opcode
|
| + "JSBitwiseXor", // name
|
| + 2, 1, 1, 1, 1, 2, // inputs/outputs
|
| + parameters); // parameter
|
| +}
|
| +
|
| +
|
| +const Operator* JSOperatorBuilder::BitwiseAnd(LanguageMode language_mode,
|
| + BinaryOperationHints hints) {
|
| + // TODO(turbofan): Cache most important versions of this operator.
|
| + BinaryOperationParameters parameters(language_mode, hints);
|
| + return new (zone()) Operator1<BinaryOperationParameters>( //--
|
| + IrOpcode::kJSBitwiseAnd, Operator::kNoProperties, // opcode
|
| + "JSBitwiseAnd", // name
|
| + 2, 1, 1, 1, 1, 2, // inputs/outputs
|
| + parameters); // parameter
|
| +}
|
| +
|
| +
|
| +const Operator* JSOperatorBuilder::ShiftLeft(LanguageMode language_mode,
|
| + BinaryOperationHints hints) {
|
| + // TODO(turbofan): Cache most important versions of this operator.
|
| + BinaryOperationParameters parameters(language_mode, hints);
|
| + return new (zone()) Operator1<BinaryOperationParameters>( //--
|
| + IrOpcode::kJSShiftLeft, Operator::kNoProperties, // opcode
|
| + "JSShiftLeft", // name
|
| + 2, 1, 1, 1, 1, 2, // inputs/outputs
|
| + parameters); // parameter
|
| +}
|
| +
|
| +
|
| +const Operator* JSOperatorBuilder::ShiftRight(LanguageMode language_mode,
|
| + BinaryOperationHints hints) {
|
| + // TODO(turbofan): Cache most important versions of this operator.
|
| + BinaryOperationParameters parameters(language_mode, hints);
|
| + return new (zone()) Operator1<BinaryOperationParameters>( //--
|
| + IrOpcode::kJSShiftRight, Operator::kNoProperties, // opcode
|
| + "JSShiftRight", // name
|
| + 2, 1, 1, 1, 1, 2, // inputs/outputs
|
| + parameters); // parameter
|
| +}
|
| +
|
| +
|
| +const Operator* JSOperatorBuilder::ShiftRightLogical(
|
| + LanguageMode language_mode, BinaryOperationHints hints) {
|
| + // TODO(turbofan): Cache most important versions of this operator.
|
| + BinaryOperationParameters parameters(language_mode, hints);
|
| + return new (zone()) Operator1<BinaryOperationParameters>( //--
|
| + IrOpcode::kJSShiftRightLogical, Operator::kNoProperties, // opcode
|
| + "JSShiftRightLogical", // name
|
| + 2, 1, 1, 1, 1, 2, // inputs/outputs
|
| + parameters); // parameter
|
| +}
|
| +
|
| +
|
| +const Operator* JSOperatorBuilder::Add(LanguageMode language_mode,
|
| + BinaryOperationHints hints) {
|
| + // TODO(turbofan): Cache most important versions of this operator.
|
| + BinaryOperationParameters parameters(language_mode, hints);
|
| + return new (zone()) Operator1<BinaryOperationParameters>( //--
|
| + IrOpcode::kJSAdd, Operator::kNoProperties, // opcode
|
| + "JSAdd", // name
|
| + 2, 1, 1, 1, 1, 2, // inputs/outputs
|
| + parameters); // parameter
|
| +}
|
| +
|
| +
|
| +const Operator* JSOperatorBuilder::Subtract(LanguageMode language_mode,
|
| + BinaryOperationHints hints) {
|
| + // TODO(turbofan): Cache most important versions of this operator.
|
| + BinaryOperationParameters parameters(language_mode, hints);
|
| + return new (zone()) Operator1<BinaryOperationParameters>( //--
|
| + IrOpcode::kJSSubtract, Operator::kNoProperties, // opcode
|
| + "JSSubtract", // name
|
| + 2, 1, 1, 1, 1, 2, // inputs/outputs
|
| + parameters); // parameter
|
| +}
|
| +
|
| +
|
| +const Operator* JSOperatorBuilder::Multiply(LanguageMode language_mode,
|
| + BinaryOperationHints hints) {
|
| + // TODO(turbofan): Cache most important versions of this operator.
|
| + BinaryOperationParameters parameters(language_mode, hints);
|
| + return new (zone()) Operator1<BinaryOperationParameters>( //--
|
| + IrOpcode::kJSMultiply, Operator::kNoProperties, // opcode
|
| + "JSMultiply", // name
|
| + 2, 1, 1, 1, 1, 2, // inputs/outputs
|
| + parameters); // parameter
|
| +}
|
| +
|
| +
|
| +const Operator* JSOperatorBuilder::Divide(LanguageMode language_mode,
|
| + BinaryOperationHints hints) {
|
| + // TODO(turbofan): Cache most important versions of this operator.
|
| + BinaryOperationParameters parameters(language_mode, hints);
|
| + return new (zone()) Operator1<BinaryOperationParameters>( //--
|
| + IrOpcode::kJSDivide, Operator::kNoProperties, // opcode
|
| + "JSDivide", // name
|
| + 2, 1, 1, 1, 1, 2, // inputs/outputs
|
| + parameters); // parameter
|
| +}
|
| +
|
| +
|
| +const Operator* JSOperatorBuilder::Modulus(LanguageMode language_mode,
|
| + BinaryOperationHints hints) {
|
| + // TODO(turbofan): Cache most important versions of this operator.
|
| + BinaryOperationParameters parameters(language_mode, hints);
|
| + return new (zone()) Operator1<BinaryOperationParameters>( //--
|
| + IrOpcode::kJSModulus, Operator::kNoProperties, // opcode
|
| + "JSModulus", // name
|
| + 2, 1, 1, 1, 1, 2, // inputs/outputs
|
| + parameters); // parameter
|
| +}
|
| +
|
| +
|
| const Operator* JSOperatorBuilder::CallFunction(
|
| size_t arity, LanguageMode language_mode, VectorSlotPair const& feedback,
|
| ConvertReceiverMode convert_mode, TailCallMode tail_call_mode) {
|
|
|