Version 3.14.0-201.0.dev

Merge 938322ce3d83e55b4ad39c807608510d30152983 into dev
diff --git a/pkg/native_compiler/lib/back_end/arm64/assembler.dart b/pkg/native_compiler/lib/back_end/arm64/assembler.dart
index 471a031..b8d4270 100644
--- a/pkg/native_compiler/lib/back_end/arm64/assembler.dart
+++ b/pkg/native_compiler/lib/back_end/arm64/assembler.dart
@@ -1040,6 +1040,42 @@
     ldr(result, RegExtRegAddress(result, classId, Extend.UXTX, scaled: true));
   }
 
+  /// Load array element from `[base + index*elemSize + offset]`.
+  @override
+  void loadIndexed(
+    Register result,
+    Register base,
+    Register index,
+    int offset, [
+    OperandSize elemSize = .s64,
+  ]) {
+    if (offset == 0) {
+      ldr(result, RegExtRegAddress(base, index, .UXTX, scaled: true), elemSize);
+    } else {
+      add(
+        result,
+        base,
+        ShiftedRegOperand(index, .LSL, elemSize.log2sizeInBytes),
+      );
+      ldr(result, address(result, offset), elemSize);
+    }
+  }
+
+  void loadAcquire(
+    Register result,
+    Register base,
+    int offset, [
+    OperandSize sz = OperandSize.s64,
+    Register scratch = temp2Reg,
+  ]) {
+    if (offset != 0) {
+      addImmediate(scratch, base, offset, .s64, scratch);
+      ldar(result, scratch, sz);
+    } else {
+      ldar(result, base, sz);
+    }
+  }
+
   @override
   void combineHashes(Register hash, Register other) {
     // hash += other
diff --git a/pkg/native_compiler/lib/back_end/arm64/code_generator.dart b/pkg/native_compiler/lib/back_end/arm64/code_generator.dart
index bc9003a..12da173 100644
--- a/pkg/native_compiler/lib/back_end/arm64/code_generator.dart
+++ b/pkg/native_compiler/lib/back_end/arm64/code_generator.dart
@@ -1744,35 +1744,25 @@
             hasFunctionTypeArgs: hasFunctionTypeArgs,
           ),
         );
-        final stub = switch (stc.numInputs) {
-          1 => StubCode.Subtype1TestCache,
-          2 => StubCode.Subtype2TestCache,
-          3 => StubCode.Subtype3TestCache,
-          4 => StubCode.Subtype4TestCache,
-          6 => StubCode.Subtype6TestCache,
-          _ =>
-            throw 'Unexpected number of SubtypeTestCache inputs ${stc.numInputs} (type $type)',
-        };
-
         final Label slowPath = addSlowPath(() {
           assert(stackFrame.maxArgumentsStackSlots >= 6);
           _asm.loadFromPool(tempReg, type.dartType);
           _asm.stp(
-            TypeTestingStub.subtypeTestCacheReg,
+            SubtypeTestCacheStub.subtypeTestCacheReg,
             hasFunctionTypeArgs
-                ? TypeTestingStub.functionTypeArgumentsReg
+                ? SubtypeTestCacheStub.functionTypeArgumentsReg
                 : nullReg,
             RegOffsetAddress(stackPointerReg, 0),
           );
           _asm.stp(
             hasInstantiatorTypeArgs
-                ? TypeTestingStub.instantiatorTypeArgumentsReg
+                ? SubtypeTestCacheStub.instantiatorTypeArgumentsReg
                 : nullReg,
             tempReg,
             RegOffsetAddress(stackPointerReg, 2 * wordSize),
           );
           _asm.stp(
-            TypeTestingStub.instanceReg,
+            SubtypeTestCacheStub.instanceReg,
             nullReg, // Space for result
             RegOffsetAddress(stackPointerReg, 4 * wordSize),
           );
@@ -1781,11 +1771,15 @@
           _asm.b(done);
         });
 
-        _asm.loadFromPool(TypeTestingStub.subtypeTestCacheReg, stc);
-        _asm.callVmStub(stub);
-        _asm.cmp(TypeTestingStub.subtypeTestCacheResultReg, nullReg);
+        _asm.loadFromPool(SubtypeTestCacheStub.subtypeTestCacheReg, stc);
+        final stub = backEndState.stubFactory.getSubtypeTestCacheStub(
+          stc.numInputs,
+        );
+        _asm.callStub(stub);
+
+        _asm.cmp(SubtypeTestCacheStub.subtypeTestCacheResultReg, nullReg);
         _asm.b(slowPath, .equal);
-        _asm.mov(resultReg, TypeTestingStub.subtypeTestCacheResultReg);
+        _asm.mov(resultReg, SubtypeTestCacheStub.subtypeTestCacheResultReg);
         _asm.b(done);
     }
 
diff --git a/pkg/native_compiler/lib/back_end/arm64/constraints.dart b/pkg/native_compiler/lib/back_end/arm64/constraints.dart
index 75f0d6a..62face9 100644
--- a/pkg/native_compiler/lib/back_end/arm64/constraints.dart
+++ b/pkg/native_compiler/lib/back_end/arm64/constraints.dart
@@ -394,17 +394,20 @@
     };
     if (callsSubtypeTestCacheStub) {
       final inputs = [
-        TypeTestingStub.instanceReg,
+        SubtypeTestCacheStub.instanceReg,
         if (instr.inputCount > 1) ...const [
-          TypeTestingStub.instantiatorTypeArgumentsReg,
-          TypeTestingStub.functionTypeArgumentsReg,
+          SubtypeTestCacheStub.instantiatorTypeArgumentsReg,
+          SubtypeTestCacheStub.functionTypeArgumentsReg,
         ],
       ];
       return InstructionConstraints(
-        TypeTestingStub.subtypeTestCacheResultReg,
+        SubtypeTestCacheStub.subtypeTestCacheResultReg,
         inputs,
         // TODO: save registers on slow path
-        allRegistersExcept(TypeTestingStub.subtypeTestCacheResultReg, inputs),
+        allRegistersExcept(
+          SubtypeTestCacheStub.subtypeTestCacheResultReg,
+          inputs,
+        ),
         Safepoint(),
       );
     }
diff --git a/pkg/native_compiler/lib/back_end/arm64/stub_code_generator.dart b/pkg/native_compiler/lib/back_end/arm64/stub_code_generator.dart
index d1aead6..f6f0e7b 100644
--- a/pkg/native_compiler/lib/back_end/arm64/stub_code_generator.dart
+++ b/pkg/native_compiler/lib/back_end/arm64/stub_code_generator.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:cfg/ir/constant_value.dart';
+import 'package:cfg/utils/misc.dart';
 import 'package:kernel/ast.dart' as ast show Class;
 import 'package:native_compiler/back_end/arm64/assembler.dart';
 import 'package:native_compiler/back_end/assembler.dart';
@@ -173,6 +174,507 @@
   }
 }
 
+final class SubtypeTestCacheStub extends Arm64StubCodeGenerator {
+  static const Register instanceReg = R0;
+  static const Register dstTypeReg = R8;
+  static const Register instantiatorTypeArgumentsReg = R2;
+  static const Register functionTypeArgumentsReg = R1;
+  static const Register subtypeTestCacheReg = R3;
+  static const Register scratchReg = R4;
+  static const Register subtypeTestCacheResultReg = R7;
+  static const Register entryPointReg = R9;
+  static const Register instanceDelayedFunctionTypeArgumentsReg = R10;
+
+  static const Register instanceCidOrSignatureReg = R6;
+  static const Register instanceInstantiatorTypeArgumentsReg = R5;
+  static const Register instanceParentFunctionTypeArgumentsReg = R9;
+  static const Register cacheEntriesEndReg = R11;
+  static const Register cacheContentsSizeReg = R12;
+  static const Register probeDistanceReg = R13;
+
+  final int numInputs;
+  SubtypeTestCacheStub(super.vmOffsets, super.objectLayout, this.numInputs);
+
+  VMOffsets get vmOffsets => _asm.vmOffsets;
+  ObjectLayout get objectLayout => _asm.objectLayout;
+  int get compressedWordSize => objectLayout.compressedWordSize;
+
+  void _generateSubtypeTestCacheLoopBody(
+    Register cacheEntryReg,
+    Label found,
+    Label notFound,
+    Label nextIteration,
+  ) {
+    // TODO: compressed pointers
+
+    final inputRegs = [
+      instanceCidOrSignatureReg,
+      instanceInstantiatorTypeArgumentsReg,
+      instantiatorTypeArgumentsReg,
+      functionTypeArgumentsReg,
+      instanceParentFunctionTypeArgumentsReg,
+      instanceDelayedFunctionTypeArgumentsReg,
+      dstTypeReg,
+    ];
+    final elemIndex = [
+      vmOffsets.SubtypeTestCache_kInstanceCidOrSignature,
+      vmOffsets.SubtypeTestCache_kInstanceTypeArguments,
+      vmOffsets.SubtypeTestCache_kInstantiatorTypeArguments,
+      vmOffsets.SubtypeTestCache_kFunctionTypeArguments,
+      vmOffsets.SubtypeTestCache_kInstanceParentFunctionTypeArguments,
+      vmOffsets.SubtypeTestCache_kInstanceDelayedFunctionTypeArguments,
+      vmOffsets.SubtypeTestCache_kDestinationType,
+    ];
+    assert(inputRegs.length == elemIndex.length);
+
+    for (var i = 1; i <= numInputs; i++) {
+      if (i == 1) {
+        _asm.loadAcquire(
+          scratchReg,
+          cacheEntryReg,
+          vmOffsets.SubtypeTestCache_kInstanceCidOrSignature *
+              compressedWordSize,
+        );
+        _asm.cmp(scratchReg, nullReg);
+        _asm.b(notFound, .equal);
+      } else {
+        _asm.ldr(
+          scratchReg,
+          _asm.address(cacheEntryReg, elemIndex[i - 1] * compressedWordSize),
+        );
+      }
+      _asm.cmp(scratchReg, inputRegs[i - 1]);
+      if (i == numInputs) {
+        _asm.b(found, .equal);
+      } else {
+        _asm.b(nextIteration, .notEqual);
+      }
+    }
+  }
+
+  void _generateLinearSearch(
+    Register cacheEntryReg,
+    Label found,
+    Label notFound,
+  ) {
+    _asm.addImmediate(
+      cacheEntryReg,
+      cacheEntryReg,
+      vmOffsets.Array_data_offset - heapObjectTag,
+    );
+
+    final loop = Label();
+    final nextIteration = Label();
+    _asm.bind(loop);
+
+    _generateSubtypeTestCacheLoopBody(
+      cacheEntryReg,
+      found,
+      notFound,
+      nextIteration,
+    );
+
+    // Next iteration
+    _asm.bind(nextIteration);
+    _asm.addImmediate(
+      cacheEntryReg,
+      cacheEntryReg,
+      compressedWordSize * vmOffsets.SubtypeTestCache_kTestEntryLength,
+    );
+
+    _asm.b(loop);
+  }
+
+  void getAbstractTypeHash(Register dst, Register src, Label notFound) {
+    _asm.ldr(dst, _asm.fieldAddress(src, vmOffsets.AbstractType_hash_offset));
+    _asm.smiUntag(dst);
+    // Hash of 0 means the hash hasn't been computed yet and we need to go to runtime.
+    _asm.cbz(dst, notFound);
+  }
+
+  void getTypeArgumentsHash(Register dst, Register src, Label notFound) {
+    final done = Label();
+    _asm.loadImmediate(dst, vmOffsets.TypeArguments_kAllDynamicHash);
+    _asm.cmp(src, nullReg);
+    _asm.b(done, .equal);
+    _asm.ldr(dst, _asm.fieldAddress(src, vmOffsets.TypeArguments_hash_offset));
+    _asm.smiUntag(dst);
+    _asm.cbz(dst, notFound);
+    _asm.bind(done);
+  }
+
+  void _generateHashSearch(
+    Register cacheEntryReg,
+    Register tableLengthReg,
+    Label found,
+    Label notFound,
+  ) {
+    // TODO: compressed pointers
+
+    // Since the test entry size is a power of 2, we can use lsr to divide.
+    final testEntryLengthLog2 = log2OfPowerOf2(
+      vmOffsets.SubtypeTestCache_kTestEntryLength,
+    );
+
+    // Before we finish calculating the initial probe entry, we'll need the
+    // starting cache entry and the number of entries. We'll store these in
+    // [cacheContentsSizeReg] and [probeDistanceReg], respectively.
+
+    final startingEntryReg = cacheContentsSizeReg; // alias for convenience
+
+    // Hash cache traversal
+    // Calculating number of entries
+    // The array length is a Smi so it needs to be untagged.
+    _asm.smiUntag(scratchReg, tableLengthReg);
+    final entriesCountReg = probeDistanceReg; // alias for convenience
+    _asm.lsr(entriesCountReg, scratchReg, testEntryLengthLog2);
+
+    // Calculating starting entry address
+    _asm.addImmediate(
+      cacheEntryReg,
+      cacheEntryReg,
+      vmOffsets.Array_data_offset - heapObjectTag,
+    );
+    _asm.mov(startingEntryReg, cacheEntryReg);
+
+    // Calculating end of entries address
+    _asm.add(
+      cacheEntriesEndReg,
+      cacheEntryReg,
+      ShiftedRegOperand(
+        entriesCountReg,
+        .LSL,
+        testEntryLengthLog2 + log2wordSize,
+      ),
+    );
+
+    // Hash the entry inputs
+    {
+      final done = Label();
+      // Assume a Smi tagged instance cid to avoid a branch in the common case.
+      _asm.mov(cacheEntryReg, instanceCidOrSignatureReg);
+      _asm.smiUntag(cacheEntryReg);
+      _asm.branchIfSmi(instanceCidOrSignatureReg, done);
+      getAbstractTypeHash(cacheEntryReg, instanceCidOrSignatureReg, notFound);
+      _asm.bind(done);
+    }
+    if (numInputs >= 7) {
+      getAbstractTypeHash(scratchReg, dstTypeReg, notFound);
+      _asm.combineHashes(cacheEntryReg, scratchReg);
+    }
+    if (numInputs >= 6) {
+      getTypeArgumentsHash(
+        scratchReg,
+        instanceDelayedFunctionTypeArgumentsReg,
+        notFound,
+      );
+      _asm.combineHashes(cacheEntryReg, scratchReg);
+    }
+    if (numInputs >= 5) {
+      getTypeArgumentsHash(
+        scratchReg,
+        instanceParentFunctionTypeArgumentsReg,
+        notFound,
+      );
+      _asm.combineHashes(cacheEntryReg, scratchReg);
+    }
+    if (numInputs >= 4) {
+      getTypeArgumentsHash(scratchReg, functionTypeArgumentsReg, notFound);
+      _asm.combineHashes(cacheEntryReg, scratchReg);
+    }
+    if (numInputs >= 3) {
+      getTypeArgumentsHash(scratchReg, instantiatorTypeArgumentsReg, notFound);
+      _asm.combineHashes(cacheEntryReg, scratchReg);
+    }
+    if (numInputs >= 2) {
+      getTypeArgumentsHash(
+        scratchReg,
+        instanceInstantiatorTypeArgumentsReg,
+        notFound,
+      );
+      _asm.combineHashes(cacheEntryReg, scratchReg);
+    }
+    _asm.finalizeHash(32, cacheEntryReg);
+
+    // This requires the number of entries in a hash cache to be a power of 2.
+    // Converting hash to probe entry index
+    // The entry count is not needed after this point; create the mask in place.
+    final countMaskReg = entriesCountReg; // alias for convenience
+    _asm.addImmediate(countMaskReg, countMaskReg, -1);
+    _asm.and(cacheEntryReg, cacheEntryReg, countMaskReg);
+    // Now set the register to the initial probe distance in words.
+    _asm.loadImmediate(
+      probeDistanceReg,
+      compressedWordSize * vmOffsets.SubtypeTestCache_kTestEntryLength,
+    );
+
+    // Now cacheEntryReg is the starting probe entry index.
+    // Converting probe entry index to probe entry address
+    _asm.add(
+      cacheEntryReg,
+      startingEntryReg,
+      ShiftedRegOperand(
+        cacheEntryReg,
+        .LSL,
+        testEntryLengthLog2 + log2wordSize,
+      ),
+    );
+
+    // Now set the register to the negated size of the cache contents in words.
+    final cacheNegatedSizeReg = startingEntryReg; // alias for convenience
+    _asm.sub(cacheNegatedSizeReg, startingEntryReg, cacheEntriesEndReg);
+
+    final loop = Label();
+    final nextIteration = Label();
+    _asm.bind(loop);
+
+    _generateSubtypeTestCacheLoopBody(
+      cacheEntryReg,
+      found,
+      notFound,
+      nextIteration,
+    );
+
+    _asm.bind(nextIteration);
+    // Move to next entry
+    {
+      _asm.add(cacheEntryReg, cacheEntryReg, probeDistanceReg);
+      // Adjust probe distance
+      _asm.addImmediate(
+        probeDistanceReg,
+        probeDistanceReg,
+        compressedWordSize * vmOffsets.SubtypeTestCache_kTestEntryLength,
+      );
+    }
+    // Check for leaving array
+    // Make sure we haven't run off the array.
+    _asm.cmp(cacheEntryReg, cacheEntriesEndReg);
+    _asm.b(loop, .less);
+    // Wrap around to start of entries
+    // Add the negated size of the cache contents.
+    _asm.add(cacheEntryReg, cacheEntryReg, cacheNegatedSizeReg);
+    _asm.b(loop);
+  }
+
+  @override
+  void _generate() {
+    // TODO: compressed pointers
+    _asm.push(LR);
+
+    {
+      final continueWithSearch = Label();
+      _asm.ldr(
+        scratchReg,
+        _asm.fieldAddress(
+          subtypeTestCacheReg,
+          vmOffsets.SubtypeTestCache_num_inputs_offset,
+        ),
+        OperandSize.u32,
+      );
+      _asm.cmpImmediate(scratchReg, numInputs);
+      _asm.b(continueWithSearch, .equal);
+      _asm.unimplemented('Unexpected subtype cache number of inputs');
+      _asm.bind(continueWithSearch);
+    }
+    const cacheArrayReg = subtypeTestCacheResultReg;
+    const cacheEntryReg = cacheArrayReg;
+
+    _asm.loadAcquire(
+      cacheEntryReg,
+      subtypeTestCacheReg,
+      vmOffsets.SubtypeTestCache_cache_offset - heapObjectTag,
+    );
+
+    if (numInputs >= 3) {
+      _asm.loadClassIdMayBeSmi(instanceCidOrSignatureReg, instanceReg);
+    } else {
+      // If the type is fully instantiated, then it can be determined at compile
+      // time whether Smi is a subtype of the type or not. Thus, this code should
+      // never be called with a Smi instance.
+      _asm.loadClassId(instanceCidOrSignatureReg, instanceReg);
+    }
+
+    _asm.cmpImmediate(instanceCidOrSignatureReg, ClassId.ClosureCid.index);
+    final nonClosure = Label();
+    _asm.b(nonClosure, .notEqual);
+
+    // Closure handling
+    _asm.ldr(
+      instanceCidOrSignatureReg,
+      _asm.fieldAddress(instanceReg, vmOffsets.Closure_function_offset),
+    );
+    _asm.ldr(
+      instanceCidOrSignatureReg,
+      _asm.fieldAddress(
+        instanceCidOrSignatureReg,
+        vmOffsets.Function_signature_offset,
+      ),
+    );
+
+    final initialized = Label();
+
+    if (numInputs >= 2) {
+      _asm.ldr(
+        scratchReg,
+        _asm.fieldAddress(
+          instanceReg,
+          vmOffsets.Closure_length_and_flags_offset,
+        ),
+      );
+      {
+        // TODO: VerifySmi only in debug mode
+        final isSmi = Label();
+        _asm.tbz(scratchReg, smiBit, isSmi);
+        _asm.unimplemented('Smi is expected');
+        _asm.bind(isSmi);
+      }
+
+      final loadFunctionTypeArguments = Label();
+      _asm.mov(instanceInstantiatorTypeArgumentsReg, nullReg);
+      _asm.tbz(
+        scratchReg,
+        vmOffsets.UntaggedClosure_kHasInstantiatorTypeArgumentsBit + smiShift,
+        (numInputs >= 5 ? loadFunctionTypeArguments : initialized),
+      );
+      _asm.ubfx(
+        instanceInstantiatorTypeArgumentsReg,
+        scratchReg,
+        vmOffsets.UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos +
+            smiShift,
+        vmOffsets.UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize,
+      );
+
+      _asm.loadIndexed(
+        instanceInstantiatorTypeArgumentsReg,
+        instanceReg,
+        instanceInstantiatorTypeArgumentsReg,
+        vmOffsets.Closure_elementOffset(0) - heapObjectTag,
+      );
+
+      if (numInputs >= 5) {
+        _asm.bind(loadFunctionTypeArguments);
+
+        final loadDelayedFunctionTypeArguments = Label();
+        _asm.mov(instanceParentFunctionTypeArgumentsReg, nullReg);
+        _asm.tbz(
+          scratchReg,
+          vmOffsets.UntaggedClosure_kHasFunctionTypeArgumentsBit + smiShift,
+          (numInputs >= 6 ? loadDelayedFunctionTypeArguments : initialized),
+        );
+        _asm.ubfx(
+          instanceParentFunctionTypeArgumentsReg,
+          scratchReg,
+          vmOffsets.UntaggedClosure_kFunctionTypeArgumentsIndexBitsPos +
+              smiShift,
+          vmOffsets.UntaggedClosure_kFunctionTypeArgumentsIndexBitsSize,
+        );
+        _asm.loadIndexed(
+          instanceParentFunctionTypeArgumentsReg,
+          instanceReg,
+          instanceParentFunctionTypeArgumentsReg,
+          vmOffsets.Closure_elementOffset(0) - heapObjectTag,
+        );
+
+        if (numInputs >= 6) {
+          _asm.bind(loadDelayedFunctionTypeArguments);
+
+          _asm.mov(instanceDelayedFunctionTypeArgumentsReg, nullReg);
+          _asm.tbz(
+            scratchReg,
+            vmOffsets.UntaggedClosure_kHasDelayedTypeArgumentsBit + smiShift,
+            initialized,
+          );
+          _asm.ldr(
+            instanceDelayedFunctionTypeArgumentsReg,
+            _asm.fieldAddress(
+              instanceReg,
+              vmOffsets.Closure_elementOffset(
+                vmOffsets.UntaggedClosure_kDelayedTypeArgumentsIndex,
+              ),
+            ),
+          );
+        }
+      }
+      _asm.b(initialized);
+    }
+
+    _asm.bind(nonClosure);
+    if (numInputs >= 2) {
+      _asm.loadClassById(scratchReg, instanceCidOrSignatureReg);
+      _asm.mov(instanceInstantiatorTypeArgumentsReg, nullReg);
+      _asm.ldr(
+        scratchReg,
+        _asm.fieldAddress(
+          scratchReg,
+          vmOffsets.Class_host_type_arguments_field_offset_in_words_offset,
+        ),
+        OperandSize.u32,
+      );
+      _asm.cmpImmediate(
+        scratchReg,
+        vmOffsets.Class_kNoTypeArguments,
+        OperandSize.s32,
+      );
+      final hasNoTypeArgument = Label();
+      _asm.b(hasNoTypeArgument, .equal);
+
+      _asm.add(
+        instanceInstantiatorTypeArgumentsReg,
+        instanceReg,
+        ShiftedRegOperand(scratchReg, .LSL, log2wordSize),
+      );
+      _asm.ldr(
+        instanceInstantiatorTypeArgumentsReg,
+        _asm.address(instanceInstantiatorTypeArgumentsReg, -heapObjectTag),
+      );
+
+      _asm.bind(hasNoTypeArgument);
+
+      if (numInputs >= 5) {
+        _asm.mov(instanceParentFunctionTypeArgumentsReg, nullReg);
+        if (numInputs >= 6) {
+          _asm.mov(instanceDelayedFunctionTypeArgumentsReg, nullReg);
+        }
+      }
+    }
+    _asm.smiTag(instanceCidOrSignatureReg);
+    _asm.bind(initialized);
+
+    _asm.ldr(
+      scratchReg,
+      _asm.fieldAddress(cacheEntryReg, vmOffsets.Array_length_offset),
+    );
+    _asm.cmpImmediate(
+      scratchReg,
+      vmOffsets.SubtypeTestCache_kMaxLinearCacheSize << smiShift,
+    );
+    final isHash = Label();
+    _asm.b(isHash, .greater);
+
+    final notFound = Label();
+    final found = Label();
+    _generateLinearSearch(cacheEntryReg, found, notFound);
+    _asm.bind(found);
+    _asm.ldr(
+      subtypeTestCacheResultReg,
+      _asm.address(
+        cacheArrayReg,
+        compressedWordSize * vmOffsets.SubtypeTestCache_kTestResult,
+      ),
+    );
+    _asm.pop(LR);
+    _asm.ret();
+
+    _asm.bind(notFound);
+    _asm.mov(subtypeTestCacheResultReg, nullReg);
+    _asm.pop(LR);
+    _asm.ret();
+
+    _asm.bind(isHash);
+    _generateHashSearch(cacheEntryReg, scratchReg, found, notFound);
+  }
+}
+
 final class TypeTestingStub {
   static const Register instanceReg = R0;
   static const Register dstTypeReg = R8;
@@ -182,6 +684,7 @@
   static const Register scratchReg = R4;
   static const Register subtypeTestCacheResultReg = R7;
   static const Register entryPointReg = R9;
+  static const Register instanceDelayedFunctionTypeArgumentsReg = R10;
 }
 
 final class InstantiateTypeArgumentsStub {
@@ -229,4 +732,8 @@
     Register objectReg,
     Register valueReg,
   ) => WriteBarrierStub(vmOffsets, objectLayout, objectReg, valueReg);
+
+  @override
+  StubCodeGenerator subtypeTestCacheStubGenerator(int n) =>
+      SubtypeTestCacheStub(vmOffsets, objectLayout, n);
 }
diff --git a/pkg/native_compiler/lib/back_end/assembler.dart b/pkg/native_compiler/lib/back_end/assembler.dart
index 16f05ac..3578b64 100644
--- a/pkg/native_compiler/lib/back_end/assembler.dart
+++ b/pkg/native_compiler/lib/back_end/assembler.dart
@@ -219,6 +219,13 @@
   void loadClassIdMayBeSmi(Register result, Register object);
   void loadIsolateGroup(Register rd);
   void loadClassById(Register result, Register classId);
+  void loadIndexed(
+    Register result,
+    Register base,
+    Register index,
+    int offset, [
+    OperandSize elemSize = .s64,
+  ]);
 
   void combineHashes(Register hash, Register other);
   void finalizeHash(int bitSize, Register hash);
diff --git a/pkg/native_compiler/lib/back_end/stub_code_generator.dart b/pkg/native_compiler/lib/back_end/stub_code_generator.dart
index 492e3db..de6a85a 100644
--- a/pkg/native_compiler/lib/back_end/stub_code_generator.dart
+++ b/pkg/native_compiler/lib/back_end/stub_code_generator.dart
@@ -18,6 +18,7 @@
   final CodeConsumer consumeGeneratedCode;
   Map<ast.Class, Code> _allocationStubs = {};
   Map<(Register, Register), Code> _writeBarrierStubs = {};
+  List<Code?> _subtypeTestCacheStubs = List<Code?>.filled(8, null);
 
   StubFactory(this.consumeGeneratedCode);
 
@@ -28,6 +29,8 @@
     Register valueReg,
   );
 
+  StubCodeGenerator subtypeTestCacheStubGenerator(int n);
+
   Code _generateCode(String name, StubCodeGenerator generator) {
     final code = generator.generate(name);
     consumeGeneratedCode(code);
@@ -42,4 +45,10 @@
         'WriteBarrierStub for $objectReg, $valueReg',
         writeBarrierStubGenerator(objectReg, valueReg),
       );
+
+  Code getSubtypeTestCacheStub(int numInputs) =>
+      _subtypeTestCacheStubs[numInputs] ??= _generateCode(
+        'SubtypeTestCacheStub',
+        subtypeTestCacheStubGenerator(numInputs),
+      );
 }
diff --git a/pkg/native_compiler/lib/runtime/vm_offsets.g.dart b/pkg/native_compiler/lib/runtime/vm_offsets.g.dart
index 5c7b323f..440a4cd 100644
--- a/pkg/native_compiler/lib/runtime/vm_offsets.g.dart
+++ b/pkg/native_compiler/lib/runtime/vm_offsets.g.dart
@@ -16,6 +16,7 @@
   int get Array_kMaxElements => throw 'Unknown';
   int get Array_kMaxNewSpaceElements => throw 'Unknown';
   int get Context_kMaxElements => throw 'Unknown';
+  int get Class_kNoTypeArguments => throw 'Unknown';
   int get Function_kKindBitsPos => throw 'Unknown';
   int get Function_kKindBitsSize => throw 'Unknown';
   int get Function_kRecognizedBitsPos => throw 'Unknown';
@@ -69,8 +70,15 @@
   int get SubtypeTestCache_kInstantiatorTypeArguments => throw 'Unknown';
   int get SubtypeTestCache_kTestEntryLength => throw 'Unknown';
   int get SubtypeTestCache_kMaxInputs => throw 'Unknown';
+  int get SubtypeTestCache_kMaxLinearCacheSize => throw 'Unknown';
   int get SubtypeTestCache_kTestResult => throw 'Unknown';
+  int get TypeArguments_kAllDynamicHash => throw 'Unknown';
   int get TypeArguments_kMaxElements => throw 'Unknown';
+  int get UntaggedClosure_kDelayedTypeArgumentsIndex => throw 'Unknown';
+  int get UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos =>
+      throw 'Unknown';
+  int get UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize =>
+      throw 'Unknown';
   int get UntaggedClosure_kHasDelayedTypeArgumentsBit => throw 'Unknown';
   int get UntaggedClosure_kHasInstantiatorTypeArgumentsBit => throw 'Unknown';
   int get UntaggedClosure_kHasFunctionTypeArgumentsBit => throw 'Unknown';
@@ -648,6 +656,8 @@
   @override
   int get Context_kMaxElements => 0x7ffffffffffffff;
   @override
+  int get Class_kNoTypeArguments => -1;
+  @override
   int get Function_kKindBitsPos => 0x0;
   @override
   int get Function_kKindBitsSize => 0x5;
@@ -750,10 +760,20 @@
   @override
   int get SubtypeTestCache_kMaxInputs => 0x7;
   @override
+  int get SubtypeTestCache_kMaxLinearCacheSize => 0xf8;
+  @override
   int get SubtypeTestCache_kTestResult => 0x7;
   @override
+  int get TypeArguments_kAllDynamicHash => 0x1;
+  @override
   int get TypeArguments_kMaxElements => 0x7ffffffffffffff;
   @override
+  int get UntaggedClosure_kDelayedTypeArgumentsIndex => 0x0;
+  @override
+  int get UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos => 0x0;
+  @override
+  int get UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize => 0x1;
+  @override
   int get UntaggedClosure_kHasDelayedTypeArgumentsBit => 0x0;
   @override
   int get UntaggedClosure_kHasInstantiatorTypeArgumentsBit => 0x1;
@@ -1679,6 +1699,8 @@
   @override
   int get Context_kMaxElements => 0x7ffffffffffffff;
   @override
+  int get Class_kNoTypeArguments => -1;
+  @override
   int get Function_kKindBitsPos => 0x0;
   @override
   int get Function_kKindBitsSize => 0x5;
@@ -1781,10 +1803,20 @@
   @override
   int get SubtypeTestCache_kMaxInputs => 0x7;
   @override
+  int get SubtypeTestCache_kMaxLinearCacheSize => 0xf8;
+  @override
   int get SubtypeTestCache_kTestResult => 0x7;
   @override
+  int get TypeArguments_kAllDynamicHash => 0x1;
+  @override
   int get TypeArguments_kMaxElements => 0x7ffffffffffffff;
   @override
+  int get UntaggedClosure_kDelayedTypeArgumentsIndex => 0x0;
+  @override
+  int get UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos => 0x0;
+  @override
+  int get UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize => 0x1;
+  @override
   int get UntaggedClosure_kHasDelayedTypeArgumentsBit => 0x0;
   @override
   int get UntaggedClosure_kHasInstantiatorTypeArgumentsBit => 0x1;
diff --git a/pkg/native_compiler/lib/snapshot/snapshot.dart b/pkg/native_compiler/lib/snapshot/snapshot.dart
index f6df5be..d9c9591 100644
--- a/pkg/native_compiler/lib/snapshot/snapshot.dart
+++ b/pkg/native_compiler/lib/snapshot/snapshot.dart
@@ -173,11 +173,6 @@
     addBaseObject(RuntimeConstantObject(.uninitializedData));
     addBaseObject(RuntimeConstantObject(.mutableEmptyList));
     // TODO: generate these stubs instead of referencing them from the VM.
-    addBaseObject(StubCode.Subtype1TestCache);
-    addBaseObject(StubCode.Subtype2TestCache);
-    addBaseObject(StubCode.Subtype3TestCache);
-    addBaseObject(StubCode.Subtype4TestCache);
-    addBaseObject(StubCode.Subtype6TestCache);
     addBaseObject(StubCode.InstantiateTypeArguments);
     addBaseObject(StubCode.InitAsync);
     addBaseObject(StubCode.InitAsyncStar);
diff --git a/pkg/native_compiler/test/back_end/arm64/assembler_test.dart b/pkg/native_compiler/test/back_end/arm64/assembler_test.dart
index 40c3e19..ed5961b 100644
--- a/pkg/native_compiler/test/back_end/arm64/assembler_test.dart
+++ b/pkg/native_compiler/test/back_end/arm64/assembler_test.dart
@@ -98,6 +98,14 @@
         'stpw r1, r2, [r17, #4]\n',
       );
     });
+    test('fieldAddress', () {
+      asm.ldr(R1, asm.fieldAddress(R0, 42), .s32);
+      asm.ldr(R1, asm.fieldAddress(R0, 42), .u32);
+      expectDisassembly(
+        'ldrsw r1, [r0, #41]\n'
+        'ldrw r1, [r0, #41]\n',
+      );
+    });
     test('enterDartFrame', () {
       asm.enterDartFrame();
       expectDisassembly(
@@ -565,6 +573,68 @@
         'ldr r2, [r2, r1 uxtx scaled]\n',
       );
     });
+    test('loadIndexed', () {
+      asm.loadIndexed(R2, R1, R3, 0, OperandSize.s32);
+      asm.loadIndexed(R2, R1, R3, 42, OperandSize.s32);
+      asm.loadIndexed(R2, R1, R3, 4231, OperandSize.s32);
+      asm.loadIndexed(R2, R1, R3, 0, OperandSize.s64);
+      asm.loadIndexed(R2, R1, R3, 42, OperandSize.s64);
+      asm.loadIndexed(R2, R1, R3, 4231, OperandSize.s64);
+      expectDisassembly(
+        'ldrsw r2, [r1, r3 uxtx scaled]\n'
+        'add r2, r1, r3 lsl #2\n'
+        'ldrsw r2, [r2, #42]\n'
+        'add r2, r1, r3 lsl #2\n'
+        'add r17, r2, #0x1000\n'
+        'ldrsw r2, [r17, #135]\n'
+        'ldr r2, [r1, r3 uxtx scaled]\n'
+        'add r2, r1, r3 lsl #3\n'
+        'ldr r2, [r2, #42]\n'
+        'add r2, r1, r3 lsl #3\n'
+        'add r17, r2, #0x1000\n'
+        'ldr r2, [r17, #135]\n',
+      );
+    });
+    test('loadAcquire', () {
+      asm.loadAcquire(R2, R1, 0, OperandSize.s32);
+      asm.loadAcquire(R2, R1, 42, OperandSize.s32);
+      asm.loadAcquire(R2, R1, 4231, OperandSize.s32);
+      asm.loadAcquire(R2, R1, 0, OperandSize.s64);
+      asm.loadAcquire(R2, R1, 42, OperandSize.s64);
+      asm.loadAcquire(R2, R1, 4231, OperandSize.s64);
+      asm.loadAcquire(R2, R1, 0, OperandSize.s32, R3);
+      asm.loadAcquire(R2, R1, 42, OperandSize.s32, R3);
+      asm.loadAcquire(R2, R1, 4231, OperandSize.s32, R3);
+      asm.loadAcquire(R2, R1, 0, OperandSize.s64, R3);
+      asm.loadAcquire(R2, R1, 42, OperandSize.s64, R3);
+      asm.loadAcquire(R2, R1, 4231, OperandSize.s64, R3);
+      expectDisassembly(
+        'ldarw r2, [r1]\n'
+        'add r17, r1, #0x2a\n'
+        'ldarw r2, [r17]\n'
+        'movz r17, #0x1087\n'
+        'add r17, r1, r17\n'
+        'ldarw r2, [r17]\n'
+        'ldar r2, [r1]\n'
+        'add r17, r1, #0x2a\n'
+        'ldar r2, [r17]\n'
+        'movz r17, #0x1087\n'
+        'add r17, r1, r17\n'
+        'ldar r2, [r17]\n'
+        'ldarw r2, [r1]\n'
+        'add r3, r1, #0x2a\n'
+        'ldarw r2, [r3]\n'
+        'movz r3, #0x1087\n'
+        'add r3, r1, r3\n'
+        'ldarw r2, [r3]\n'
+        'ldar r2, [r1]\n'
+        'add r3, r1, #0x2a\n'
+        'ldar r2, [r3]\n'
+        'movz r3, #0x1087\n'
+        'add r3, r1, r3\n'
+        'ldar r2, [r3]\n',
+      );
+    });
     test('combineHashes', () {
       asm.combineHashes(R0, R7);
       expectDisassembly(
diff --git a/runtime/vm/compiler/runtime_api.cc b/runtime/vm/compiler/runtime_api.cc
index d206121..71e5dc4 100644
--- a/runtime/vm/compiler/runtime_api.cc
+++ b/runtime/vm/compiler/runtime_api.cc
@@ -397,8 +397,6 @@
   return dart::IsTypedDataClassId(cid);
 }
 
-const word Class::kNoTypeArguments = dart::Class::kNoTypeArguments;
-
 classid_t Class::GetId(const dart::Class& handle) {
   return handle.id();
 }
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index 9182214..0417eb6 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -431,7 +431,10 @@
 };
 
 class UntaggedClosure : public AllStatic {
+  static const word kInstantiatorTypeArgumentsIndexBitsPos;
+  static const word kInstantiatorTypeArgumentsIndexBitsSize;
   static const word kHasDelayedTypeArgumentsBit;
+  static const word kDelayedTypeArgumentsIndex;
   static const word kHasInstantiatorTypeArgumentsBit;
   static const word kHasFunctionTypeArgumentsBit;
   static const word kFunctionTypeArgumentsIndexBitsPos;
@@ -1490,6 +1493,7 @@
   static word num_inputs_offset();
 
   static const word kMaxInputs;
+  static const word kMaxLinearCacheSize;
   static const word kTestEntryLength;
   static const word kInstanceCidOrSignature;
   static const word kDestinationType;
@@ -1636,6 +1640,7 @@
   static word InstanceSize();
   FINAL_CLASS();
 
+  static const word kAllDynamicHash;
   static const word kMaxElements;
 };
 
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 3406aaa..d110db3 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -71,6 +71,7 @@
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     0xfffd;
 static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -154,11 +155,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -889,6 +900,7 @@
     0x7ffd;
 static constexpr dart::compiler::target::word Context_kMaxElements =
     0x7ffffffffffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -973,11 +985,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0x7ffffffffffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -1713,6 +1735,7 @@
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     0xfffd;
 static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -1796,11 +1819,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0x328;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -2530,6 +2563,7 @@
     0x7ffd;
 static constexpr dart::compiler::target::word Context_kMaxElements =
     0x7ffffffffffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -2614,11 +2648,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0x7ffffffffffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -3357,6 +3401,7 @@
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     0xfffc;
 static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -3440,11 +3485,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -4180,6 +4235,7 @@
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     0xfffc;
 static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -4263,11 +4319,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -5004,6 +5070,7 @@
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     0xfffd;
 static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -5087,11 +5154,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -5823,6 +5900,7 @@
     0x7ffd;
 static constexpr dart::compiler::target::word Context_kMaxElements =
     0x7ffffffffffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -5907,11 +5985,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0x7ffffffffffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -6645,6 +6733,7 @@
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     0xfffd;
 static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -6728,11 +6817,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -7455,6 +7554,7 @@
     0x7ffd;
 static constexpr dart::compiler::target::word Context_kMaxElements =
     0x7ffffffffffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -7539,11 +7639,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0x7ffffffffffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -8271,6 +8381,7 @@
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     0xfffd;
 static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -8354,11 +8465,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0x328;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -9080,6 +9201,7 @@
     0x7ffd;
 static constexpr dart::compiler::target::word Context_kMaxElements =
     0x7ffffffffffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -9164,11 +9286,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0x7ffffffffffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -9899,6 +10031,7 @@
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     0xfffc;
 static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -9982,11 +10115,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -10714,6 +10857,7 @@
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     0xfffc;
 static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -10797,11 +10941,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -11530,6 +11684,7 @@
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     0xfffd;
 static constexpr dart::compiler::target::word Context_kMaxElements = 0xfffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -11613,11 +11768,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -12341,6 +12506,7 @@
     0x7ffd;
 static constexpr dart::compiler::target::word Context_kMaxElements =
     0x7ffffffffffffff;
+static constexpr dart::compiler::target::word Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word Function_kRecognizedBitsPos = 0x5;
@@ -12425,11 +12591,21 @@
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kMaxInputs = 0x7;
+static constexpr dart::compiler::target::word
+    SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word TypeArguments_kAllDynamicHash =
+    0x1;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
     0x7ffffffffffffff;
 static constexpr dart::compiler::target::word
+    UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -13163,6 +13339,7 @@
     0xfffd;
 static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
     0xfffffff;
+static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos =
@@ -13256,11 +13433,21 @@
     AOT_SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_TypeArguments_kAllDynamicHash = 0x1;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -14071,6 +14258,7 @@
     0x7ffd;
 static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
     0x7ffffffffffffff;
+static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos =
@@ -14164,11 +14352,21 @@
     AOT_SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_TypeArguments_kAllDynamicHash = 0x1;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
     0x7ffffffffffffff;
 static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -14990,6 +15188,7 @@
     0x7ffd;
 static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
     0x7ffffffffffffff;
+static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos =
@@ -15083,11 +15282,21 @@
     AOT_SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_TypeArguments_kAllDynamicHash = 0x1;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
     0x7ffffffffffffff;
 static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -15905,6 +16114,7 @@
     0xfffc;
 static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
     0xfffffff;
+static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos =
@@ -15998,11 +16208,21 @@
     AOT_SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_TypeArguments_kAllDynamicHash = 0x1;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -16820,6 +17040,7 @@
     0xfffc;
 static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
     0xfffffff;
+static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos =
@@ -16913,11 +17134,21 @@
     AOT_SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_TypeArguments_kAllDynamicHash = 0x1;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -17737,6 +17968,7 @@
     0xfffd;
 static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
     0xfffffff;
+static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos =
@@ -17830,11 +18062,21 @@
     AOT_SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_TypeArguments_kAllDynamicHash = 0x1;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -18646,6 +18888,7 @@
     0x7ffd;
 static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
     0x7ffffffffffffff;
+static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos =
@@ -18739,11 +18982,21 @@
     AOT_SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_TypeArguments_kAllDynamicHash = 0x1;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
     0x7ffffffffffffff;
 static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -19557,6 +19810,7 @@
     0xfffd;
 static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
     0xfffffff;
+static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos =
@@ -19650,11 +19904,21 @@
     AOT_SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_TypeArguments_kAllDynamicHash = 0x1;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -20456,6 +20720,7 @@
     0x7ffd;
 static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
     0x7ffffffffffffff;
+static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos =
@@ -20549,11 +20814,21 @@
     AOT_SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_TypeArguments_kAllDynamicHash = 0x1;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
     0x7ffffffffffffff;
 static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -21366,6 +21641,7 @@
     0x7ffd;
 static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
     0x7ffffffffffffff;
+static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos =
@@ -21459,11 +21735,21 @@
     AOT_SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_TypeArguments_kAllDynamicHash = 0x1;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
     0x7ffffffffffffff;
 static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -22272,6 +22558,7 @@
     0xfffc;
 static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
     0xfffffff;
+static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos =
@@ -22365,11 +22652,21 @@
     AOT_SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_TypeArguments_kAllDynamicHash = 0x1;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -23178,6 +23475,7 @@
     0xfffc;
 static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
     0xfffffff;
+static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos =
@@ -23271,11 +23569,21 @@
     AOT_SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_TypeArguments_kAllDynamicHash = 0x1;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -24086,6 +24394,7 @@
     0xfffd;
 static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
     0xfffffff;
+static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos =
@@ -24179,11 +24488,21 @@
     AOT_SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_TypeArguments_kAllDynamicHash = 0x1;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
     0xfffffff;
 static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
@@ -24986,6 +25305,7 @@
     0x7ffd;
 static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
     0x7ffffffffffffff;
+static constexpr dart::compiler::target::word AOT_Class_kNoTypeArguments = -1;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsPos = 0x0;
 static constexpr dart::compiler::target::word AOT_Function_kKindBitsSize = 0x5;
 static constexpr dart::compiler::target::word AOT_Function_kRecognizedBitsPos =
@@ -25079,11 +25399,21 @@
     AOT_SubtypeTestCache_kTestEntryLength = 0x8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kMaxInputs =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_SubtypeTestCache_kMaxLinearCacheSize = 0xf8;
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0x7;
+static constexpr dart::compiler::target::word
+    AOT_TypeArguments_kAllDynamicHash = 0x1;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
     0x7ffffffffffffff;
 static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kDelayedTypeArgumentsIndex = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsPos = 0x0;
+static constexpr dart::compiler::target::word
+    AOT_UntaggedClosure_kInstantiatorTypeArgumentsIndexBitsSize = 0x1;
+static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasDelayedTypeArgumentsBit = 0x0;
 static constexpr dart::compiler::target::word
     AOT_UntaggedClosure_kHasInstantiatorTypeArgumentsBit = 0x1;
diff --git a/runtime/vm/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h
index ab1bbc2..bdbe2c8 100644
--- a/runtime/vm/compiler/runtime_offsets_list.h
+++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -88,6 +88,7 @@
   CONSTANT(Array, kMaxElements)                                                \
   CONSTANT(Array, kMaxNewSpaceElements)                                        \
   CONSTANT(Context, kMaxElements)                                              \
+  CONSTANT(Class, kNoTypeArguments)                                            \
   CONSTANT(Function, kKindBitsPos)                                             \
   CONSTANT(Function, kKindBitsSize)                                            \
   CONSTANT(Function, kRecognizedBitsPos)                                       \
@@ -139,8 +140,13 @@
   CONSTANT(SubtypeTestCache, kInstantiatorTypeArguments)                       \
   CONSTANT(SubtypeTestCache, kTestEntryLength)                                 \
   CONSTANT(SubtypeTestCache, kMaxInputs)                                       \
+  CONSTANT(SubtypeTestCache, kMaxLinearCacheSize)                              \
   CONSTANT(SubtypeTestCache, kTestResult)                                      \
+  CONSTANT(TypeArguments, kAllDynamicHash)                                     \
   CONSTANT(TypeArguments, kMaxElements)                                        \
+  CONSTANT(UntaggedClosure, kDelayedTypeArgumentsIndex)                        \
+  CONSTANT(UntaggedClosure, kInstantiatorTypeArgumentsIndexBitsPos)            \
+  CONSTANT(UntaggedClosure, kInstantiatorTypeArgumentsIndexBitsSize)           \
   CONSTANT(UntaggedClosure, kHasDelayedTypeArgumentsBit)                       \
   CONSTANT(UntaggedClosure, kHasInstantiatorTypeArgumentsBit)                  \
   CONSTANT(UntaggedClosure, kHasFunctionTypeArgumentsBit)                      \
diff --git a/runtime/vm/module_snapshot.cc b/runtime/vm/module_snapshot.cc
index 33ae029..dd1ff45 100644
--- a/runtime/vm/module_snapshot.cc
+++ b/runtime/vm/module_snapshot.cc
@@ -1943,11 +1943,6 @@
   AddBaseObject(Object::uninitialized_index());
   AddBaseObject(Object::uninitialized_data());
   AddBaseObject(Object::mutable_empty_array());
-  AddBaseObject(StubCode::Subtype1TestCache());
-  AddBaseObject(StubCode::Subtype2TestCache());
-  AddBaseObject(StubCode::Subtype3TestCache());
-  AddBaseObject(StubCode::Subtype4TestCache());
-  AddBaseObject(StubCode::Subtype6TestCache());
   AddBaseObject(StubCode::InstantiateTypeArguments());
   AddBaseObject(StubCode::InitAsync());
   AddBaseObject(StubCode::InitAsyncStar());
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index be3339b..ca5cdcb 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -3161,6 +3161,10 @@
                uint8_t,
                HasDelayedTypeArgumentsBit::shift(),
                HasDelayedTypeArgumentsBit::bitsize()>;
+  static constexpr intptr_t kInstantiatorTypeArgumentsIndexBitsPos =
+      InstantiatorTypeArgumentsIndexBits::shift();
+  static constexpr intptr_t kInstantiatorTypeArgumentsIndexBitsSize =
+      InstantiatorTypeArgumentsIndexBits::bitsize();
 
   using FunctionTypeArgumentsIndexBits =
       BitField<intptr_t, uint8_t, HasFunctionTypeArgumentsBit::kNextBit, 2>;
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 4493e18..969efbb 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -854,7 +854,7 @@
   }
 }
 
-// Instantiate type.
+// Assert supertype-subtype relationship.
 // Arg0: instantiator type arguments
 // Arg1: function type arguments
 // Arg2: type to be a subtype of the other
diff --git a/tools/VERSION b/tools/VERSION
index 9a80ae2..f54cf5b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 3
 MINOR 14
 PATCH 0
-PRERELEASE 200
+PRERELEASE 201
 PRERELEASE_PATCH 0