Index: src/code-stubs.cc |
diff --git a/src/code-stubs.cc b/src/code-stubs.cc |
index 4dbd881adfde49da613975e7a75e39e3e0a38d10..d553e39d047769c64b6ba099996106868c4a33fa 100644 |
--- a/src/code-stubs.cc |
+++ b/src/code-stubs.cc |
@@ -4927,64 +4927,12 @@ void ToLengthStub::GenerateAssembly(CodeStubAssembler* assembler) const { |
} |
void ToIntegerStub::GenerateAssembly(CodeStubAssembler* assembler) const { |
- typedef CodeStubAssembler::Label Label; |
typedef compiler::Node Node; |
- typedef CodeStubAssembler::Variable Variable; |
- |
- Node* context = assembler->Parameter(1); |
- // We might need to loop once for ToNumber conversion. |
- Variable var_arg(assembler, MachineRepresentation::kTagged); |
- Label loop(assembler, &var_arg); |
- var_arg.Bind(assembler->Parameter(0)); |
- assembler->Goto(&loop); |
- assembler->Bind(&loop); |
- { |
- // Shared entry points. |
- Label return_arg(assembler), return_zero(assembler, Label::kDeferred); |
- |
- // Load the current {arg} value. |
- Node* arg = var_arg.value(); |
- |
- // Check if {arg} is a Smi. |
- assembler->GotoIf(assembler->WordIsSmi(arg), &return_arg); |
- |
- // Check if {arg} is a HeapNumber. |
- Label if_argisheapnumber(assembler), |
- if_argisnotheapnumber(assembler, Label::kDeferred); |
- assembler->Branch(assembler->WordEqual(assembler->LoadMap(arg), |
- assembler->HeapNumberMapConstant()), |
- &if_argisheapnumber, &if_argisnotheapnumber); |
- |
- assembler->Bind(&if_argisheapnumber); |
- { |
- // Load the floating-point value of {arg}. |
- Node* arg_value = assembler->LoadHeapNumberValue(arg); |
- |
- // Check if {arg} is NaN. |
- assembler->GotoUnless(assembler->Float64Equal(arg_value, arg_value), |
- &return_zero); |
- |
- // Truncate {arg} towards zero. |
- Node* value = assembler->Float64Trunc(arg_value); |
- var_arg.Bind(assembler->ChangeFloat64ToTagged(value)); |
- assembler->Goto(&return_arg); |
- } |
- |
- assembler->Bind(&if_argisnotheapnumber); |
- { |
- // Need to convert {arg} to a Number first. |
- Callable callable = CodeFactory::NonNumberToNumber(assembler->isolate()); |
- var_arg.Bind(assembler->CallStub(callable, context, arg)); |
- assembler->Goto(&loop); |
- } |
- |
- assembler->Bind(&return_arg); |
- assembler->Return(var_arg.value()); |
+ Node* input = assembler->Parameter(Descriptor::kArgument); |
+ Node* context = assembler->Parameter(Descriptor::kContext); |
- assembler->Bind(&return_zero); |
- assembler->Return(assembler->SmiConstant(Smi::FromInt(0))); |
- } |
+ assembler->Return(assembler->ToInteger(context, input)); |
} |
void StoreInterceptorStub::GenerateAssembly( |