[vm/bytecode] Cleanup support for bytecode formats older than v7
Bytecode format v7 was introduced 2019 May 08,
in 68de4775351d0e3e1ec8b5860068733c342f7f4e.
Change-Id: I79d94f7153d66d418088707c3658d928a3ec41ad
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106969
Reviewed-by: RĂ©gis Crelier <regis@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
diff --git a/pkg/vm/lib/bytecode/dbc.dart b/pkg/vm/lib/bytecode/dbc.dart
index 6cb296f..2c9f9c1 100644
--- a/pkg/vm/lib/bytecode/dbc.dart
+++ b/pkg/vm/lib/bytecode/dbc.dart
@@ -13,127 +13,91 @@
const int currentBytecodeFormatVersion = 11;
enum Opcode {
- // Old instructions, used before bytecode v7.
- // TODO(alexmarkov): remove
-
- kTrap_Old,
-
- // Prologue and stack management.
- kEntry_Old,
- kEntryFixed_Old,
- kEntryOptional_Old,
- kLoadConstant_Old,
- kFrame_Old,
- kCheckFunctionTypeArgs_Old,
- kCheckStack_Old,
-
- // Object allocation.
- kAllocate_Old,
- kAllocateT_Old,
- kCreateArrayTOS_Old,
-
- // Context allocation and access.
- kAllocateContext_Old,
- kCloneContext_Old,
- kLoadContextParent_Old,
- kStoreContextParent_Old,
- kLoadContextVar_Old,
- kStoreContextVar_Old,
-
- // Constants.
- kPushConstant_Old,
- kPushNull_Old,
- kPushTrue_Old,
- kPushFalse_Old,
- kPushInt_Old,
-
- // Locals and expression stack.
- kDrop1_Old,
- kPush_Old,
- kPopLocal_Old,
- kStoreLocal_Old,
-
- // Instance fields and arrays.
- kLoadFieldTOS_Old,
- kStoreFieldTOS_Old,
- kStoreIndexedTOS_Old,
-
- // Static fields.
- kPushStatic_Old,
- kStoreStaticTOS_Old,
-
- // Jumps.
- kJump_Old,
- kJumpIfNoAsserts_Old,
- kJumpIfNotZeroTypeArgs_Old,
- kJumpIfEqStrict_Old,
- kJumpIfNeStrict_Old,
- kJumpIfTrue_Old,
- kJumpIfFalse_Old,
- kJumpIfNull_Old,
- kJumpIfNotNull_Old,
-
- // Calls.
- kUnused00_Old,
- kInterfaceCall_Old,
- kDynamicCall_Old,
- kNativeCall_Old,
- kReturnTOS_Old,
-
- // Types and type checks.
- kAssertAssignable_Old,
- kAssertBoolean_Old,
- kAssertSubtype_Old,
- kLoadTypeArgumentsField_Old,
- kInstantiateType_Old,
- kInstantiateTypeArgumentsTOS_Old,
-
- // Exception handling.
- kThrow_Old,
- kMoveSpecial_Old,
- kSetFrame_Old,
-
- // Bool operations.
- kBooleanNegateTOS_Old,
-
- // Null operations.
- kEqualsNull_Old,
-
- // Int operations.
- kNegateInt_Old,
- kAddInt_Old,
- kSubInt_Old,
- kMulInt_Old,
- kTruncDivInt_Old,
- kModInt_Old,
- kBitAndInt_Old,
- kBitOrInt_Old,
- kBitXorInt_Old,
- kShlInt_Old,
- kShrInt_Old,
- kCompareIntEq_Old,
- kCompareIntGt_Old,
- kCompareIntLt_Old,
- kCompareIntGe_Old,
- kCompareIntLe_Old,
-
- kDirectCall_Old,
-
- kAllocateClosure_Old,
-
- kUncheckedInterfaceCall_Old,
-
- // Double operations.
- kNegateDouble_Old,
- kAddDouble_Old,
- kSubDouble_Old,
- kMulDouble_Old,
- kDivDouble_Old,
- kCompareDoubleEq_Old,
- kCompareDoubleGt_Old,
- kCompareDoubleLt_Old,
- kCompareDoubleGe_Old,
- kCompareDoubleLe_Old,
+ kUnusedOpcode000,
+ kUnusedOpcode001,
+ kUnusedOpcode002,
+ kUnusedOpcode003,
+ kUnusedOpcode004,
+ kUnusedOpcode005,
+ kUnusedOpcode006,
+ kUnusedOpcode007,
+ kUnusedOpcode008,
+ kUnusedOpcode009,
+ kUnusedOpcode010,
+ kUnusedOpcode011,
+ kUnusedOpcode012,
+ kUnusedOpcode013,
+ kUnusedOpcode014,
+ kUnusedOpcode015,
+ kUnusedOpcode016,
+ kUnusedOpcode017,
+ kUnusedOpcode018,
+ kUnusedOpcode019,
+ kUnusedOpcode020,
+ kUnusedOpcode021,
+ kUnusedOpcode022,
+ kUnusedOpcode023,
+ kUnusedOpcode024,
+ kUnusedOpcode025,
+ kUnusedOpcode026,
+ kUnusedOpcode027,
+ kUnusedOpcode028,
+ kUnusedOpcode029,
+ kUnusedOpcode030,
+ kUnusedOpcode031,
+ kUnusedOpcode032,
+ kUnusedOpcode033,
+ kUnusedOpcode034,
+ kUnusedOpcode035,
+ kUnusedOpcode036,
+ kUnusedOpcode037,
+ kUnusedOpcode038,
+ kUnusedOpcode039,
+ kUnusedOpcode040,
+ kUnusedOpcode041,
+ kUnusedOpcode042,
+ kUnusedOpcode043,
+ kUnusedOpcode044,
+ kUnusedOpcode045,
+ kUnusedOpcode046,
+ kUnusedOpcode047,
+ kUnusedOpcode048,
+ kUnusedOpcode049,
+ kUnusedOpcode050,
+ kUnusedOpcode051,
+ kUnusedOpcode052,
+ kUnusedOpcode053,
+ kUnusedOpcode054,
+ kUnusedOpcode055,
+ kUnusedOpcode056,
+ kUnusedOpcode057,
+ kUnusedOpcode058,
+ kUnusedOpcode059,
+ kUnusedOpcode060,
+ kUnusedOpcode061,
+ kUnusedOpcode062,
+ kUnusedOpcode063,
+ kUnusedOpcode064,
+ kUnusedOpcode065,
+ kUnusedOpcode066,
+ kUnusedOpcode067,
+ kUnusedOpcode068,
+ kUnusedOpcode069,
+ kUnusedOpcode070,
+ kUnusedOpcode071,
+ kUnusedOpcode072,
+ kUnusedOpcode073,
+ kUnusedOpcode074,
+ kUnusedOpcode075,
+ kUnusedOpcode076,
+ kUnusedOpcode077,
+ kUnusedOpcode078,
+ kUnusedOpcode079,
+ kUnusedOpcode080,
+ kUnusedOpcode081,
+ kUnusedOpcode082,
+ kUnusedOpcode083,
+ kUnusedOpcode084,
// Bytecode instructions since bytecode format v7:
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index 612604f..78c8eb0 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -8,7 +8,6 @@
#include "vm/bootstrap.h"
#include "vm/class_id.h"
#include "vm/compiler/backend/code_statistics.h"
-#include "vm/compiler/frontend/bytecode_reader.h"
#include "vm/compiler/relocation.h"
#include "vm/dart.h"
#include "vm/heap/heap.h"
@@ -1358,14 +1357,6 @@
info.set_libraries_cache(array);
array = HashTables::New<UnorderedHashMap<SmiTraits>>(16, Heap::kOld);
info.set_classes_cache(array);
-
- static_assert(KernelBytecode::kMinSupportedBytecodeFormatVersion < 7,
- "Cleanup support for old bytecode format versions");
- array = info.bytecode_component();
- if (!array.IsNull()) {
- kernel::BytecodeReader::UseBytecodeVersion(
- kernel::BytecodeComponentData(&array).GetVersion());
- }
}
}
};
diff --git a/runtime/vm/compiler/assembler/disassembler_kbc.cc b/runtime/vm/compiler/assembler/disassembler_kbc.cc
index edd8506..452675f 100644
--- a/runtime/vm/compiler/assembler/disassembler_kbc.cc
+++ b/runtime/vm/compiler/assembler/disassembler_kbc.cc
@@ -160,32 +160,6 @@
Apply(&buf, &size, instr, op1, x, "");
}
-static void FormatA_D(char* buf,
- intptr_t size,
- KernelBytecode::Opcode opcode,
- const KBCInstr* instr,
- Fmt op1,
- Fmt op2,
- Fmt op3) {
- const int32_t a = KernelBytecode::DecodeA(instr);
- const int32_t bc = KernelBytecode::DecodeD(instr);
- Apply(&buf, &size, instr, op1, a, ", ");
- Apply(&buf, &size, instr, op2, bc, "");
-}
-
-static void FormatA_X(char* buf,
- intptr_t size,
- KernelBytecode::Opcode opcode,
- const KBCInstr* instr,
- Fmt op1,
- Fmt op2,
- Fmt op3) {
- const int32_t a = KernelBytecode::DecodeA(instr);
- const int32_t bc = KernelBytecode::DecodeX(instr);
- Apply(&buf, &size, instr, op1, a, ", ");
- Apply(&buf, &size, instr, op2, bc, "");
-}
-
static void FormatA_E(char* buf,
intptr_t size,
KernelBytecode::Opcode opcode,
@@ -257,21 +231,6 @@
static intptr_t GetConstantPoolIndex(const KBCInstr* instr) {
switch (KernelBytecode::DecodeOpcode(instr)) {
- case KernelBytecode::kLoadConstant_Old:
- case KernelBytecode::kInstantiateTypeArgumentsTOS_Old:
- case KernelBytecode::kAssertAssignable_Old:
- case KernelBytecode::kPushConstant_Old:
- case KernelBytecode::kStoreStaticTOS_Old:
- case KernelBytecode::kPushStatic_Old:
- case KernelBytecode::kAllocate_Old:
- case KernelBytecode::kAllocateClosure_Old:
- case KernelBytecode::kInstantiateType_Old:
- case KernelBytecode::kDirectCall_Old:
- case KernelBytecode::kInterfaceCall_Old:
- case KernelBytecode::kUncheckedInterfaceCall_Old:
- case KernelBytecode::kDynamicCall_Old:
- return KernelBytecode::DecodeD(instr);
-
case KernelBytecode::kLoadConstant:
case KernelBytecode::kLoadConstant_Wide:
case KernelBytecode::kInstantiateTypeArgumentsTOS:
diff --git a/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc b/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc
index fd2dd5d..beda583 100644
--- a/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/bytecode_flow_graph_builder.cc
@@ -388,12 +388,10 @@
#define BUILD_BYTECODE_CASE(name, encoding, kind, op1, op2, op3) \
BUILD_BYTECODE_CASE_##kind(name, encoding)
-#define BUILD_BYTECODE_CASE_OLD(name, encoding)
#define BUILD_BYTECODE_CASE_WIDE(name, encoding)
#define BUILD_BYTECODE_CASE_RESV(name, encoding)
#define BUILD_BYTECODE_CASE_ORDN(name, encoding) \
case KernelBytecode::k##name: \
- case KernelBytecode::k##name##_Old: \
WIDE_CASE_##encoding(name) Build##name(); \
break;
@@ -410,7 +408,6 @@
#undef WIDE_CASE_D_F
#undef WIDE_CASE_A_B_C
#undef BUILD_BYTECODE_CASE
-#undef BUILD_BYTECODE_CASE_OLD
#undef BUILD_BYTECODE_CASE_WIDE
#undef BUILD_BYTECODE_CASE_RESV
#undef BUILD_BYTECODE_CASE_ORDN
@@ -1804,16 +1801,13 @@
bool BytecodeFlowGraphBuilder::RequiresScratchVar(const KBCInstr* instr) {
switch (KernelBytecode::DecodeOpcode(instr)) {
case KernelBytecode::kEntryOptional:
- case KernelBytecode::kEntryOptional_Old:
return KernelBytecode::DecodeC(instr) > 0;
case KernelBytecode::kEqualsNull:
- case KernelBytecode::kEqualsNull_Old:
return true;
case KernelBytecode::kNativeCall:
case KernelBytecode::kNativeCall_Wide:
- case KernelBytecode::kNativeCall_Old:
return MethodRecognizer::RecognizeKind(function()) ==
MethodRecognizer::kListFactory;
diff --git a/runtime/vm/compiler/frontend/bytecode_reader.cc b/runtime/vm/compiler/frontend/bytecode_reader.cc
index c7f1d7a..d332a70 100644
--- a/runtime/vm/compiler/frontend/bytecode_reader.cc
+++ b/runtime/vm/compiler/frontend/bytecode_reader.cc
@@ -825,15 +825,8 @@
TIMELINE_DURATION(Thread::Current(), CompilerVerbose,
"BytecodeReaderHelper::ReadBytecode");
#endif // defined(SUPPORT_TIMELINE)
- intptr_t size = reader_.ReadUInt();
- intptr_t offset = reader_.offset();
-
- static_assert(KernelBytecode::kMinSupportedBytecodeFormatVersion < 7,
- "Cleanup support for old bytecode format versions");
- if (bytecode_component_->GetVersion() < 7) {
- const intptr_t kAlignment = 4;
- offset = Utils::RoundUp(offset, kAlignment);
- }
+ const intptr_t size = reader_.ReadUInt();
+ const intptr_t offset = reader_.offset();
const uint8_t* data = reader_.BufferAt(offset);
reader_.set_offset(offset + size);
@@ -859,10 +852,6 @@
ExceptionHandlerList* exception_handlers_list =
new (Z) ExceptionHandlerList();
- static_assert(KernelBytecode::kMinSupportedBytecodeFormatVersion < 7,
- "Cleanup support for old bytecode format versions");
- const int kPCShifter = (bytecode_component_->GetVersion() < 7) ? 2 : 0;
-
// Encoding of ExceptionsTable is described in
// pkg/vm/lib/bytecode/exceptions.dart.
for (intptr_t try_index = 0; try_index < try_block_count; try_index++) {
@@ -870,13 +859,13 @@
intptr_t outer_try_index = outer_try_index_plus1 - 1;
// PcDescriptors are expressed in terms of return addresses.
intptr_t start_pc =
- KernelBytecode::BytecodePcToOffset(reader_.ReadUInt() << kPCShifter,
+ KernelBytecode::BytecodePcToOffset(reader_.ReadUInt(),
/* is_return_address = */ true);
intptr_t end_pc =
- KernelBytecode::BytecodePcToOffset(reader_.ReadUInt() << kPCShifter,
+ KernelBytecode::BytecodePcToOffset(reader_.ReadUInt(),
/* is_return_address = */ true);
intptr_t handler_pc =
- KernelBytecode::BytecodePcToOffset(reader_.ReadUInt() << kPCShifter,
+ KernelBytecode::BytecodePcToOffset(reader_.ReadUInt(),
/* is_return_address = */ false);
uint8_t flags = reader_.ReadByte();
const uint8_t kFlagNeedsStackTrace = 1 << 0;
@@ -1031,7 +1020,6 @@
version, KernelBytecode::kMinSupportedBytecodeFormatVersion,
KernelBytecode::kMaxSupportedBytecodeFormatVersion);
}
- BytecodeReader::UseBytecodeVersion(version);
reader_.ReadUInt32(); // Skip stringTable.numItems
const intptr_t string_table_offset = start_offset + reader_.ReadUInt32();
@@ -3148,28 +3136,6 @@
}
#endif // !defined(PRODUCT)
-static_assert(KernelBytecode::kMinSupportedBytecodeFormatVersion < 7,
- "Cleanup support for old bytecode format versions");
-void BytecodeReader::UseBytecodeVersion(intptr_t version) {
- Isolate* isolate = Isolate::Current();
- bool using_old = isolate->is_using_old_bytecode_instructions();
- bool using_new = isolate->is_using_new_bytecode_instructions();
- if (version < 7) {
- using_old = true;
- isolate->set_is_using_old_bytecode_instructions(true);
- } else {
- using_new = true;
- isolate->set_is_using_new_bytecode_instructions(true);
- }
-
- if (using_old && using_new) {
- FATAL1(
- "Unable to use both new and old bytecode instructions in the same Dart "
- "isolate (%s)",
- isolate->name());
- }
-}
-
bool IsStaticFieldGetterGeneratedAsInitializer(const Function& function,
Zone* zone) {
ASSERT(function.kind() == RawFunction::kImplicitStaticGetter);
diff --git a/runtime/vm/compiler/frontend/bytecode_reader.h b/runtime/vm/compiler/frontend/bytecode_reader.h
index 1a8440c..6ad9400 100644
--- a/runtime/vm/compiler/frontend/bytecode_reader.h
+++ b/runtime/vm/compiler/frontend/bytecode_reader.h
@@ -326,8 +326,6 @@
const Function& function,
const Bytecode& bytecode);
#endif
-
- static void UseBytecodeVersion(intptr_t version);
};
class BytecodeSourcePositionsIterator : ValueObject {
@@ -337,9 +335,6 @@
if (bytecode.HasSourcePositions()) {
reader_.set_offset(bytecode.source_positions_binary_offset());
pairs_remaining_ = reader_.ReadUInt();
- if (Isolate::Current()->is_using_old_bytecode_instructions()) {
- pc_shifter_ = 2;
- }
}
}
@@ -349,7 +344,7 @@
}
ASSERT(pairs_remaining_ > 0);
--pairs_remaining_;
- cur_bci_ += reader_.ReadUInt() << pc_shifter_;
+ cur_bci_ += reader_.ReadUInt();
cur_token_pos_ += reader_.ReadSLEB128();
return true;
}
@@ -361,7 +356,6 @@
private:
Reader reader_;
intptr_t pairs_remaining_ = 0;
- intptr_t pc_shifter_ = 0;
intptr_t cur_bci_ = 0;
intptr_t cur_token_pos_ = 0;
};
diff --git a/runtime/vm/constants_kbc.cc b/runtime/vm/constants_kbc.cc
index d5ed600..adbe0421 100644
--- a/runtime/vm/constants_kbc.cc
+++ b/runtime/vm/constants_kbc.cc
@@ -7,10 +7,6 @@
namespace dart {
-static_assert(KernelBytecode::kMinSupportedBytecodeFormatVersion < 7,
- "Cleanup support for old bytecode format versions");
-static const intptr_t kOldInstructionSize = 4;
-
static const intptr_t kInstructionSize0 = 1;
static const intptr_t kInstructionSizeA = 2;
static const intptr_t kInstructionSizeD = 2;
@@ -28,13 +24,11 @@
static const intptr_t kInstructionSizeA_B_C = 4;
const intptr_t KernelBytecode::kInstructionSize[] = {
-#define SIZE_OLD(encoding) kOldInstructionSize
#define SIZE_ORDN(encoding) kInstructionSize##encoding
#define SIZE_WIDE(encoding) kInstructionSizeWide##encoding
#define SIZE_RESV(encoding) SIZE_ORDN(encoding)
#define SIZE(name, encoding, kind, op1, op2, op3) SIZE_##kind(encoding),
KERNEL_BYTECODES_LIST(SIZE)
-#undef SIZE_OLD
#undef SIZE_ORDN
#undef SIZE_WIDE
#undef SIZE_RESV
diff --git a/runtime/vm/constants_kbc.h b/runtime/vm/constants_kbc.h
index caac3a1..e3ed9e6 100644
--- a/runtime/vm/constants_kbc.h
+++ b/runtime/vm/constants_kbc.h
@@ -453,9 +453,9 @@
// V(BytecodeName, OperandForm, BytecodeKind, Op1, Op2, Op3)
//
// - OperandForm specifies operand encoding and should be one of 0, A, D, X, T,
-// A_D (old), A_X (old), A_E, A_Y, D_F or A_B_C (see ENCODING section above).
+// A_E, A_Y, D_F or A_B_C (see ENCODING section above).
//
-// - BytecodeKind is one of OLD, WIDE, RESV (reserved), ORDN (ordinary)
+// - BytecodeKind is one of WIDE, RESV (reserved), ORDN (ordinary)
//
// - Op1, Op2, Op3 specify operand meaning. Possible values:
//
@@ -471,91 +471,91 @@
// and before decoding.
//
#define PUBLIC_KERNEL_BYTECODES_LIST(V) \
- V(Trap_Old, 0, OLD, ___, ___, ___) \
- V(Entry_Old, D, OLD, num, ___, ___) \
- V(EntryFixed_Old, A_D, OLD, num, num, ___) \
- V(EntryOptional_Old, A_B_C, OLD, num, num, num) \
- V(LoadConstant_Old, A_D, OLD, reg, lit, ___) \
- V(Frame_Old, D, OLD, num, ___, ___) \
- V(CheckFunctionTypeArgs_Old, A_D, OLD, num, reg, ___) \
- V(CheckStack_Old, A, OLD, num, ___, ___) \
- V(Allocate_Old, D, OLD, lit, ___, ___) \
- V(AllocateT_Old, 0, OLD, ___, ___, ___) \
- V(CreateArrayTOS_Old, 0, OLD, ___, ___, ___) \
- V(AllocateContext_Old, D, OLD, num, ___, ___) \
- V(CloneContext_Old, D, OLD, num, ___, ___) \
- V(LoadContextParent_Old, 0, OLD, ___, ___, ___) \
- V(StoreContextParent_Old, 0, OLD, ___, ___, ___) \
- V(LoadContextVar_Old, D, OLD, num, ___, ___) \
- V(StoreContextVar_Old, D, OLD, num, ___, ___) \
- V(PushConstant_Old, D, OLD, lit, ___, ___) \
- V(PushNull_Old, 0, OLD, ___, ___, ___) \
- V(PushTrue_Old, 0, OLD, ___, ___, ___) \
- V(PushFalse_Old, 0, OLD, ___, ___, ___) \
- V(PushInt_Old, X, OLD, num, ___, ___) \
- V(Drop1_Old, 0, OLD, ___, ___, ___) \
- V(Push_Old, X, OLD, xeg, ___, ___) \
- V(PopLocal_Old, X, OLD, xeg, ___, ___) \
- V(StoreLocal_Old, X, OLD, xeg, ___, ___) \
- V(LoadFieldTOS_Old, D, OLD, lit, ___, ___) \
- V(StoreFieldTOS_Old, D, OLD, lit, ___, ___) \
- V(StoreIndexedTOS_Old, 0, OLD, ___, ___, ___) \
- V(PushStatic_Old, D, OLD, lit, ___, ___) \
- V(StoreStaticTOS_Old, D, OLD, lit, ___, ___) \
- V(Jump_Old, T, OLD, tgt, ___, ___) \
- V(JumpIfNoAsserts_Old, T, OLD, tgt, ___, ___) \
- V(JumpIfNotZeroTypeArgs_Old, T, OLD, tgt, ___, ___) \
- V(JumpIfEqStrict_Old, T, OLD, tgt, ___, ___) \
- V(JumpIfNeStrict_Old, T, OLD, tgt, ___, ___) \
- V(JumpIfTrue_Old, T, OLD, tgt, ___, ___) \
- V(JumpIfFalse_Old, T, OLD, tgt, ___, ___) \
- V(JumpIfNull_Old, T, OLD, tgt, ___, ___) \
- V(JumpIfNotNull_Old, T, OLD, tgt, ___, ___) \
- V(Unused00_Old, 0, RESV, num, num, ___) \
- V(InterfaceCall_Old, A_D, OLD, num, num, ___) \
- V(DynamicCall_Old, A_D, OLD, num, num, ___) \
- V(NativeCall_Old, D, OLD, lit, ___, ___) \
- V(ReturnTOS_Old, 0, OLD, ___, ___, ___) \
- V(AssertAssignable_Old, A_D, OLD, num, lit, ___) \
- V(AssertBoolean_Old, A, OLD, num, ___, ___) \
- V(AssertSubtype_Old, 0, OLD, ___, ___, ___) \
- V(LoadTypeArgumentsField_Old, D, OLD, lit, ___, ___) \
- V(InstantiateType_Old, D, OLD, lit, ___, ___) \
- V(InstantiateTypeArgumentsTOS_Old, A_D, OLD, num, lit, ___) \
- V(Throw_Old, A, OLD, num, ___, ___) \
- V(MoveSpecial_Old, A_X, OLD, num, xeg, ___) \
- V(SetFrame_Old, A, OLD, num, ___, num) \
- V(BooleanNegateTOS_Old, 0, OLD, ___, ___, ___) \
- V(EqualsNull_Old, 0, OLD, ___, ___, ___) \
- V(NegateInt_Old, 0, OLD, ___, ___, ___) \
- V(AddInt_Old, 0, OLD, ___, ___, ___) \
- V(SubInt_Old, 0, OLD, ___, ___, ___) \
- V(MulInt_Old, 0, OLD, ___, ___, ___) \
- V(TruncDivInt_Old, 0, OLD, ___, ___, ___) \
- V(ModInt_Old, 0, OLD, ___, ___, ___) \
- V(BitAndInt_Old, 0, OLD, ___, ___, ___) \
- V(BitOrInt_Old, 0, OLD, ___, ___, ___) \
- V(BitXorInt_Old, 0, OLD, ___, ___, ___) \
- V(ShlInt_Old, 0, OLD, ___, ___, ___) \
- V(ShrInt_Old, 0, OLD, ___, ___, ___) \
- V(CompareIntEq_Old, 0, OLD, ___, ___, ___) \
- V(CompareIntGt_Old, 0, OLD, ___, ___, ___) \
- V(CompareIntLt_Old, 0, OLD, ___, ___, ___) \
- V(CompareIntGe_Old, 0, OLD, ___, ___, ___) \
- V(CompareIntLe_Old, 0, OLD, ___, ___, ___) \
- V(DirectCall_Old, A_D, OLD, num, num, ___) \
- V(AllocateClosure_Old, D, OLD, lit, ___, ___) \
- V(UncheckedInterfaceCall_Old, A_D, OLD, num, num, ___) \
- V(NegateDouble_Old, 0, OLD, ___, ___, ___) \
- V(AddDouble_Old, 0, OLD, ___, ___, ___) \
- V(SubDouble_Old, 0, OLD, ___, ___, ___) \
- V(MulDouble_Old, 0, OLD, ___, ___, ___) \
- V(DivDouble_Old, 0, OLD, ___, ___, ___) \
- V(CompareDoubleEq_Old, 0, OLD, ___, ___, ___) \
- V(CompareDoubleGt_Old, 0, OLD, ___, ___, ___) \
- V(CompareDoubleLt_Old, 0, OLD, ___, ___, ___) \
- V(CompareDoubleGe_Old, 0, OLD, ___, ___, ___) \
- V(CompareDoubleLe_Old, 0, OLD, ___, ___, ___) \
+ V(UnusedOpcode000, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode001, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode002, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode003, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode004, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode005, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode006, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode007, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode008, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode009, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode010, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode011, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode012, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode013, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode014, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode015, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode016, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode017, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode018, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode019, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode020, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode021, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode022, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode023, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode024, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode025, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode026, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode027, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode028, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode029, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode030, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode031, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode032, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode033, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode034, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode035, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode036, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode037, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode038, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode039, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode040, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode041, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode042, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode043, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode044, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode045, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode046, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode047, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode048, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode049, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode050, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode051, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode052, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode053, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode054, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode055, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode056, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode057, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode058, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode059, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode060, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode061, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode062, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode063, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode064, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode065, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode066, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode067, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode068, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode069, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode070, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode071, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode072, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode073, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode074, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode075, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode076, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode077, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode078, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode079, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode080, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode081, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode082, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode083, 0, RESV, ___, ___, ___) \
+ V(UnusedOpcode084, 0, RESV, ___, ___, ___) \
V(Trap, 0, ORDN, ___, ___, ___) \
V(Entry, D, ORDN, num, ___, ___) \
V(Entry_Wide, D, WIDE, num, ___, ___) \
@@ -745,7 +745,7 @@
// Magic value of bytecode files.
static const intptr_t kMagicValue = 0x44424332; // 'DBC2'
// Minimum bytecode format version supported by VM.
- static const intptr_t kMinSupportedBytecodeFormatVersion = 3;
+ static const intptr_t kMinSupportedBytecodeFormatVersion = 7;
// Maximum bytecode format version supported by VM.
// The range of supported versions should include version produced by bytecode
// generator (currentBytecodeFormatVersion in pkg/vm/lib/bytecode/dbc.dart).
@@ -777,12 +777,6 @@
private:
static const intptr_t kWideModifier = 1;
- static_assert(kMinSupportedBytecodeFormatVersion < 7,
- "Cleanup support for old bytecode format versions");
- DART_FORCE_INLINE static bool IsOld(const KBCInstr* instr) {
- return DecodeOpcode(instr) < kTrap;
- }
-
// Should be used only on instructions with wide variants.
DART_FORCE_INLINE static bool IsWide(const KBCInstr* instr) {
return ((DecodeOpcode(instr) & kWideModifier) != 0);
@@ -796,9 +790,7 @@
DART_FORCE_INLINE static uint8_t DecodeC(const KBCInstr* bc) { return bc[3]; }
DART_FORCE_INLINE static uint32_t DecodeD(const KBCInstr* bc) {
- if (IsOld(bc)) {
- return static_cast<uint16_t>(bc[2]) | (static_cast<uint16_t>(bc[3]) << 8);
- } else if (IsWide(bc)) {
+ if (IsWide(bc)) {
return static_cast<uint32_t>(bc[1]) |
(static_cast<uint32_t>(bc[2]) << 8) |
(static_cast<uint32_t>(bc[3]) << 16) |
@@ -809,10 +801,7 @@
}
DART_FORCE_INLINE static int32_t DecodeX(const KBCInstr* bc) {
- if (IsOld(bc)) {
- return static_cast<int16_t>(static_cast<uint16_t>(bc[2]) |
- (static_cast<uint16_t>(bc[3]) << 8));
- } else if (IsWide(bc)) {
+ if (IsWide(bc)) {
return static_cast<int32_t>(static_cast<uint32_t>(bc[1]) |
(static_cast<uint32_t>(bc[2]) << 8) |
(static_cast<uint32_t>(bc[3]) << 16) |
@@ -823,12 +812,7 @@
}
DART_FORCE_INLINE static int32_t DecodeT(const KBCInstr* bc) {
- if (IsOld(bc)) {
- return static_cast<int32_t>((static_cast<uint32_t>(bc[1]) << 8) |
- (static_cast<uint32_t>(bc[2]) << 16) |
- (static_cast<uint32_t>(bc[3]) << 24)) >>
- (8 - 2);
- } else if (IsWide(bc)) {
+ if (IsWide(bc)) {
return static_cast<int32_t>((static_cast<uint32_t>(bc[1]) << 8) |
(static_cast<uint32_t>(bc[2]) << 16) |
(static_cast<uint32_t>(bc[3]) << 24)) >>
@@ -839,9 +823,7 @@
}
DART_FORCE_INLINE static uint32_t DecodeE(const KBCInstr* bc) {
- if (IsOld(bc)) {
- return static_cast<uint16_t>(bc[2]) | (static_cast<uint16_t>(bc[3]) << 8);
- } else if (IsWide(bc)) {
+ if (IsWide(bc)) {
return static_cast<uint32_t>(bc[2]) |
(static_cast<uint32_t>(bc[3]) << 8) |
(static_cast<uint32_t>(bc[4]) << 16) |
@@ -852,10 +834,7 @@
}
DART_FORCE_INLINE static int32_t DecodeY(const KBCInstr* bc) {
- if (IsOld(bc)) {
- return static_cast<int16_t>(static_cast<uint16_t>(bc[2]) |
- (static_cast<uint16_t>(bc[3]) << 8));
- } else if (IsWide(bc)) {
+ if (IsWide(bc)) {
return static_cast<int32_t>(static_cast<uint32_t>(bc[2]) |
(static_cast<uint32_t>(bc[3]) << 8) |
(static_cast<uint32_t>(bc[4]) << 16) |
@@ -866,9 +845,7 @@
}
DART_FORCE_INLINE static uint8_t DecodeF(const KBCInstr* bc) {
- if (IsOld(bc)) {
- return bc[1];
- } else if (IsWide(bc)) {
+ if (IsWide(bc)) {
return bc[5];
} else {
return bc[2];
@@ -885,15 +862,6 @@
DART_FORCE_INLINE static bool IsJumpOpcode(const KBCInstr* instr) {
switch (DecodeOpcode(instr)) {
- case KernelBytecode::kJump_Old:
- case KernelBytecode::kJumpIfNoAsserts_Old:
- case KernelBytecode::kJumpIfNotZeroTypeArgs_Old:
- case KernelBytecode::kJumpIfEqStrict_Old:
- case KernelBytecode::kJumpIfNeStrict_Old:
- case KernelBytecode::kJumpIfTrue_Old:
- case KernelBytecode::kJumpIfFalse_Old:
- case KernelBytecode::kJumpIfNull_Old:
- case KernelBytecode::kJumpIfNotNull_Old:
case KernelBytecode::kJump:
case KernelBytecode::kJump_Wide:
case KernelBytecode::kJumpIfNoAsserts:
@@ -923,7 +891,6 @@
switch (DecodeOpcode(instr)) {
case KernelBytecode::kLoadConstant:
case KernelBytecode::kLoadConstant_Wide:
- case KernelBytecode::kLoadConstant_Old:
return true;
default:
return false;
@@ -931,30 +898,17 @@
}
DART_FORCE_INLINE static bool IsCheckStackOpcode(const KBCInstr* instr) {
- switch (DecodeOpcode(instr)) {
- case KernelBytecode::kCheckStack:
- case KernelBytecode::kCheckStack_Old:
- return true;
- default:
- return false;
- }
+ return DecodeOpcode(instr) == KernelBytecode::kCheckStack;
}
DART_FORCE_INLINE static bool IsEntryOptionalOpcode(const KBCInstr* instr) {
- switch (DecodeOpcode(instr)) {
- case KernelBytecode::kEntryOptional:
- case KernelBytecode::kEntryOptional_Old:
- return true;
- default:
- return false;
- }
+ return DecodeOpcode(instr) == KernelBytecode::kEntryOptional;
}
DART_FORCE_INLINE static bool IsFrameOpcode(const KBCInstr* instr) {
switch (DecodeOpcode(instr)) {
case KernelBytecode::kFrame:
case KernelBytecode::kFrame_Wide:
- case KernelBytecode::kFrame_Old:
return true;
default:
return false;
@@ -962,33 +916,13 @@
}
DART_FORCE_INLINE static bool IsSetFrameOpcode(const KBCInstr* instr) {
- switch (DecodeOpcode(instr)) {
- case KernelBytecode::kSetFrame:
- case KernelBytecode::kSetFrame_Old:
- return true;
- default:
- return false;
- }
- }
-
- DART_FORCE_INLINE static bool IsCallOpcode_Old(const KBCInstr* instr) {
- switch (DecodeOpcode(instr)) {
- case KernelBytecode::kDirectCall_Old:
- case KernelBytecode::kInterfaceCall_Old:
- case KernelBytecode::kUncheckedInterfaceCall_Old:
- case KernelBytecode::kDynamicCall_Old:
- return true;
-
- default:
- return false;
- }
+ return DecodeOpcode(instr) == KernelBytecode::kSetFrame;
}
DART_FORCE_INLINE static bool IsNativeCallOpcode(const KBCInstr* instr) {
switch (DecodeOpcode(instr)) {
case KernelBytecode::kNativeCall:
case KernelBytecode::kNativeCall_Wide:
- case KernelBytecode::kNativeCall_Old:
return true;
default:
return false;
@@ -1026,19 +960,6 @@
static const uint8_t kNativeCallToGrowableListArgc = 2;
- DART_FORCE_INLINE static uint8_t DecodeArgc_Old(const KBCInstr* ret_addr) {
- const intptr_t kOldInstructionSize = 4;
- const KBCInstr* call = ret_addr - kOldInstructionSize;
- ASSERT(IsOld(call));
- if (DecodeOpcode(call) == KernelBytecode::kNativeCall_Old) {
- // The only NativeCall redirecting to a bytecode function is the call
- // to new _GrowableList<E>(0).
- return kNativeCallToGrowableListArgc;
- }
- ASSERT(IsCallOpcode_Old(call));
- return DecodeA(call);
- }
-
// Returns a fake return address which points after the 2-argument
// bytecode call, followed by ReturnTOS instructions.
static const KBCInstr* GetNativeCallToGrowableListReturnTrampoline();
diff --git a/runtime/vm/interpreter.cc b/runtime/vm/interpreter.cc
index c83e454..3b58a09 100644
--- a/runtime/vm/interpreter.cc
+++ b/runtime/vm/interpreter.cc
@@ -910,20 +910,11 @@
#define BYTECODE_ENTRY_LABEL(Name) bc##Name:
#define BYTECODE_WIDE_ENTRY_LABEL(Name) bc##Name##_Wide:
-#define BYTECODE_OLD_ENTRY_LABEL(Name) bc##Name##_Old:
#define BYTECODE_IMPL_LABEL(Name) bc##Name##Impl:
#define GOTO_BYTECODE_IMPL(Name) goto bc##Name##Impl;
// Define entry point that handles bytecode Name with the given operand format.
-#define BYTECODE(Name, Operands) BYTECODE_HEADER_##Operands##_WITH_OLD(Name)
-
-// TODO(alexmarkov): switch BYTECODE macro to BYTECODE_NEW implementation
-// and replace BYTECODE_NEW with BYTECODE when old instructions are gone.
-// Cleanup BYTECODE_HEADER_*_WITH_OLD macros and drop _WITH_OLD.
-static_assert(KernelBytecode::kMinSupportedBytecodeFormatVersion < 7,
- "Cleanup support for old bytecode format versions");
-
-#define BYTECODE_NEW(Name, Operands) BYTECODE_HEADER_##Operands(Name)
+#define BYTECODE(Name, Operands) BYTECODE_HEADER_##Operands(Name)
// Helpers to decode common instruction formats. Used in conjunction with
// BYTECODE() macro.
@@ -932,32 +923,16 @@
BYTECODE_ENTRY_LABEL(Name) \
pc += 1;
-#define BYTECODE_HEADER_0_WITH_OLD(Name) \
- BYTECODE_OLD_ENTRY_LABEL(Name) \
- pc += 4; \
- GOTO_BYTECODE_IMPL(Name); \
- BYTECODE_HEADER_0(Name) \
- BYTECODE_IMPL_LABEL(Name)
-
-#define BYTECODE_HEADER_A_WITH_OLD(Name) \
+#define BYTECODE_HEADER_A(Name) \
uint32_t rA; \
USE(rA); \
- BYTECODE_OLD_ENTRY_LABEL(Name) \
- rA = pc[1]; \
- pc += 4; \
- GOTO_BYTECODE_IMPL(Name); \
BYTECODE_ENTRY_LABEL(Name) \
rA = pc[1]; \
- pc += 2; \
- BYTECODE_IMPL_LABEL(Name)
+ pc += 2;
-#define BYTECODE_HEADER_D_WITH_OLD(Name) \
+#define BYTECODE_HEADER_D(Name) \
uint32_t rD; \
USE(rD); \
- BYTECODE_OLD_ENTRY_LABEL(Name) \
- rD = static_cast<uint32_t>(pc[2]) | (static_cast<uint32_t>(pc[3]) << 8); \
- pc += 4; \
- GOTO_BYTECODE_IMPL(Name); \
BYTECODE_WIDE_ENTRY_LABEL(Name) \
rD = static_cast<uint32_t>(pc[1]) | (static_cast<uint32_t>(pc[2]) << 8) | \
(static_cast<uint32_t>(pc[3]) << 16) | \
@@ -969,14 +944,9 @@
pc += 2; \
BYTECODE_IMPL_LABEL(Name)
-#define BYTECODE_HEADER_X_WITH_OLD(Name) \
+#define BYTECODE_HEADER_X(Name) \
int32_t rX; \
USE(rX); \
- BYTECODE_OLD_ENTRY_LABEL(Name) \
- rX = static_cast<int16_t>(static_cast<uint16_t>(pc[2]) | \
- (static_cast<uint16_t>(pc[3]) << 8)); \
- pc += 4; \
- GOTO_BYTECODE_IMPL(Name); \
BYTECODE_WIDE_ENTRY_LABEL(Name) \
rX = static_cast<int32_t>(static_cast<uint32_t>(pc[1]) | \
(static_cast<uint32_t>(pc[2]) << 8) | \
@@ -989,16 +959,9 @@
pc += 2; \
BYTECODE_IMPL_LABEL(Name)
-#define BYTECODE_HEADER_T_WITH_OLD(Name) \
+#define BYTECODE_HEADER_T(Name) \
const KBCInstr* rT; \
USE(rT); \
- BYTECODE_OLD_ENTRY_LABEL(Name) \
- rT = pc + (static_cast<int32_t>((static_cast<uint32_t>(pc[1]) << 8) | \
- (static_cast<uint32_t>(pc[2]) << 16) | \
- (static_cast<uint32_t>(pc[3]) << 24)) >> \
- (8 - 2)); \
- pc += 4; \
- GOTO_BYTECODE_IMPL(Name); \
BYTECODE_WIDE_ENTRY_LABEL(Name) \
rT = pc + (static_cast<int32_t>((static_cast<uint32_t>(pc[1]) << 8) | \
(static_cast<uint32_t>(pc[2]) << 16) | \
@@ -1011,15 +974,10 @@
pc += 2; \
BYTECODE_IMPL_LABEL(Name)
-#define BYTECODE_HEADER_A_E_WITH_OLD(Name) \
+#define BYTECODE_HEADER_A_E(Name) \
uint32_t rA, rE; \
USE(rA); \
USE(rE); \
- BYTECODE_OLD_ENTRY_LABEL(Name) \
- rA = pc[1]; \
- rE = static_cast<uint32_t>(pc[2]) | (static_cast<uint32_t>(pc[3]) << 8); \
- pc += 4; \
- GOTO_BYTECODE_IMPL(Name); \
BYTECODE_WIDE_ENTRY_LABEL(Name) \
rA = pc[1]; \
rE = static_cast<uint32_t>(pc[2]) | (static_cast<uint32_t>(pc[3]) << 8) | \
@@ -1033,17 +991,11 @@
pc += 3; \
BYTECODE_IMPL_LABEL(Name)
-#define BYTECODE_HEADER_A_Y_WITH_OLD(Name) \
+#define BYTECODE_HEADER_A_Y(Name) \
uint32_t rA; \
int32_t rY; \
USE(rA); \
USE(rY); \
- BYTECODE_OLD_ENTRY_LABEL(Name) \
- rA = pc[1]; \
- rY = static_cast<int16_t>(static_cast<uint16_t>(pc[2]) | \
- (static_cast<uint16_t>(pc[3]) << 8)); \
- pc += 4; \
- GOTO_BYTECODE_IMPL(Name); \
BYTECODE_WIDE_ENTRY_LABEL(Name) \
rA = pc[1]; \
rY = static_cast<int32_t>(static_cast<uint32_t>(pc[2]) | \
@@ -1058,15 +1010,10 @@
pc += 3; \
BYTECODE_IMPL_LABEL(Name)
-#define BYTECODE_HEADER_D_F_WITH_OLD(Name) \
+#define BYTECODE_HEADER_D_F(Name) \
uint32_t rD, rF; \
USE(rD); \
USE(rF); \
- BYTECODE_OLD_ENTRY_LABEL(Name) \
- rF = pc[1]; \
- rD = static_cast<uint32_t>(pc[2]) | (static_cast<uint32_t>(pc[3]) << 8); \
- pc += 4; \
- GOTO_BYTECODE_IMPL(Name); \
BYTECODE_WIDE_ENTRY_LABEL(Name) \
rD = static_cast<uint32_t>(pc[1]) | (static_cast<uint32_t>(pc[2]) << 8) | \
(static_cast<uint32_t>(pc[3]) << 16) | \
@@ -1080,12 +1027,11 @@
pc += 3; \
BYTECODE_IMPL_LABEL(Name)
-#define BYTECODE_HEADER_A_B_C_WITH_OLD(Name) \
+#define BYTECODE_HEADER_A_B_C(Name) \
uint32_t rA, rB, rC; \
USE(rA); \
USE(rB); \
USE(rC); \
- BYTECODE_OLD_ENTRY_LABEL(Name) \
BYTECODE_ENTRY_LABEL(Name) \
rA = pc[1]; \
rB = pc[2]; \
@@ -2161,12 +2107,10 @@
// Change the ArgumentsDescriptor of the call with a new cached one.
argdesc_ = ArgumentsDescriptor::New(
0, KernelBytecode::kNativeCallToGrowableListArgc);
- if (!thread->isolate()->is_using_old_bytecode_instructions()) {
- // Replace PC to the return trampoline so ReturnTOS would see
- // a call bytecode at return address and will be able to get argc
- // via DecodeArgc.
- pc = KernelBytecode::GetNativeCallToGrowableListReturnTrampoline();
- }
+ // Replace PC to the return trampoline so ReturnTOS would see
+ // a call bytecode at return address and will be able to get argc
+ // via DecodeArgc.
+ pc = KernelBytecode::GetNativeCallToGrowableListReturnTrampoline();
if (!Invoke(thread, SP - 1, SP + 1, &pc, &FP, &SP)) {
HANDLE_EXCEPTION;
}
@@ -2317,9 +2261,7 @@
}
// Look at the caller to determine how many arguments to pop.
- const uint8_t argc = thread->isolate()->is_using_old_bytecode_instructions()
- ? KernelBytecode::DecodeArgc_Old(pc)
- : KernelBytecode::DecodeArgc(pc);
+ const uint8_t argc = KernelBytecode::DecodeArgc(pc);
// Restore SP, FP and PP. Push result and dispatch.
SP = FrameArguments(FP, argc);
@@ -3070,51 +3012,27 @@
}
{
- BYTECODE(Trap, 0);
- BYTECODE(Unused00, 0);
- BYTECODE_NEW(Unused01, 0);
- BYTECODE_NEW(Unused02, 0);
- BYTECODE_NEW(Unused03, 0);
- BYTECODE_NEW(Unused04, 0);
- BYTECODE_NEW(Unused05, 0);
- BYTECODE_NEW(Unused06, 0);
- BYTECODE_NEW(Unused07, 0);
- BYTECODE_NEW(Unused08, 0);
- BYTECODE_NEW(Unused09, 0);
- BYTECODE_NEW(Unused10, 0);
- BYTECODE_NEW(Unused11, 0);
- BYTECODE_NEW(Unused12, 0);
- BYTECODE_NEW(Unused13, 0);
- BYTECODE_NEW(Unused14, 0);
- BYTECODE_NEW(Unused15, 0);
- BYTECODE_NEW(Unused16, 0);
- BYTECODE_NEW(Unused17, 0);
- BYTECODE_NEW(Unused18, 0);
- BYTECODE_NEW(Unused19, 0);
- BYTECODE_NEW(Unused20, 0);
- BYTECODE_NEW(Unused21, 0);
- BYTECODE_NEW(Unused22, 0);
- BYTECODE_NEW(Unused23, 0);
- BYTECODE_NEW(Unused24, 0);
- BYTECODE_NEW(Unused25, 0);
- BYTECODE_NEW(Unused26, 0);
- BYTECODE_NEW(Unused27, 0);
- BYTECODE_NEW(Unused28, 0);
- BYTECODE_NEW(Unused29, 0);
- BYTECODE_NEW(Unused30, 0);
- BYTECODE_NEW(Unused31, 0);
- BYTECODE_NEW(Unused32, 0);
- BYTECODE_NEW(Unused33, 0);
- BYTECODE_NEW(Unused34, 0);
- BYTECODE_NEW(Unused35, 0);
- BYTECODE_NEW(Unused36, 0);
- BYTECODE_NEW(Unused37, 0);
+ BYTECODE_ENTRY_LABEL(Trap);
+
+#define UNIMPLEMENTED_LABEL_ORDN(Name)
+#define UNIMPLEMENTED_LABEL_WIDE(Name)
+#define UNIMPLEMENTED_LABEL_RESV(Name) BYTECODE_ENTRY_LABEL(Name)
+#define UNIMPLEMENTED_LABEL(name, encoding, kind, op1, op2, op3) \
+ UNIMPLEMENTED_LABEL_##kind(name)
+
+ KERNEL_BYTECODES_LIST(UNIMPLEMENTED_LABEL)
+
+#undef UNIMPLEMENTED_LABEL_ORDN
+#undef UNIMPLEMENTED_LABEL_WIDE
+#undef UNIMPLEMENTED_LABEL_RESV
+#undef UNIMPLEMENTED_LABEL
+
UNIMPLEMENTED();
DISPATCH();
}
{
- BYTECODE_NEW(VMInternal_ImplicitGetter, 0);
+ BYTECODE(VMInternal_ImplicitGetter, 0);
RawFunction* function = FrameFunction(FP);
ASSERT(Function::kind(function) == RawFunction::kImplicitGetter);
@@ -3163,7 +3081,7 @@
}
{
- BYTECODE_NEW(VMInternal_ImplicitSetter, 0);
+ BYTECODE(VMInternal_ImplicitSetter, 0);
RawFunction* function = FrameFunction(FP);
ASSERT(Function::kind(function) == RawFunction::kImplicitSetter);
@@ -3284,7 +3202,7 @@
}
{
- BYTECODE_NEW(VMInternal_ImplicitStaticGetter, 0);
+ BYTECODE(VMInternal_ImplicitStaticGetter, 0);
RawFunction* function = FrameFunction(FP);
ASSERT(Function::kind(function) == RawFunction::kImplicitStaticGetter);
@@ -3316,7 +3234,7 @@
}
{
- BYTECODE_NEW(VMInternal_MethodExtractor, 0);
+ BYTECODE(VMInternal_MethodExtractor, 0);
RawFunction* function = FrameFunction(FP);
ASSERT(Function::kind(function) == RawFunction::kMethodExtractor);
@@ -3356,7 +3274,7 @@
}
{
- BYTECODE_NEW(VMInternal_InvokeClosure, 0);
+ BYTECODE(VMInternal_InvokeClosure, 0);
RawFunction* function = FrameFunction(FP);
ASSERT(Function::kind(function) == RawFunction::kInvokeFieldDispatcher);
@@ -3378,7 +3296,7 @@
}
{
- BYTECODE_NEW(VMInternal_InvokeField, 0);
+ BYTECODE(VMInternal_InvokeField, 0);
RawFunction* function = FrameFunction(FP);
ASSERT(Function::kind(function) == RawFunction::kInvokeFieldDispatcher);
@@ -3482,7 +3400,7 @@
}
{
- BYTECODE_NEW(VMInternal_ForwardDynamicInvocation, 0);
+ BYTECODE(VMInternal_ForwardDynamicInvocation, 0);
RawFunction* function = FrameFunction(FP);
ASSERT(Function::kind(function) ==
RawFunction::kDynamicInvocationForwarder);
@@ -3584,14 +3502,14 @@
}
{
- BYTECODE_NEW(VMInternal_NoSuchMethodDispatcher, 0);
+ BYTECODE(VMInternal_NoSuchMethodDispatcher, 0);
RawFunction* function = FrameFunction(FP);
ASSERT(Function::kind(function) == RawFunction::kNoSuchMethodDispatcher);
goto NoSuchMethodFromPrologue;
}
{
- BYTECODE_NEW(VMInternal_ImplicitStaticClosure, 0);
+ BYTECODE(VMInternal_ImplicitStaticClosure, 0);
RawFunction* function = FrameFunction(FP);
ASSERT(Function::kind(function) == RawFunction::kImplicitClosureFunction);
UNIMPLEMENTED();
@@ -3599,7 +3517,7 @@
}
{
- BYTECODE_NEW(VMInternal_ImplicitInstanceClosure, 0);
+ BYTECODE(VMInternal_ImplicitInstanceClosure, 0);
RawFunction* function = FrameFunction(FP);
ASSERT(Function::kind(function) == RawFunction::kImplicitClosureFunction);
UNIMPLEMENTED();
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 5d76a92..6c6ee8e 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -781,23 +781,6 @@
return !unsafe_trust_strong_mode_types();
}
- static_assert(KernelBytecode::kMinSupportedBytecodeFormatVersion < 7,
- "Cleanup support for old bytecode format versions");
- bool is_using_old_bytecode_instructions() const {
- return UsingOldBytecodeInstructionsBit::decode(isolate_flags_);
- }
- void set_is_using_old_bytecode_instructions(bool value) {
- isolate_flags_ =
- UsingOldBytecodeInstructionsBit::update(value, isolate_flags_);
- }
- bool is_using_new_bytecode_instructions() const {
- return UsingNewBytecodeInstructionsBit::decode(isolate_flags_);
- }
- void set_is_using_new_bytecode_instructions(bool value) {
- isolate_flags_ =
- UsingNewBytecodeInstructionsBit::update(value, isolate_flags_);
- }
-
bool has_attempted_stepping() const {
return HasAttemptedSteppingBit::decode(isolate_flags_);
}
@@ -930,13 +913,7 @@
V(Obfuscate) \
V(CompactionInProgress) \
V(ShouldLoadVmService) \
- V(UnsafeTrustStrongModeTypes) \
- V(UsingOldBytecodeInstructions) \
- V(UsingNewBytecodeInstructions)
-
- static_assert(
- KernelBytecode::kMinSupportedBytecodeFormatVersion < 7,
- "Cleanup UsingOldBytecodeInstructions and UsingNewBytecodeInstructions");
+ V(UnsafeTrustStrongModeTypes)
// Isolate specific flags.
enum FlagBits {