| Index: src/code-stubs.cc
|
| diff --git a/src/code-stubs.cc b/src/code-stubs.cc
|
| index f3369f3dd75922d1fbfb6d041689eae3e895e2e3..414af170a279c6d282353b3ef5182263c0da0df0 100644
|
| --- a/src/code-stubs.cc
|
| +++ b/src/code-stubs.cc
|
| @@ -1651,25 +1651,27 @@ compiler::Node* BitwiseXorStub::Generate(CodeStubAssembler* assembler,
|
| return result;
|
| }
|
|
|
| -void IncStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| +// static
|
| +compiler::Node* IncStub::Generate(CodeStubAssembler* assembler,
|
| + compiler::Node* value,
|
| + compiler::Node* context) {
|
| typedef CodeStubAssembler::Label Label;
|
| typedef compiler::Node Node;
|
| typedef CodeStubAssembler::Variable Variable;
|
|
|
| - Node* context = assembler->Parameter(1);
|
| -
|
| // Shared entry for floating point increment.
|
| - Label do_finc(assembler);
|
| + Label do_finc(assembler), end(assembler);
|
| Variable var_finc_value(assembler, MachineRepresentation::kFloat64);
|
|
|
| // We might need to try again due to ToNumber conversion.
|
| Variable value_var(assembler, MachineRepresentation::kTagged);
|
| + Variable result_var(assembler, MachineRepresentation::kTagged);
|
| Label start(assembler, &value_var);
|
| - value_var.Bind(assembler->Parameter(0));
|
| + value_var.Bind(value);
|
| assembler->Goto(&start);
|
| assembler->Bind(&start);
|
| {
|
| - Node* value = value_var.value();
|
| + value = value_var.value();
|
|
|
| Label if_issmi(assembler), if_isnotsmi(assembler);
|
| assembler->Branch(assembler->WordIsSmi(value), &if_issmi, &if_isnotsmi);
|
| @@ -1686,7 +1688,8 @@ void IncStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| assembler->Branch(overflow, &if_overflow, &if_notoverflow);
|
|
|
| assembler->Bind(&if_notoverflow);
|
| - assembler->Return(assembler->Projection(0, pair));
|
| + result_var.Bind(assembler->Projection(0, pair));
|
| + assembler->Goto(&end);
|
|
|
| assembler->Bind(&if_overflow);
|
| {
|
| @@ -1715,7 +1718,8 @@ void IncStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| assembler->Bind(&if_valuenotnumber);
|
| {
|
| // Convert to a Number first and try again.
|
| - Callable callable = CodeFactory::NonNumberToNumber(isolate());
|
| + Callable callable =
|
| + CodeFactory::NonNumberToNumber(assembler->isolate());
|
| value_var.Bind(assembler->CallStub(callable, context, value));
|
| assembler->Goto(&start);
|
| }
|
| @@ -1727,30 +1731,35 @@ void IncStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| Node* finc_value = var_finc_value.value();
|
| Node* one = assembler->Float64Constant(1.0);
|
| Node* finc_result = assembler->Float64Add(finc_value, one);
|
| - Node* result = assembler->ChangeFloat64ToTagged(finc_result);
|
| - assembler->Return(result);
|
| + result_var.Bind(assembler->ChangeFloat64ToTagged(finc_result));
|
| + assembler->Goto(&end);
|
| }
|
| +
|
| + assembler->Bind(&end);
|
| + return result_var.value();
|
| }
|
|
|
| -void DecStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| +// static
|
| +compiler::Node* DecStub::Generate(CodeStubAssembler* assembler,
|
| + compiler::Node* value,
|
| + compiler::Node* context) {
|
| typedef CodeStubAssembler::Label Label;
|
| typedef compiler::Node Node;
|
| typedef CodeStubAssembler::Variable Variable;
|
|
|
| - Node* context = assembler->Parameter(1);
|
| -
|
| // Shared entry for floating point decrement.
|
| - Label do_fdec(assembler);
|
| + Label do_fdec(assembler), end(assembler);
|
| Variable var_fdec_value(assembler, MachineRepresentation::kFloat64);
|
|
|
| // We might need to try again due to ToNumber conversion.
|
| Variable value_var(assembler, MachineRepresentation::kTagged);
|
| + Variable result_var(assembler, MachineRepresentation::kTagged);
|
| Label start(assembler, &value_var);
|
| - value_var.Bind(assembler->Parameter(0));
|
| + value_var.Bind(value);
|
| assembler->Goto(&start);
|
| assembler->Bind(&start);
|
| {
|
| - Node* value = value_var.value();
|
| + value = value_var.value();
|
|
|
| Label if_issmi(assembler), if_isnotsmi(assembler);
|
| assembler->Branch(assembler->WordIsSmi(value), &if_issmi, &if_isnotsmi);
|
| @@ -1767,7 +1776,8 @@ void DecStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| assembler->Branch(overflow, &if_overflow, &if_notoverflow);
|
|
|
| assembler->Bind(&if_notoverflow);
|
| - assembler->Return(assembler->Projection(0, pair));
|
| + result_var.Bind(assembler->Projection(0, pair));
|
| + assembler->Goto(&end);
|
|
|
| assembler->Bind(&if_overflow);
|
| {
|
| @@ -1796,7 +1806,8 @@ void DecStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| assembler->Bind(&if_valuenotnumber);
|
| {
|
| // Convert to a Number first and try again.
|
| - Callable callable = CodeFactory::NonNumberToNumber(isolate());
|
| + Callable callable =
|
| + CodeFactory::NonNumberToNumber(assembler->isolate());
|
| value_var.Bind(assembler->CallStub(callable, context, value));
|
| assembler->Goto(&start);
|
| }
|
| @@ -1808,9 +1819,12 @@ void DecStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| Node* fdec_value = var_fdec_value.value();
|
| Node* one = assembler->Float64Constant(1.0);
|
| Node* fdec_result = assembler->Float64Sub(fdec_value, one);
|
| - Node* result = assembler->ChangeFloat64ToTagged(fdec_result);
|
| - assembler->Return(result);
|
| + result_var.Bind(assembler->ChangeFloat64ToTagged(fdec_result));
|
| + assembler->Goto(&end);
|
| }
|
| +
|
| + assembler->Bind(&end);
|
| + return result_var.value();
|
| }
|
|
|
| void InstanceOfStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
|
|