| Index: src/interpreter/bytecode-array-builder.cc
|
| diff --git a/src/interpreter/bytecode-array-builder.cc b/src/interpreter/bytecode-array-builder.cc
|
| index f664349dd44b9952326bef8d8688a5297337bebe..15e553bcf87b6b3b48ec80b4c6efb736eae10e40 100644
|
| --- a/src/interpreter/bytecode-array-builder.cc
|
| +++ b/src/interpreter/bytecode-array-builder.cc
|
| @@ -259,7 +259,7 @@ void BytecodeArrayBuilder::OutputScaled(Bytecode bytecode,
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::BinaryOperation(Token::Value op,
|
| Register reg) {
|
| - OperandScale operand_scale = OperandSizesToScale(SizeForRegisterOperand(reg));
|
| + OperandScale operand_scale = OperandSizesToScale(reg.SizeOfOperand());
|
| OutputScaled(BytecodeForBinaryOperation(op), operand_scale,
|
| RegisterOperand(reg));
|
| return *this;
|
| @@ -284,7 +284,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::TypeOf() {
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::CompareOperation(Token::Value op,
|
| Register reg) {
|
| - OperandScale operand_scale = OperandSizesToScale(SizeForRegisterOperand(reg));
|
| + OperandScale operand_scale = OperandSizesToScale(reg.SizeOfOperand());
|
| OutputScaled(BytecodeForCompareOperation(op), operand_scale,
|
| RegisterOperand(reg));
|
| return *this;
|
| @@ -347,8 +347,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadFalse() {
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::LoadAccumulatorWithRegister(
|
| Register reg) {
|
| if (!IsRegisterInAccumulator(reg)) {
|
| - OperandScale operand_scale =
|
| - OperandSizesToScale(SizeForRegisterOperand(reg));
|
| + OperandScale operand_scale = OperandSizesToScale(reg.SizeOfOperand());
|
| OutputScaled(Bytecode::kLdar, operand_scale, RegisterOperand(reg));
|
| }
|
| return *this;
|
| @@ -358,8 +357,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadAccumulatorWithRegister(
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::StoreAccumulatorInRegister(
|
| Register reg) {
|
| if (!IsRegisterInAccumulator(reg)) {
|
| - OperandScale operand_scale =
|
| - OperandSizesToScale(SizeForRegisterOperand(reg));
|
| + OperandScale operand_scale = OperandSizesToScale(reg.SizeOfOperand());
|
| OutputScaled(Bytecode::kStar, operand_scale, RegisterOperand(reg));
|
| }
|
| return *this;
|
| @@ -369,8 +367,8 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreAccumulatorInRegister(
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::MoveRegister(Register from,
|
| Register to) {
|
| DCHECK(from != to);
|
| - OperandScale operand_scale = OperandSizesToScale(SizeForRegisterOperand(from),
|
| - SizeForRegisterOperand(to));
|
| + OperandScale operand_scale =
|
| + OperandSizesToScale(from.SizeOfOperand(), to.SizeOfOperand());
|
| OutputScaled(Bytecode::kMov, operand_scale, RegisterOperand(from),
|
| RegisterOperand(to));
|
| return *this;
|
| @@ -406,7 +404,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreGlobal(
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::LoadContextSlot(Register context,
|
| int slot_index) {
|
| OperandScale operand_scale = OperandSizesToScale(
|
| - SizeForRegisterOperand(context), SizeForUnsignedOperand(slot_index));
|
| + context.SizeOfOperand(), SizeForUnsignedOperand(slot_index));
|
| OutputScaled(Bytecode::kLdaContextSlot, operand_scale,
|
| RegisterOperand(context), UnsignedOperand(slot_index));
|
| return *this;
|
| @@ -416,7 +414,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadContextSlot(Register context,
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::StoreContextSlot(Register context,
|
| int slot_index) {
|
| OperandScale operand_scale = OperandSizesToScale(
|
| - SizeForRegisterOperand(context), SizeForUnsignedOperand(slot_index));
|
| + context.SizeOfOperand(), SizeForUnsignedOperand(slot_index));
|
| OutputScaled(Bytecode::kStaContextSlot, operand_scale,
|
| RegisterOperand(context), UnsignedOperand(slot_index));
|
| return *this;
|
| @@ -448,7 +446,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty(
|
| Register object, const Handle<Name> name, int feedback_slot) {
|
| size_t name_index = GetConstantPoolEntry(name);
|
| OperandScale operand_scale = OperandSizesToScale(
|
| - SizeForRegisterOperand(object), SizeForUnsignedOperand(name_index),
|
| + object.SizeOfOperand(), SizeForUnsignedOperand(name_index),
|
| SizeForUnsignedOperand(feedback_slot));
|
| OutputScaled(Bytecode::kLoadIC, operand_scale, RegisterOperand(object),
|
| UnsignedOperand(name_index), UnsignedOperand(feedback_slot));
|
| @@ -458,7 +456,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty(
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::LoadKeyedProperty(
|
| Register object, int feedback_slot) {
|
| OperandScale operand_scale = OperandSizesToScale(
|
| - SizeForRegisterOperand(object), SizeForUnsignedOperand(feedback_slot));
|
| + object.SizeOfOperand(), SizeForUnsignedOperand(feedback_slot));
|
| OutputScaled(Bytecode::kKeyedLoadIC, operand_scale, RegisterOperand(object),
|
| UnsignedOperand(feedback_slot));
|
| return *this;
|
| @@ -470,7 +468,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreNamedProperty(
|
| Bytecode bytecode = BytecodeForStoreIC(language_mode);
|
| size_t name_index = GetConstantPoolEntry(name);
|
| OperandScale operand_scale = OperandSizesToScale(
|
| - SizeForRegisterOperand(object), SizeForUnsignedOperand(name_index),
|
| + object.SizeOfOperand(), SizeForUnsignedOperand(name_index),
|
| SizeForUnsignedOperand(feedback_slot));
|
| OutputScaled(bytecode, operand_scale, RegisterOperand(object),
|
| UnsignedOperand(name_index), UnsignedOperand(feedback_slot));
|
| @@ -482,9 +480,9 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreKeyedProperty(
|
| Register object, Register key, int feedback_slot,
|
| LanguageMode language_mode) {
|
| Bytecode bytecode = BytecodeForKeyedStoreIC(language_mode);
|
| - OperandScale operand_scale = OperandSizesToScale(
|
| - SizeForRegisterOperand(object), SizeForRegisterOperand(key),
|
| - SizeForUnsignedOperand(feedback_slot));
|
| + OperandScale operand_scale =
|
| + OperandSizesToScale(object.SizeOfOperand(), key.SizeOfOperand(),
|
| + SizeForUnsignedOperand(feedback_slot));
|
| OutputScaled(bytecode, operand_scale, RegisterOperand(object),
|
| RegisterOperand(key), UnsignedOperand(feedback_slot));
|
| return *this;
|
| @@ -553,16 +551,14 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::CreateObjectLiteral(
|
|
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::PushContext(Register context) {
|
| - OperandScale operand_scale =
|
| - OperandSizesToScale(SizeForRegisterOperand(context));
|
| + OperandScale operand_scale = OperandSizesToScale(context.SizeOfOperand());
|
| OutputScaled(Bytecode::kPushContext, operand_scale, RegisterOperand(context));
|
| return *this;
|
| }
|
|
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::PopContext(Register context) {
|
| - OperandScale operand_scale =
|
| - OperandSizesToScale(SizeForRegisterOperand(context));
|
| + OperandScale operand_scale = OperandSizesToScale(context.SizeOfOperand());
|
| OutputScaled(Bytecode::kPopContext, operand_scale, RegisterOperand(context));
|
| return *this;
|
| }
|
| @@ -909,7 +905,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::Debugger() {
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::ForInPrepare(
|
| Register cache_info_triple) {
|
| OperandScale operand_scale =
|
| - OperandSizesToScale(SizeForRegisterOperand(cache_info_triple));
|
| + OperandSizesToScale(cache_info_triple.SizeOfOperand());
|
| OutputScaled(Bytecode::kForInPrepare, operand_scale,
|
| RegisterOperand(cache_info_triple));
|
| return *this;
|
| @@ -917,8 +913,8 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::ForInPrepare(
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::ForInDone(Register index,
|
| Register cache_length) {
|
| - OperandScale operand_scale = OperandSizesToScale(
|
| - SizeForRegisterOperand(index), SizeForRegisterOperand(cache_length));
|
| + OperandScale operand_scale =
|
| + OperandSizesToScale(index.SizeOfOperand(), cache_length.SizeOfOperand());
|
| OutputScaled(Bytecode::kForInDone, operand_scale, RegisterOperand(index),
|
| RegisterOperand(cache_length));
|
| return *this;
|
| @@ -927,10 +923,10 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::ForInDone(Register index,
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::ForInNext(
|
| Register receiver, Register index, Register cache_type_array_pair,
|
| int feedback_slot) {
|
| - OperandScale operand_scale = OperandSizesToScale(
|
| - SizeForRegisterOperand(receiver), SizeForRegisterOperand(index),
|
| - SizeForRegisterOperand(cache_type_array_pair),
|
| - SizeForUnsignedOperand(feedback_slot));
|
| + OperandScale operand_scale =
|
| + OperandSizesToScale(receiver.SizeOfOperand(), index.SizeOfOperand(),
|
| + cache_type_array_pair.SizeOfOperand(),
|
| + SizeForUnsignedOperand(feedback_slot));
|
| OutputScaled(Bytecode::kForInNext, operand_scale, RegisterOperand(receiver),
|
| RegisterOperand(index), RegisterOperand(cache_type_array_pair),
|
| UnsignedOperand(feedback_slot));
|
| @@ -939,8 +935,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::ForInNext(
|
|
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::ForInStep(Register index) {
|
| - OperandScale operand_scale =
|
| - OperandSizesToScale(SizeForRegisterOperand(index));
|
| + OperandScale operand_scale = OperandSizesToScale(index.SizeOfOperand());
|
| OutputScaled(Bytecode::kForInStep, operand_scale, RegisterOperand(index));
|
| return *this;
|
| }
|
| @@ -988,7 +983,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::Call(Register callable,
|
| TailCallMode tail_call_mode) {
|
| Bytecode bytecode = BytecodeForCall(tail_call_mode);
|
| OperandScale operand_scale = OperandSizesToScale(
|
| - SizeForRegisterOperand(callable), SizeForRegisterOperand(receiver_args),
|
| + callable.SizeOfOperand(), receiver_args.SizeOfOperand(),
|
| SizeForUnsignedOperand(receiver_args_count),
|
| SizeForUnsignedOperand(feedback_slot));
|
| OutputScaled(bytecode, operand_scale, RegisterOperand(callable),
|
| @@ -1006,7 +1001,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::New(Register constructor,
|
| first_arg = Register(0);
|
| }
|
| OperandScale operand_scale = OperandSizesToScale(
|
| - SizeForRegisterOperand(constructor), SizeForRegisterOperand(first_arg),
|
| + constructor.SizeOfOperand(), first_arg.SizeOfOperand(),
|
| SizeForUnsignedOperand(arg_count));
|
| OutputScaled(Bytecode::kNew, operand_scale, RegisterOperand(constructor),
|
| RegisterOperand(first_arg), UnsignedOperand(arg_count));
|
| @@ -1026,7 +1021,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::CallRuntime(
|
| ? Bytecode::kInvokeIntrinsic
|
| : Bytecode::kCallRuntime;
|
| OperandScale operand_scale = OperandSizesToScale(
|
| - SizeForRegisterOperand(first_arg), SizeForUnsignedOperand(arg_count));
|
| + first_arg.SizeOfOperand(), SizeForUnsignedOperand(arg_count));
|
| OutputScaled(bytecode, operand_scale, static_cast<uint16_t>(function_id),
|
| RegisterOperand(first_arg), UnsignedOperand(arg_count));
|
| return *this;
|
| @@ -1043,8 +1038,8 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::CallRuntimeForPair(
|
| first_arg = Register(0);
|
| }
|
| OperandScale operand_scale = OperandSizesToScale(
|
| - SizeForRegisterOperand(first_arg), SizeForUnsignedOperand(arg_count),
|
| - SizeForRegisterOperand(first_return));
|
| + first_arg.SizeOfOperand(), SizeForUnsignedOperand(arg_count),
|
| + first_return.SizeOfOperand());
|
| OutputScaled(Bytecode::kCallRuntimeForPair, operand_scale,
|
| static_cast<uint16_t>(function_id), RegisterOperand(first_arg),
|
| UnsignedOperand(arg_count), RegisterOperand(first_return));
|
| @@ -1053,10 +1048,9 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::CallRuntimeForPair(
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::CallJSRuntime(
|
| int context_index, Register receiver_args, size_t receiver_args_count) {
|
| - OperandScale operand_scale =
|
| - OperandSizesToScale(SizeForUnsignedOperand(context_index),
|
| - SizeForRegisterOperand(receiver_args),
|
| - SizeForUnsignedOperand(receiver_args_count));
|
| + OperandScale operand_scale = OperandSizesToScale(
|
| + SizeForUnsignedOperand(context_index), receiver_args.SizeOfOperand(),
|
| + SizeForUnsignedOperand(receiver_args_count));
|
| OutputScaled(Bytecode::kCallJSRuntime, operand_scale,
|
| UnsignedOperand(context_index), RegisterOperand(receiver_args),
|
| UnsignedOperand(receiver_args_count));
|
| @@ -1066,8 +1060,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::CallJSRuntime(
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::Delete(Register object,
|
| LanguageMode language_mode) {
|
| - OperandScale operand_scale =
|
| - OperandSizesToScale(SizeForRegisterOperand(object));
|
| + OperandScale operand_scale = OperandSizesToScale(object.SizeOfOperand());
|
| OutputScaled(BytecodeForDelete(language_mode), operand_scale,
|
| RegisterOperand(object));
|
| return *this;
|
| @@ -1137,7 +1130,7 @@ bool BytecodeArrayBuilder::OperandIsValid(Bytecode bytecode,
|
| return SizeForUnsignedOperand(unsigned_value) <= operand_size;
|
| }
|
| case OperandType::kMaybeReg:
|
| - if (operand_value == 0) {
|
| + if (RegisterFromOperand(operand_value) == Register(0)) {
|
| return true;
|
| }
|
| // Fall-through to kReg case.
|
| @@ -1174,7 +1167,7 @@ bool BytecodeArrayBuilder::RegisterIsValid(Register reg,
|
| return false;
|
| }
|
|
|
| - if (SizeForRegisterOperand(reg) > reg_size) {
|
| + if (reg.SizeOfOperand() > reg_size) {
|
| return false;
|
| }
|
|
|
| @@ -1392,17 +1385,6 @@ Bytecode BytecodeArrayBuilder::BytecodeForCall(TailCallMode tail_call_mode) {
|
| }
|
|
|
| // static
|
| -OperandSize BytecodeArrayBuilder::SizeForRegisterOperand(Register value) {
|
| - if (value.is_byte_operand()) {
|
| - return OperandSize::kByte;
|
| - } else if (value.is_short_operand()) {
|
| - return OperandSize::kShort;
|
| - } else {
|
| - return OperandSize::kQuad;
|
| - }
|
| -}
|
| -
|
| -// static
|
| OperandSize BytecodeArrayBuilder::SizeForSignedOperand(int value) {
|
| if (kMinInt8 <= value && value <= kMaxInt8) {
|
| return OperandSize::kByte;
|
|
|