| Index: src/interpreter/bytecode-array-builder.cc
|
| diff --git a/src/interpreter/bytecode-array-builder.cc b/src/interpreter/bytecode-array-builder.cc
|
| index 9c937d74370d3cde35fcb47caa36239d048b6137..6b046d35eb4abd7cc4cbb749272028af10925a13 100644
|
| --- a/src/interpreter/bytecode-array-builder.cc
|
| +++ b/src/interpreter/bytecode-array-builder.cc
|
| @@ -161,7 +161,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadLiteral(
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::LoadLiteral(Handle<Object> object) {
|
| size_t entry = GetConstantPoolEntry(object);
|
| - if (FitsInIdxOperand(entry)) {
|
| + if (FitsInIdx8Operand(entry)) {
|
| Output(Bytecode::kLdaConstant, static_cast<uint8_t>(entry));
|
| } else {
|
| UNIMPLEMENTED();
|
| @@ -216,7 +216,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreAccumulatorInRegister(
|
|
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::LoadGlobal(int slot_index) {
|
| DCHECK(slot_index >= 0);
|
| - if (FitsInIdxOperand(slot_index)) {
|
| + if (FitsInIdx8Operand(slot_index)) {
|
| Output(Bytecode::kLdaGlobal, static_cast<uint8_t>(slot_index));
|
| } else {
|
| UNIMPLEMENTED();
|
| @@ -230,7 +230,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty(
|
| UNIMPLEMENTED();
|
| }
|
|
|
| - if (FitsInIdxOperand(feedback_slot)) {
|
| + if (FitsInIdx8Operand(feedback_slot)) {
|
| Output(Bytecode::kLoadIC, object.ToOperand(),
|
| static_cast<uint8_t>(feedback_slot));
|
| } else {
|
| @@ -246,7 +246,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadKeyedProperty(
|
| UNIMPLEMENTED();
|
| }
|
|
|
| - if (FitsInIdxOperand(feedback_slot)) {
|
| + if (FitsInIdx8Operand(feedback_slot)) {
|
| Output(Bytecode::kKeyedLoadIC, object.ToOperand(),
|
| static_cast<uint8_t>(feedback_slot));
|
| } else {
|
| @@ -263,7 +263,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreNamedProperty(
|
| UNIMPLEMENTED();
|
| }
|
|
|
| - if (FitsInIdxOperand(feedback_slot)) {
|
| + if (FitsInIdx8Operand(feedback_slot)) {
|
| Output(Bytecode::kStoreIC, object.ToOperand(), name.ToOperand(),
|
| static_cast<uint8_t>(feedback_slot));
|
| } else {
|
| @@ -280,7 +280,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreKeyedProperty(
|
| UNIMPLEMENTED();
|
| }
|
|
|
| - if (FitsInIdxOperand(feedback_slot)) {
|
| + if (FitsInIdx8Operand(feedback_slot)) {
|
| Output(Bytecode::kKeyedStoreIC, object.ToOperand(), key.ToOperand(),
|
| static_cast<uint8_t>(feedback_slot));
|
| } else {
|
| @@ -376,7 +376,7 @@ void BytecodeArrayBuilder::PatchJump(
|
| } else {
|
| // Update the jump type and operand
|
| size_t entry = GetConstantPoolEntry(handle(Smi::FromInt(delta), isolate()));
|
| - if (FitsInIdxOperand(entry)) {
|
| + if (FitsInIdx8Operand(entry)) {
|
| jump_bytecode = GetJumpWithConstantOperand(jump_bytecode);
|
| *jump_location++ = Bytecodes::ToByte(jump_bytecode);
|
| *jump_location = static_cast<uint8_t>(entry);
|
| @@ -414,7 +414,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::OutputJump(Bytecode jump_bytecode,
|
| Output(jump_bytecode, static_cast<uint8_t>(delta));
|
| } else {
|
| size_t entry = GetConstantPoolEntry(handle(Smi::FromInt(delta), isolate()));
|
| - if (FitsInIdxOperand(entry)) {
|
| + if (FitsInIdx8Operand(entry)) {
|
| Output(GetJumpWithConstantOperand(jump_bytecode),
|
| static_cast<uint8_t>(entry));
|
| } else {
|
| @@ -467,7 +467,7 @@ void BytecodeArrayBuilder::EnsureReturn() {
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::Call(Register callable,
|
| Register receiver,
|
| size_t arg_count) {
|
| - if (FitsInIdxOperand(arg_count)) {
|
| + if (FitsInIdx8Operand(arg_count)) {
|
| Output(Bytecode::kCall, callable.ToOperand(), receiver.ToOperand(),
|
| static_cast<uint8_t>(arg_count));
|
| } else {
|
| @@ -477,6 +477,16 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::Call(Register callable,
|
| }
|
|
|
|
|
| +BytecodeArrayBuilder& BytecodeArrayBuilder::CallRuntime(
|
| + Runtime::FunctionId function_id, Register first_arg, size_t arg_count) {
|
| + DCHECK(FitsInIdx16Operand(function_id));
|
| + DCHECK(FitsInIdx8Operand(arg_count));
|
| + Output(Bytecode::kCallRuntime, static_cast<uint16_t>(function_id),
|
| + first_arg.ToOperand(), static_cast<uint8_t>(arg_count));
|
| + return *this;
|
| +}
|
| +
|
| +
|
| size_t BytecodeArrayBuilder::GetConstantPoolEntry(Handle<Object> object) {
|
| // These constants shouldn't be added to the constant pool, the should use
|
| // specialzed bytecodes instead.
|
| @@ -597,13 +607,13 @@ Bytecode BytecodeArrayBuilder::BytecodeForCompareOperation(Token::Value op) {
|
|
|
|
|
| // static
|
| -bool BytecodeArrayBuilder::FitsInIdxOperand(int value) {
|
| +bool BytecodeArrayBuilder::FitsInIdx8Operand(int value) {
|
| return kMinUInt8 <= value && value <= kMaxUInt8;
|
| }
|
|
|
|
|
| // static
|
| -bool BytecodeArrayBuilder::FitsInIdxOperand(size_t value) {
|
| +bool BytecodeArrayBuilder::FitsInIdx8Operand(size_t value) {
|
| return value <= static_cast<size_t>(kMaxUInt8);
|
| }
|
|
|
| @@ -614,6 +624,12 @@ bool BytecodeArrayBuilder::FitsInImm8Operand(int value) {
|
| }
|
|
|
|
|
| +// static
|
| +bool BytecodeArrayBuilder::FitsInIdx16Operand(int value) {
|
| + return kMinUInt16 <= value && value <= kMaxUInt16;
|
| +}
|
| +
|
| +
|
| TemporaryRegisterScope::TemporaryRegisterScope(BytecodeArrayBuilder* builder)
|
| : builder_(builder), count_(0), last_register_index_(-1) {}
|
|
|
|
|