Chromium Code Reviews| Index: src/interpreter/interpreter-assembler.cc |
| diff --git a/src/interpreter/interpreter-assembler.cc b/src/interpreter/interpreter-assembler.cc |
| index d76af992240493b239b337c297084a24b19a3065..3893f560d309e405a99edec44d1f751bc7431b25 100644 |
| --- a/src/interpreter/interpreter-assembler.cc |
| +++ b/src/interpreter/interpreter-assembler.cc |
| @@ -1151,6 +1151,43 @@ void InterpreterAssembler::DispatchWide(OperandScale operand_scale) { |
| DispatchToBytecodeHandlerEntry(target_code_entry, next_bytecode_offset); |
| } |
| +Node* InterpreterAssembler::ToNumberWithFeedback(Node* context, Node* object, |
|
rmcilroy
2017/04/06 11:21:31
Please just do this inline InterpreterGenerator::D
Michael Starzinger
2017/04/06 11:28:31
+1
Benedikt Meurer
2017/04/06 11:30:00
Done.
|
| + Variable* var_type_feedback) { |
| + Variable var_result(this, MachineRepresentation::kTagged); |
| + Label if_done(this), if_objectissmi(this), if_objectisnumber(this), |
| + if_objectisother(this, Label::kDeferred); |
| + |
| + GotoIf(TaggedIsSmi(object), &if_objectissmi); |
| + Node* object_map = LoadMap(object); |
| + Branch(IsHeapNumberMap(object_map), &if_objectisnumber, &if_objectisother); |
| + |
| + Bind(&if_objectissmi); |
| + { |
| + var_result.Bind(object); |
| + var_type_feedback->Bind(SmiConstant(BinaryOperationFeedback::kSignedSmall)); |
| + Goto(&if_done); |
| + } |
| + |
| + Bind(&if_objectisnumber); |
| + { |
| + var_result.Bind(object); |
| + var_type_feedback->Bind(SmiConstant(BinaryOperationFeedback::kNumber)); |
| + Goto(&if_done); |
| + } |
| + |
| + Bind(&if_objectisother); |
| + { |
| + // Convert the {object} to a Number. |
| + Callable callable = CodeFactory::NonNumberToNumber(isolate()); |
| + var_result.Bind(CallStub(callable, context, object)); |
| + var_type_feedback->Bind(SmiConstant(BinaryOperationFeedback::kAny)); |
| + Goto(&if_done); |
| + } |
| + |
| + Bind(&if_done); |
| + return var_result.value(); |
| +} |
| + |
| Node* InterpreterAssembler::TruncateTaggedToWord32WithFeedback( |
| Node* context, Node* value, Variable* var_type_feedback) { |
| // We might need to loop once due to ToNumber conversion. |