| Index: src/code-stubs.cc
|
| diff --git a/src/code-stubs.cc b/src/code-stubs.cc
|
| index ace6d616e53ef5f52bee58141e2fd6724076977b..4834e70ed9544a96cf855da4987f552938ced426 100644
|
| --- a/src/code-stubs.cc
|
| +++ b/src/code-stubs.cc
|
| @@ -487,13 +487,12 @@
|
| assembler->Return(result);
|
| }
|
|
|
| -// static
|
| -compiler::Node* AddStub::Generate(CodeStubAssembler* assembler,
|
| - compiler::Node* left, compiler::Node* right,
|
| - compiler::Node* context) {
|
| +void AddStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| typedef CodeStubAssembler::Label Label;
|
| typedef compiler::Node Node;
|
| typedef CodeStubAssembler::Variable Variable;
|
| +
|
| + Node* context = assembler->Parameter(2);
|
|
|
| // Shared entry for floating point addition.
|
| Label do_fadd(assembler);
|
| @@ -503,14 +502,11 @@
|
| // We might need to loop several times due to ToPrimitive, ToString and/or
|
| // ToNumber conversions.
|
| Variable var_lhs(assembler, MachineRepresentation::kTagged),
|
| - var_rhs(assembler, MachineRepresentation::kTagged),
|
| - var_result(assembler, MachineRepresentation::kTagged);
|
| + var_rhs(assembler, MachineRepresentation::kTagged);
|
| Variable* loop_vars[2] = {&var_lhs, &var_rhs};
|
| - Label loop(assembler, 2, loop_vars), end(assembler),
|
| - string_add_convert_left(assembler, Label::kDeferred),
|
| - string_add_convert_right(assembler, Label::kDeferred);
|
| - var_lhs.Bind(left);
|
| - var_rhs.Bind(right);
|
| + Label loop(assembler, 2, loop_vars);
|
| + var_lhs.Bind(assembler->Parameter(0));
|
| + var_rhs.Bind(assembler->Parameter(1));
|
| assembler->Goto(&loop);
|
| assembler->Bind(&loop);
|
| {
|
| @@ -547,8 +543,7 @@
|
| }
|
|
|
| assembler->Bind(&if_notoverflow);
|
| - var_result.Bind(assembler->Projection(0, pair));
|
| - assembler->Goto(&end);
|
| + assembler->Return(assembler->Projection(0, pair));
|
| }
|
|
|
| assembler->Bind(&if_rhsisnotsmi);
|
| @@ -585,9 +580,11 @@
|
|
|
| assembler->Bind(&if_rhsisstring);
|
| {
|
| - var_lhs.Bind(lhs);
|
| - var_rhs.Bind(rhs);
|
| - assembler->Goto(&string_add_convert_left);
|
| + // Convert {lhs}, which is a Smi, to a String and concatenate the
|
| + // resulting string with the String {rhs}.
|
| + Callable callable = CodeFactory::StringAdd(
|
| + assembler->isolate(), STRING_ADD_CONVERT_LEFT, NOT_TENURED);
|
| + assembler->TailCallStub(callable, context, lhs, rhs);
|
| }
|
|
|
| assembler->Bind(&if_rhsisnotstring);
|
| @@ -637,9 +634,11 @@
|
|
|
| assembler->Bind(&if_lhsisstring);
|
| {
|
| - var_lhs.Bind(lhs);
|
| - var_rhs.Bind(rhs);
|
| - assembler->Goto(&string_add_convert_right);
|
| + // Convert {rhs} to a String (using the sequence of ToPrimitive with
|
| + // no hint followed by ToString) and concatenate the strings.
|
| + Callable callable = CodeFactory::StringAdd(
|
| + assembler->isolate(), STRING_ADD_CONVERT_RIGHT, NOT_TENURED);
|
| + assembler->TailCallStub(callable, context, lhs, rhs);
|
| }
|
|
|
| assembler->Bind(&if_lhsisnotstring);
|
| @@ -713,9 +712,11 @@
|
|
|
| assembler->Bind(&if_rhsisstring);
|
| {
|
| - var_lhs.Bind(lhs);
|
| - var_rhs.Bind(rhs);
|
| - assembler->Goto(&string_add_convert_left);
|
| + // Convert {lhs} to a String (using the sequence of ToPrimitive with
|
| + // no hint followed by ToString) and concatenate the strings.
|
| + Callable callable = CodeFactory::StringAdd(
|
| + assembler->isolate(), STRING_ADD_CONVERT_LEFT, NOT_TENURED);
|
| + assembler->TailCallStub(callable, context, lhs, rhs);
|
| }
|
|
|
| assembler->Bind(&if_rhsisnotstring);
|
| @@ -831,27 +832,6 @@
|
| }
|
| }
|
| }
|
| - assembler->Bind(&string_add_convert_left);
|
| - {
|
| - // Convert {lhs}, which is a Smi, to a String and concatenate the
|
| - // resulting string with the String {rhs}.
|
| - Callable callable = CodeFactory::StringAdd(
|
| - assembler->isolate(), STRING_ADD_CONVERT_LEFT, NOT_TENURED);
|
| - var_result.Bind(assembler->CallStub(callable, context, var_lhs.value(),
|
| - var_rhs.value()));
|
| - assembler->Goto(&end);
|
| - }
|
| -
|
| - assembler->Bind(&string_add_convert_right);
|
| - {
|
| - // Convert {lhs}, which is a Smi, to a String and concatenate the
|
| - // resulting string with the String {rhs}.
|
| - Callable callable = CodeFactory::StringAdd(
|
| - assembler->isolate(), STRING_ADD_CONVERT_RIGHT, NOT_TENURED);
|
| - var_result.Bind(assembler->CallStub(callable, context, var_lhs.value(),
|
| - var_rhs.value()));
|
| - assembler->Goto(&end);
|
| - }
|
|
|
| assembler->Bind(&do_fadd);
|
| {
|
| @@ -859,36 +839,30 @@
|
| Node* rhs_value = var_fadd_rhs.value();
|
| Node* value = assembler->Float64Add(lhs_value, rhs_value);
|
| Node* result = assembler->ChangeFloat64ToTagged(value);
|
| - var_result.Bind(result);
|
| - assembler->Goto(&end);
|
| - }
|
| - assembler->Bind(&end);
|
| - return var_result.value();
|
| -}
|
| -
|
| -// static
|
| -compiler::Node* SubtractStub::Generate(CodeStubAssembler* assembler,
|
| - compiler::Node* left,
|
| - compiler::Node* right,
|
| - compiler::Node* context) {
|
| + assembler->Return(result);
|
| + }
|
| +}
|
| +
|
| +void SubtractStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| typedef CodeStubAssembler::Label Label;
|
| typedef compiler::Node Node;
|
| typedef CodeStubAssembler::Variable Variable;
|
|
|
| + Node* context = assembler->Parameter(2);
|
| +
|
| // Shared entry for floating point subtraction.
|
| - Label do_fsub(assembler), end(assembler);
|
| + Label do_fsub(assembler);
|
| Variable var_fsub_lhs(assembler, MachineRepresentation::kFloat64),
|
| var_fsub_rhs(assembler, MachineRepresentation::kFloat64);
|
|
|
| // We might need to loop several times due to ToPrimitive and/or ToNumber
|
| // conversions.
|
| Variable var_lhs(assembler, MachineRepresentation::kTagged),
|
| - var_rhs(assembler, MachineRepresentation::kTagged),
|
| - var_result(assembler, MachineRepresentation::kTagged);
|
| + var_rhs(assembler, MachineRepresentation::kTagged);
|
| Variable* loop_vars[2] = {&var_lhs, &var_rhs};
|
| Label loop(assembler, 2, loop_vars);
|
| - var_lhs.Bind(left);
|
| - var_rhs.Bind(right);
|
| + var_lhs.Bind(assembler->Parameter(0));
|
| + var_rhs.Bind(assembler->Parameter(1));
|
| assembler->Goto(&loop);
|
| assembler->Bind(&loop);
|
| {
|
| @@ -926,8 +900,7 @@
|
| }
|
|
|
| assembler->Bind(&if_notoverflow);
|
| - var_result.Bind(assembler->Projection(0, pair));
|
| - assembler->Goto(&end);
|
| + assembler->Return(assembler->Projection(0, pair));
|
| }
|
|
|
| assembler->Bind(&if_rhsisnotsmi);
|
| @@ -953,8 +926,7 @@
|
| assembler->Bind(&if_rhsisnotnumber);
|
| {
|
| // Convert the {rhs} to a Number first.
|
| - Callable callable =
|
| - CodeFactory::NonNumberToNumber(assembler->isolate());
|
| + Callable callable = CodeFactory::NonNumberToNumber(isolate());
|
| var_rhs.Bind(assembler->CallStub(callable, context, rhs));
|
| assembler->Goto(&loop);
|
| }
|
| @@ -1010,8 +982,7 @@
|
| assembler->Bind(&if_rhsisnotnumber);
|
| {
|
| // Convert the {rhs} to a Number first.
|
| - Callable callable =
|
| - CodeFactory::NonNumberToNumber(assembler->isolate());
|
| + Callable callable = CodeFactory::NonNumberToNumber(isolate());
|
| var_rhs.Bind(assembler->CallStub(callable, context, rhs));
|
| assembler->Goto(&loop);
|
| }
|
| @@ -1021,8 +992,7 @@
|
| assembler->Bind(&if_lhsisnotnumber);
|
| {
|
| // Convert the {lhs} to a Number first.
|
| - Callable callable =
|
| - CodeFactory::NonNumberToNumber(assembler->isolate());
|
| + Callable callable = CodeFactory::NonNumberToNumber(isolate());
|
| var_lhs.Bind(assembler->CallStub(callable, context, lhs));
|
| assembler->Goto(&loop);
|
| }
|
| @@ -1034,21 +1004,17 @@
|
| Node* lhs_value = var_fsub_lhs.value();
|
| Node* rhs_value = var_fsub_rhs.value();
|
| Node* value = assembler->Float64Sub(lhs_value, rhs_value);
|
| - var_result.Bind(assembler->ChangeFloat64ToTagged(value));
|
| - assembler->Goto(&end);
|
| - }
|
| - assembler->Bind(&end);
|
| - return var_result.value();
|
| -}
|
| -
|
| -// static
|
| -compiler::Node* MultiplyStub::Generate(CodeStubAssembler* assembler,
|
| - compiler::Node* left,
|
| - compiler::Node* right,
|
| - compiler::Node* context) {
|
| + Node* result = assembler->ChangeFloat64ToTagged(value);
|
| + assembler->Return(result);
|
| + }
|
| +}
|
| +
|
| +void MultiplyStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| using compiler::Node;
|
| typedef CodeStubAssembler::Label Label;
|
| typedef CodeStubAssembler::Variable Variable;
|
| +
|
| + Node* context = assembler->Parameter(2);
|
|
|
| // Shared entry point for floating point multiplication.
|
| Label do_fmul(assembler);
|
| @@ -1062,8 +1028,8 @@
|
| var_rhs(assembler, MachineRepresentation::kTagged);
|
| Variable* loop_variables[] = {&var_lhs, &var_rhs};
|
| Label loop(assembler, 2, loop_variables);
|
| - var_lhs.Bind(left);
|
| - var_rhs.Bind(right);
|
| + var_lhs.Bind(assembler->Parameter(0));
|
| + var_rhs.Bind(assembler->Parameter(1));
|
| assembler->Goto(&loop);
|
| assembler->Bind(&loop);
|
| {
|
| @@ -1173,8 +1139,7 @@
|
| assembler->Bind(&lhs_is_not_number);
|
| {
|
| // Convert {lhs} to a Number and loop.
|
| - Callable callable =
|
| - CodeFactory::NonNumberToNumber(assembler->isolate());
|
| + Callable callable = CodeFactory::NonNumberToNumber(isolate());
|
| var_lhs.Bind(assembler->CallStub(callable, context, lhs));
|
| assembler->Goto(&loop);
|
| }
|
| @@ -1186,21 +1151,19 @@
|
| Node* value =
|
| assembler->Float64Mul(var_lhs_float64.value(), var_rhs_float64.value());
|
| Node* result = assembler->ChangeFloat64ToTagged(value);
|
| - return result;
|
| - }
|
| -}
|
| -
|
| -// static
|
| -compiler::Node* DivideStub::Generate(CodeStubAssembler* assembler,
|
| - compiler::Node* left,
|
| - compiler::Node* right,
|
| - compiler::Node* context) {
|
| + assembler->Return(result);
|
| + }
|
| +}
|
| +
|
| +void DivideStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| using compiler::Node;
|
| typedef CodeStubAssembler::Label Label;
|
| typedef CodeStubAssembler::Variable Variable;
|
|
|
| + Node* context = assembler->Parameter(2);
|
| +
|
| // Shared entry point for floating point division.
|
| - Label do_fdiv(assembler), end(assembler);
|
| + Label do_fdiv(assembler);
|
| Variable var_dividend_float64(assembler, MachineRepresentation::kFloat64),
|
| var_divisor_float64(assembler, MachineRepresentation::kFloat64);
|
|
|
| @@ -1208,12 +1171,11 @@
|
|
|
| // We might need to loop one or two times due to ToNumber conversions.
|
| Variable var_dividend(assembler, MachineRepresentation::kTagged),
|
| - var_divisor(assembler, MachineRepresentation::kTagged),
|
| - var_result(assembler, MachineRepresentation::kTagged);
|
| + var_divisor(assembler, MachineRepresentation::kTagged);
|
| Variable* loop_variables[] = {&var_dividend, &var_divisor};
|
| Label loop(assembler, 2, loop_variables);
|
| - var_dividend.Bind(left);
|
| - var_divisor.Bind(right);
|
| + var_dividend.Bind(assembler->Parameter(0));
|
| + var_divisor.Bind(assembler->Parameter(1));
|
| assembler->Goto(&loop);
|
| assembler->Bind(&loop);
|
| {
|
| @@ -1287,8 +1249,7 @@
|
| // Do floating point division if the remainder is not 0.
|
| assembler->GotoIf(
|
| assembler->Word32NotEqual(untagged_dividend, truncated), &bailout);
|
| - var_result.Bind(assembler->SmiTag(untagged_result));
|
| - assembler->Goto(&end);
|
| + assembler->Return(assembler->SmiTag(untagged_result));
|
|
|
| // Bailout: convert {dividend} and {divisor} to double and do double
|
| // division.
|
| @@ -1322,8 +1283,7 @@
|
| assembler->Bind(&divisor_is_not_number);
|
| {
|
| // Convert {divisor} to a number and loop.
|
| - Callable callable =
|
| - CodeFactory::NonNumberToNumber(assembler->isolate());
|
| + Callable callable = CodeFactory::NonNumberToNumber(isolate());
|
| var_divisor.Bind(assembler->CallStub(callable, context, divisor));
|
| assembler->Goto(&loop);
|
| }
|
| @@ -1378,8 +1338,7 @@
|
| assembler->Bind(&divisor_is_not_number);
|
| {
|
| // Convert {divisor} to a number and loop.
|
| - Callable callable =
|
| - CodeFactory::NonNumberToNumber(assembler->isolate());
|
| + Callable callable = CodeFactory::NonNumberToNumber(isolate());
|
| var_divisor.Bind(assembler->CallStub(callable, context, divisor));
|
| assembler->Goto(&loop);
|
| }
|
| @@ -1389,8 +1348,7 @@
|
| assembler->Bind(÷nd_is_not_number);
|
| {
|
| // Convert {dividend} to a Number and loop.
|
| - Callable callable =
|
| - CodeFactory::NonNumberToNumber(assembler->isolate());
|
| + Callable callable = CodeFactory::NonNumberToNumber(isolate());
|
| var_dividend.Bind(assembler->CallStub(callable, context, dividend));
|
| assembler->Goto(&loop);
|
| }
|
| @@ -1401,21 +1359,30 @@
|
| {
|
| Node* value = assembler->Float64Div(var_dividend_float64.value(),
|
| var_divisor_float64.value());
|
| - var_result.Bind(assembler->ChangeFloat64ToTagged(value));
|
| - assembler->Goto(&end);
|
| - }
|
| - assembler->Bind(&end);
|
| - return var_result.value();
|
| -}
|
| -
|
| -// static
|
| -compiler::Node* ModulusStub::Generate(CodeStubAssembler* assembler,
|
| - compiler::Node* left,
|
| - compiler::Node* right,
|
| - compiler::Node* context) {
|
| + Node* result = assembler->ChangeFloat64ToTagged(value);
|
| + assembler->Return(result);
|
| + }
|
| +}
|
| +
|
| +void BitwiseAndStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| + using compiler::Node;
|
| +
|
| + Node* lhs = assembler->Parameter(0);
|
| + Node* rhs = assembler->Parameter(1);
|
| + Node* context = assembler->Parameter(2);
|
| + Node* lhs_value = assembler->TruncateTaggedToWord32(context, lhs);
|
| + Node* rhs_value = assembler->TruncateTaggedToWord32(context, rhs);
|
| + Node* value = assembler->Word32And(lhs_value, rhs_value);
|
| + Node* result = assembler->ChangeInt32ToTagged(value);
|
| + assembler->Return(result);
|
| +}
|
| +
|
| +void ModulusStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| using compiler::Node;
|
| typedef CodeStubAssembler::Label Label;
|
| typedef CodeStubAssembler::Variable Variable;
|
| +
|
| + Node* context = assembler->Parameter(2);
|
|
|
| // Shared entry point for floating point modulus.
|
| Label do_fmod(assembler);
|
| @@ -1429,8 +1396,8 @@
|
| var_divisor(assembler, MachineRepresentation::kTagged);
|
| Variable* loop_variables[] = {&var_dividend, &var_divisor};
|
| Label loop(assembler, 2, loop_variables);
|
| - var_dividend.Bind(left);
|
| - var_divisor.Bind(right);
|
| + var_dividend.Bind(assembler->Parameter(0));
|
| + var_divisor.Bind(assembler->Parameter(1));
|
| assembler->Goto(&loop);
|
| assembler->Bind(&loop);
|
| {
|
| @@ -1477,8 +1444,7 @@
|
| assembler->Bind(&divisor_is_not_number);
|
| {
|
| // Convert {divisor} to a number and loop.
|
| - Callable callable =
|
| - CodeFactory::NonNumberToNumber(assembler->isolate());
|
| + Callable callable = CodeFactory::NonNumberToNumber(isolate());
|
| var_divisor.Bind(assembler->CallStub(callable, context, divisor));
|
| assembler->Goto(&loop);
|
| }
|
| @@ -1533,8 +1499,7 @@
|
| assembler->Bind(&divisor_is_not_number);
|
| {
|
| // Convert {divisor} to a number and loop.
|
| - Callable callable =
|
| - CodeFactory::NonNumberToNumber(assembler->isolate());
|
| + Callable callable = CodeFactory::NonNumberToNumber(isolate());
|
| var_divisor.Bind(assembler->CallStub(callable, context, divisor));
|
| assembler->Goto(&loop);
|
| }
|
| @@ -1544,8 +1509,7 @@
|
| assembler->Bind(÷nd_is_not_number);
|
| {
|
| // Convert {dividend} to a Number and loop.
|
| - Callable callable =
|
| - CodeFactory::NonNumberToNumber(assembler->isolate());
|
| + Callable callable = CodeFactory::NonNumberToNumber(isolate());
|
| var_dividend.Bind(assembler->CallStub(callable, context, dividend));
|
| assembler->Goto(&loop);
|
| }
|
| @@ -1557,98 +1521,80 @@
|
| Node* value = assembler->Float64Mod(var_dividend_float64.value(),
|
| var_divisor_float64.value());
|
| Node* result = assembler->ChangeFloat64ToTagged(value);
|
| - return result;
|
| - }
|
| -}
|
| -
|
| -// static
|
| -compiler::Node* ShiftLeftStub::Generate(CodeStubAssembler* assembler,
|
| - compiler::Node* left,
|
| - compiler::Node* right,
|
| - compiler::Node* context) {
|
| + assembler->Return(result);
|
| + }
|
| +}
|
| +
|
| +void ShiftLeftStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| using compiler::Node;
|
|
|
| - Node* lhs_value = assembler->TruncateTaggedToWord32(context, left);
|
| - Node* rhs_value = assembler->TruncateTaggedToWord32(context, right);
|
| + Node* lhs = assembler->Parameter(0);
|
| + Node* rhs = assembler->Parameter(1);
|
| + Node* context = assembler->Parameter(2);
|
| + Node* lhs_value = assembler->TruncateTaggedToWord32(context, lhs);
|
| + Node* rhs_value = assembler->TruncateTaggedToWord32(context, rhs);
|
| Node* shift_count =
|
| assembler->Word32And(rhs_value, assembler->Int32Constant(0x1f));
|
| Node* value = assembler->Word32Shl(lhs_value, shift_count);
|
| Node* result = assembler->ChangeInt32ToTagged(value);
|
| - return result;
|
| -}
|
| -
|
| -// static
|
| -compiler::Node* ShiftRightStub::Generate(CodeStubAssembler* assembler,
|
| - compiler::Node* left,
|
| - compiler::Node* right,
|
| - compiler::Node* context) {
|
| + assembler->Return(result);
|
| +}
|
| +
|
| +void ShiftRightStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| using compiler::Node;
|
|
|
| - Node* lhs_value = assembler->TruncateTaggedToWord32(context, left);
|
| - Node* rhs_value = assembler->TruncateTaggedToWord32(context, right);
|
| + Node* lhs = assembler->Parameter(0);
|
| + Node* rhs = assembler->Parameter(1);
|
| + Node* context = assembler->Parameter(2);
|
| + Node* lhs_value = assembler->TruncateTaggedToWord32(context, lhs);
|
| + Node* rhs_value = assembler->TruncateTaggedToWord32(context, rhs);
|
| Node* shift_count =
|
| assembler->Word32And(rhs_value, assembler->Int32Constant(0x1f));
|
| Node* value = assembler->Word32Sar(lhs_value, shift_count);
|
| Node* result = assembler->ChangeInt32ToTagged(value);
|
| - return result;
|
| -}
|
| -
|
| -// static
|
| -compiler::Node* ShiftRightLogicalStub::Generate(CodeStubAssembler* assembler,
|
| - compiler::Node* left,
|
| - compiler::Node* right,
|
| - compiler::Node* context) {
|
| + assembler->Return(result);
|
| +}
|
| +
|
| +void ShiftRightLogicalStub::GenerateAssembly(
|
| + CodeStubAssembler* assembler) const {
|
| using compiler::Node;
|
|
|
| - Node* lhs_value = assembler->TruncateTaggedToWord32(context, left);
|
| - Node* rhs_value = assembler->TruncateTaggedToWord32(context, right);
|
| + Node* lhs = assembler->Parameter(0);
|
| + Node* rhs = assembler->Parameter(1);
|
| + Node* context = assembler->Parameter(2);
|
| + Node* lhs_value = assembler->TruncateTaggedToWord32(context, lhs);
|
| + Node* rhs_value = assembler->TruncateTaggedToWord32(context, rhs);
|
| Node* shift_count =
|
| assembler->Word32And(rhs_value, assembler->Int32Constant(0x1f));
|
| Node* value = assembler->Word32Shr(lhs_value, shift_count);
|
| Node* result = assembler->ChangeUint32ToTagged(value);
|
| - return result;
|
| -}
|
| -
|
| -// static
|
| -compiler::Node* BitwiseAndStub::Generate(CodeStubAssembler* assembler,
|
| - compiler::Node* left,
|
| - compiler::Node* right,
|
| - compiler::Node* context) {
|
| + assembler->Return(result);
|
| +}
|
| +
|
| +void BitwiseOrStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| using compiler::Node;
|
|
|
| - Node* lhs_value = assembler->TruncateTaggedToWord32(context, left);
|
| - Node* rhs_value = assembler->TruncateTaggedToWord32(context, right);
|
| - Node* value = assembler->Word32And(lhs_value, rhs_value);
|
| - Node* result = assembler->ChangeInt32ToTagged(value);
|
| - return result;
|
| -}
|
| -
|
| -// static
|
| -compiler::Node* BitwiseOrStub::Generate(CodeStubAssembler* assembler,
|
| - compiler::Node* left,
|
| - compiler::Node* right,
|
| - compiler::Node* context) {
|
| - using compiler::Node;
|
| -
|
| - Node* lhs_value = assembler->TruncateTaggedToWord32(context, left);
|
| - Node* rhs_value = assembler->TruncateTaggedToWord32(context, right);
|
| + Node* lhs = assembler->Parameter(0);
|
| + Node* rhs = assembler->Parameter(1);
|
| + Node* context = assembler->Parameter(2);
|
| + Node* lhs_value = assembler->TruncateTaggedToWord32(context, lhs);
|
| + Node* rhs_value = assembler->TruncateTaggedToWord32(context, rhs);
|
| Node* value = assembler->Word32Or(lhs_value, rhs_value);
|
| Node* result = assembler->ChangeInt32ToTagged(value);
|
| - return result;
|
| -}
|
| -
|
| -// static
|
| -compiler::Node* BitwiseXorStub::Generate(CodeStubAssembler* assembler,
|
| - compiler::Node* left,
|
| - compiler::Node* right,
|
| - compiler::Node* context) {
|
| + assembler->Return(result);
|
| +}
|
| +
|
| +void BitwiseXorStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
| using compiler::Node;
|
|
|
| - Node* lhs_value = assembler->TruncateTaggedToWord32(context, left);
|
| - Node* rhs_value = assembler->TruncateTaggedToWord32(context, right);
|
| + Node* lhs = assembler->Parameter(0);
|
| + Node* rhs = assembler->Parameter(1);
|
| + Node* context = assembler->Parameter(2);
|
| + Node* lhs_value = assembler->TruncateTaggedToWord32(context, lhs);
|
| + Node* rhs_value = assembler->TruncateTaggedToWord32(context, rhs);
|
| Node* value = assembler->Word32Xor(lhs_value, rhs_value);
|
| Node* result = assembler->ChangeInt32ToTagged(value);
|
| - return result;
|
| + assembler->Return(result);
|
| }
|
|
|
| void IncStub::GenerateAssembly(CodeStubAssembler* assembler) const {
|
|
|