summaryrefslogtreecommitdiff
path: root/deps/v8/src/builtins/builtins-number-gen.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/builtins/builtins-number-gen.cc')
-rw-r--r--deps/v8/src/builtins/builtins-number-gen.cc173
1 files changed, 136 insertions, 37 deletions
diff --git a/deps/v8/src/builtins/builtins-number-gen.cc b/deps/v8/src/builtins/builtins-number-gen.cc
index 0e57959aad..390552836d 100644
--- a/deps/v8/src/builtins/builtins-number-gen.cc
+++ b/deps/v8/src/builtins/builtins-number-gen.cc
@@ -14,20 +14,22 @@ namespace internal {
// -----------------------------------------------------------------------------
// ES6 section 20.1 Number Objects
-#define DEF_BINOP(Name, Generator) \
- TF_BUILTIN(Name, CodeStubAssembler) { \
- auto lhs = Parameter<Object>(Descriptor::kLeft); \
- auto rhs = Parameter<Object>(Descriptor::kRight); \
- auto context = Parameter<Context>(Descriptor::kContext); \
- auto maybe_feedback_vector = \
- Parameter<HeapObject>(Descriptor::kMaybeFeedbackVector); \
- auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); \
- \
- BinaryOpAssembler binop_asm(state()); \
- TNode<Object> result = binop_asm.Generator(context, lhs, rhs, slot, \
- maybe_feedback_vector, false); \
- \
- Return(result); \
+#define DEF_BINOP(Name, Generator) \
+ TF_BUILTIN(Name, CodeStubAssembler) { \
+ auto lhs = Parameter<Object>(Descriptor::kLeft); \
+ auto rhs = Parameter<Object>(Descriptor::kRight); \
+ auto context = Parameter<Context>(Descriptor::kContext); \
+ auto feedback_vector = \
+ Parameter<FeedbackVector>(Descriptor::kFeedbackVector); \
+ auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); \
+ \
+ BinaryOpAssembler binop_asm(state()); \
+ TNode<Object> result = \
+ binop_asm.Generator([&]() { return context; }, lhs, rhs, slot, \
+ [&]() { return feedback_vector; }, \
+ UpdateFeedbackMode::kGuaranteedFeedback, false); \
+ \
+ Return(result); \
}
DEF_BINOP(Add_WithFeedback, Generate_AddWithFeedback)
DEF_BINOP(Subtract_WithFeedback, Generate_SubtractWithFeedback)
@@ -44,19 +46,48 @@ DEF_BINOP(ShiftRightLogical_WithFeedback,
Generate_ShiftRightLogicalWithFeedback)
#undef DEF_BINOP
-#define DEF_UNOP(Name, Generator) \
- TF_BUILTIN(Name, CodeStubAssembler) { \
- auto value = Parameter<Object>(Descriptor::kValue); \
- auto context = Parameter<Context>(Descriptor::kContext); \
- auto maybe_feedback_vector = \
- Parameter<HeapObject>(Descriptor::kMaybeFeedbackVector); \
- auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); \
- \
- UnaryOpAssembler a(state()); \
- TNode<Object> result = \
- a.Generator(context, value, slot, maybe_feedback_vector); \
- \
- Return(result); \
+#define DEF_BINOP(Name, Generator) \
+ TF_BUILTIN(Name, CodeStubAssembler) { \
+ auto lhs = Parameter<Object>(Descriptor::kLeft); \
+ auto rhs = Parameter<Object>(Descriptor::kRight); \
+ auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); \
+ \
+ BinaryOpAssembler binop_asm(state()); \
+ TNode<Object> result = binop_asm.Generator( \
+ [&]() { return LoadContextFromBaseline(); }, lhs, rhs, slot, \
+ [&]() { return LoadFeedbackVectorFromBaseline(); }, \
+ UpdateFeedbackMode::kGuaranteedFeedback, false); \
+ \
+ Return(result); \
+ }
+DEF_BINOP(Add_Baseline, Generate_AddWithFeedback)
+DEF_BINOP(Subtract_Baseline, Generate_SubtractWithFeedback)
+DEF_BINOP(Multiply_Baseline, Generate_MultiplyWithFeedback)
+DEF_BINOP(Divide_Baseline, Generate_DivideWithFeedback)
+DEF_BINOP(Modulus_Baseline, Generate_ModulusWithFeedback)
+DEF_BINOP(Exponentiate_Baseline, Generate_ExponentiateWithFeedback)
+DEF_BINOP(BitwiseOr_Baseline, Generate_BitwiseOrWithFeedback)
+DEF_BINOP(BitwiseXor_Baseline, Generate_BitwiseXorWithFeedback)
+DEF_BINOP(BitwiseAnd_Baseline, Generate_BitwiseAndWithFeedback)
+DEF_BINOP(ShiftLeft_Baseline, Generate_ShiftLeftWithFeedback)
+DEF_BINOP(ShiftRight_Baseline, Generate_ShiftRightWithFeedback)
+DEF_BINOP(ShiftRightLogical_Baseline, Generate_ShiftRightLogicalWithFeedback)
+#undef DEF_BINOP
+
+#define DEF_UNOP(Name, Generator) \
+ TF_BUILTIN(Name, CodeStubAssembler) { \
+ auto value = Parameter<Object>(Descriptor::kValue); \
+ auto context = Parameter<Context>(Descriptor::kContext); \
+ auto feedback_vector = \
+ Parameter<FeedbackVector>(Descriptor::kFeedbackVector); \
+ auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); \
+ \
+ UnaryOpAssembler a(state()); \
+ TNode<Object> result = \
+ a.Generator(context, value, slot, feedback_vector, \
+ UpdateFeedbackMode::kGuaranteedFeedback); \
+ \
+ Return(result); \
}
DEF_UNOP(BitwiseNot_WithFeedback, Generate_BitwiseNotWithFeedback)
DEF_UNOP(Decrement_WithFeedback, Generate_DecrementWithFeedback)
@@ -64,19 +95,39 @@ DEF_UNOP(Increment_WithFeedback, Generate_IncrementWithFeedback)
DEF_UNOP(Negate_WithFeedback, Generate_NegateWithFeedback)
#undef DEF_UNOP
+#define DEF_UNOP(Name, Generator) \
+ TF_BUILTIN(Name, CodeStubAssembler) { \
+ auto value = Parameter<Object>(Descriptor::kValue); \
+ auto context = LoadContextFromBaseline(); \
+ auto feedback_vector = LoadFeedbackVectorFromBaseline(); \
+ auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); \
+ \
+ UnaryOpAssembler a(state()); \
+ TNode<Object> result = \
+ a.Generator(context, value, slot, feedback_vector, \
+ UpdateFeedbackMode::kGuaranteedFeedback); \
+ \
+ Return(result); \
+ }
+DEF_UNOP(BitwiseNot_Baseline, Generate_BitwiseNotWithFeedback)
+DEF_UNOP(Decrement_Baseline, Generate_DecrementWithFeedback)
+DEF_UNOP(Increment_Baseline, Generate_IncrementWithFeedback)
+DEF_UNOP(Negate_Baseline, Generate_NegateWithFeedback)
+#undef DEF_UNOP
+
#define DEF_COMPARE(Name) \
TF_BUILTIN(Name##_WithFeedback, CodeStubAssembler) { \
auto lhs = Parameter<Object>(Descriptor::kLeft); \
auto rhs = Parameter<Object>(Descriptor::kRight); \
auto context = Parameter<Context>(Descriptor::kContext); \
- auto maybe_feedback_vector = \
- Parameter<HeapObject>(Descriptor::kMaybeFeedbackVector); \
+ auto feedback_vector = \
+ Parameter<FeedbackVector>(Descriptor::kFeedbackVector); \
auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); \
\
TVARIABLE(Smi, var_type_feedback); \
TNode<Oddball> result = RelationalComparison(Operation::k##Name, lhs, rhs, \
context, &var_type_feedback); \
- UpdateFeedback(var_type_feedback.value(), maybe_feedback_vector, slot); \
+ UpdateFeedback(var_type_feedback.value(), feedback_vector, slot); \
\
Return(result); \
}
@@ -86,17 +137,38 @@ DEF_COMPARE(GreaterThan)
DEF_COMPARE(GreaterThanOrEqual)
#undef DEF_COMPARE
+#define DEF_COMPARE(Name) \
+ TF_BUILTIN(Name##_Baseline, CodeStubAssembler) { \
+ auto lhs = Parameter<Object>(Descriptor::kLeft); \
+ auto rhs = Parameter<Object>(Descriptor::kRight); \
+ auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); \
+ \
+ TVARIABLE(Smi, var_type_feedback); \
+ TNode<Oddball> result = RelationalComparison( \
+ Operation::k##Name, lhs, rhs, \
+ [&]() { return LoadContextFromBaseline(); }, &var_type_feedback); \
+ auto feedback_vector = LoadFeedbackVectorFromBaseline(); \
+ UpdateFeedback(var_type_feedback.value(), feedback_vector, slot); \
+ \
+ Return(result); \
+ }
+DEF_COMPARE(LessThan)
+DEF_COMPARE(LessThanOrEqual)
+DEF_COMPARE(GreaterThan)
+DEF_COMPARE(GreaterThanOrEqual)
+#undef DEF_COMPARE
+
TF_BUILTIN(Equal_WithFeedback, CodeStubAssembler) {
auto lhs = Parameter<Object>(Descriptor::kLeft);
auto rhs = Parameter<Object>(Descriptor::kRight);
auto context = Parameter<Context>(Descriptor::kContext);
- auto maybe_feedback_vector =
- Parameter<HeapObject>(Descriptor::kMaybeFeedbackVector);
+ auto feedback_vector = Parameter<FeedbackVector>(Descriptor::kFeedbackVector);
auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot);
TVARIABLE(Smi, var_type_feedback);
- TNode<Oddball> result = Equal(lhs, rhs, context, &var_type_feedback);
- UpdateFeedback(var_type_feedback.value(), maybe_feedback_vector, slot);
+ TNode<Oddball> result = Equal(
+ lhs, rhs, [&]() { return context; }, &var_type_feedback);
+ UpdateFeedback(var_type_feedback.value(), feedback_vector, slot);
Return(result);
}
@@ -104,13 +176,40 @@ TF_BUILTIN(Equal_WithFeedback, CodeStubAssembler) {
TF_BUILTIN(StrictEqual_WithFeedback, CodeStubAssembler) {
auto lhs = Parameter<Object>(Descriptor::kLeft);
auto rhs = Parameter<Object>(Descriptor::kRight);
- auto maybe_feedback_vector =
- Parameter<HeapObject>(Descriptor::kMaybeFeedbackVector);
+ auto feedback_vector = Parameter<FeedbackVector>(Descriptor::kFeedbackVector);
+ auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot);
+
+ TVARIABLE(Smi, var_type_feedback);
+ TNode<Oddball> result = StrictEqual(lhs, rhs, &var_type_feedback);
+ UpdateFeedback(var_type_feedback.value(), feedback_vector, slot);
+
+ Return(result);
+}
+
+TF_BUILTIN(Equal_Baseline, CodeStubAssembler) {
+ auto lhs = Parameter<Object>(Descriptor::kLeft);
+ auto rhs = Parameter<Object>(Descriptor::kRight);
+ auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot);
+
+ TVARIABLE(Smi, var_type_feedback);
+ TNode<Oddball> result = Equal(
+ lhs, rhs, [&]() { return LoadContextFromBaseline(); },
+ &var_type_feedback);
+ auto feedback_vector = LoadFeedbackVectorFromBaseline();
+ UpdateFeedback(var_type_feedback.value(), feedback_vector, slot);
+
+ Return(result);
+}
+
+TF_BUILTIN(StrictEqual_Baseline, CodeStubAssembler) {
+ auto lhs = Parameter<Object>(Descriptor::kLeft);
+ auto rhs = Parameter<Object>(Descriptor::kRight);
auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot);
TVARIABLE(Smi, var_type_feedback);
TNode<Oddball> result = StrictEqual(lhs, rhs, &var_type_feedback);
- UpdateFeedback(var_type_feedback.value(), maybe_feedback_vector, slot);
+ auto feedback_vector = LoadFeedbackVectorFromBaseline();
+ UpdateFeedback(var_type_feedback.value(), feedback_vector, slot);
Return(result);
}