| Index: src/interpreter/bytecode-array-builder.cc
|
| diff --git a/src/interpreter/bytecode-array-builder.cc b/src/interpreter/bytecode-array-builder.cc
|
| index f277d7ce187e0a5ba975b351e7190c731fea79ca..76b61d10520ddf44312e3bb1e44fd47f025243f6 100644
|
| --- a/src/interpreter/bytecode-array-builder.cc
|
| +++ b/src/interpreter/bytecode-array-builder.cc
|
| @@ -1083,14 +1083,14 @@ void BytecodeArrayBuilder::EnsureReturn(FunctionLiteral* literal) {
|
| }
|
| }
|
|
|
| -BytecodeArrayBuilder& BytecodeArrayBuilder::Call(Register callable,
|
| - Register receiver_args,
|
| - size_t receiver_args_count,
|
| - int feedback_slot) {
|
| +BytecodeArrayBuilder& BytecodeArrayBuilder::CallIC(Register callable,
|
| + Register receiver_args,
|
| + size_t receiver_args_count,
|
| + int feedback_slot) {
|
| if (FitsInReg8Operand(callable) && FitsInReg8Operand(receiver_args) &&
|
| FitsInIdx8Operand(receiver_args_count) &&
|
| FitsInIdx8Operand(feedback_slot)) {
|
| - Output(Bytecode::kCall, callable.ToRawOperand(),
|
| + Output(Bytecode::kCallIC, callable.ToRawOperand(),
|
| receiver_args.ToRawOperand(),
|
| static_cast<uint8_t>(receiver_args_count),
|
| static_cast<uint8_t>(feedback_slot));
|
| @@ -1098,7 +1098,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::Call(Register callable,
|
| FitsInReg16Operand(receiver_args) &&
|
| FitsInIdx16Operand(receiver_args_count) &&
|
| FitsInIdx16Operand(feedback_slot)) {
|
| - Output(Bytecode::kCallWide, callable.ToRawOperand(),
|
| + Output(Bytecode::kCallICWide, callable.ToRawOperand(),
|
| receiver_args.ToRawOperand(),
|
| static_cast<uint16_t>(receiver_args_count),
|
| static_cast<uint16_t>(feedback_slot));
|
| @@ -1108,6 +1108,25 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::Call(Register callable,
|
| return *this;
|
| }
|
|
|
| +BytecodeArrayBuilder& BytecodeArrayBuilder::Call(Register callable,
|
| + Register receiver_args,
|
| + size_t receiver_args_count) {
|
| + if (FitsInReg8Operand(callable) && FitsInReg8Operand(receiver_args) &&
|
| + FitsInIdx8Operand(receiver_args_count)) {
|
| + Output(Bytecode::kCall, callable.ToRawOperand(),
|
| + receiver_args.ToRawOperand(),
|
| + static_cast<uint8_t>(receiver_args_count));
|
| + } else if (FitsInReg16Operand(callable) &&
|
| + FitsInReg16Operand(receiver_args) &&
|
| + FitsInIdx16Operand(receiver_args_count)) {
|
| + Output(Bytecode::kCallWide, callable.ToRawOperand(),
|
| + receiver_args.ToRawOperand(),
|
| + static_cast<uint16_t>(receiver_args_count));
|
| + } else {
|
| + UNIMPLEMENTED();
|
| + }
|
| + return *this;
|
| +}
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::New(Register constructor,
|
| Register first_arg,
|
|
|