Version 2.13.0-52.0.dev

Merge commit '109d963bf98284747454f207953599fdd7e1df59' into 'dev'
diff --git a/DEPS b/DEPS
index 2c42fa1..6b65a53 100644
--- a/DEPS
+++ b/DEPS
@@ -68,7 +68,7 @@
   "gperftools_revision": "180bfa10d7cb38e8b3784d60943d50e8fcef0dcb",
 
   # Revisions of /third_party/* dependencies.
-  "args_rev": "c3c7fd4ae728d03cd43e723f11d099b07045ad01",
+  "args_rev": "5f5082b7fcc41595d95d7ba002e8f51f352b3b4f",
   "async_rev": "376d418b1b535030fbe3369938d2ffdbb0340a77",
   "bazel_worker_rev": "060c55a933d39798681a4f533b161b81dc48d77e",
   "benchmark_harness_rev": "c546dbd9f639f75cd2f75de8df2eb9f8ea15e8e7",
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
index 0f9f928..0b2ec17 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
@@ -273,15 +273,25 @@
             if (excludeOptions is YamlList) {
               List<String>? excludeList = toStringList(excludeOptions);
               if (excludeList != null) {
+                var pathContext = resourceProvider.pathContext;
+
+                void addGlob(List<String> components) {
+                  var pattern = posix.joinAll(components);
+                  patterns.add(Glob(pattern, context: pathContext));
+                }
+
                 for (String excludedPath in excludeList) {
-                  Context context = resourceProvider.pathContext;
-                  if (context.isRelative(excludedPath)) {
-                    excludedPath = posix.joinAll([
-                      ...context.split(optionsFile.parent2.path),
-                      ...posix.split(excludedPath),
-                    ]);
+                  var excludedComponents = posix.split(excludedPath);
+                  if (pathContext.isRelative(excludedPath)) {
+                    excludedComponents = [
+                      ...pathContext.split(optionsFile.parent2.path),
+                      ...excludedComponents,
+                    ];
                   }
-                  patterns.add(Glob(excludedPath, context: context));
+                  addGlob(excludedComponents);
+                  if (excludedComponents.last == '**') {
+                    addGlob(excludedComponents..removeLast());
+                  }
                 }
               }
             }
diff --git a/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart b/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
index aecd4cc..75fd9e3 100644
--- a/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
@@ -476,16 +476,14 @@
     expect(outerRoot.packagesFile, outerPackagesFile);
   }
 
-  void test_locateRoots_options_withExclude() {
-    Folder rootFolder = newFolder('/test/outer');
-    newFolder('/test/outer/test/data');
-    File dataFile = newFile('/test/outer/test/data/test.dart');
-    File optionsFile = newOptionsFile('/test/outer', content: '''
+  void test_locateRoots_options_withExclude_someFiles() {
+    Folder rootFolder = newFolder('/test/root');
+    File optionsFile = newOptionsFile('/test/root', content: '''
 analyzer:
   exclude:
-    - test/data/**
+    - data/**.g.dart
 ''');
-    File packagesFile = newPackagesFile('/test/outer');
+    File packagesFile = newPackagesFile('/test/root');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [rootFolder.path]);
@@ -494,9 +492,114 @@
     ContextRoot root = findRoot(roots, rootFolder);
     expect(root.includedPaths, unorderedEquals([rootFolder.path]));
     expect(root.excludedPaths, isEmpty);
-    expect(root.isAnalyzed(dataFile.path), isFalse);
     expect(root.optionsFile, optionsFile);
     expect(root.packagesFile, packagesFile);
+
+    _assertNotAnalyzed(root, [
+      '/test/root/data/f.g.dart',
+      '/test/root/data/foo/f.g.dart',
+      '/test/root/data/foo/bar/f.g.dart',
+    ]);
+
+    _assertAnalyzed(root, [
+      '/test/root/f.g.dart',
+      '/test/root/data/f.dart',
+      '/test/root/data/foo/f.dart',
+      '/test/root/data/foo/bar/f.dart',
+    ]);
+  }
+
+  void test_locateRoots_options_withExclude_someFolders() {
+    Folder rootFolder = newFolder('/test/root');
+    File optionsFile = newOptionsFile('/test/root', content: '''
+analyzer:
+  exclude:
+    - data/**/foo/**
+''');
+    File packagesFile = newPackagesFile('/test/root');
+
+    List<ContextRoot> roots =
+        contextLocator.locateRoots(includedPaths: [rootFolder.path]);
+    expect(roots, hasLength(1));
+
+    ContextRoot root = findRoot(roots, rootFolder);
+    expect(root.includedPaths, unorderedEquals([rootFolder.path]));
+    expect(root.excludedPaths, isEmpty);
+    expect(root.optionsFile, optionsFile);
+    expect(root.packagesFile, packagesFile);
+
+    _assertNotAnalyzed(root, [
+      '/test/root/data/aaa/foo/f.dart',
+      '/test/root/data/aaa/foo/bar/f.dart',
+    ]);
+
+    _assertAnalyzed(root, [
+      '/test/root/f.dart',
+      '/test/root/data/f.dart',
+      '/test/root/data/foo/f.dart',
+      '/test/root/data/aaa/bar/f.dart',
+    ]);
+  }
+
+  void test_locateRoots_options_withExclude_wholeFolder() {
+    Folder rootFolder = newFolder('/test/root');
+    File optionsFile = newOptionsFile('/test/root', content: '''
+analyzer:
+  exclude:
+    - data/**
+''');
+    File packagesFile = newPackagesFile('/test/root');
+    Folder dataFolder = newFolder('/test/root/data');
+
+    List<ContextRoot> roots =
+        contextLocator.locateRoots(includedPaths: [rootFolder.path]);
+    expect(roots, hasLength(1));
+
+    ContextRoot root = findRoot(roots, rootFolder);
+    expect(root.includedPaths, unorderedEquals([rootFolder.path]));
+    expect(root.excludedPaths, unorderedEquals([dataFolder.path]));
+    expect(root.optionsFile, optionsFile);
+    expect(root.packagesFile, packagesFile);
+
+    _assertNotAnalyzed(root, [
+      '/test/root/data/f.dart',
+      '/test/root/data/foo/f.dart',
+    ]);
+
+    _assertAnalyzed(root, [
+      '/test/root/f.dart',
+    ]);
+  }
+
+  void test_locateRoots_options_withExclude_wholeFolder_withItsOptions() {
+    Folder rootFolder = newFolder('/test/root');
+    File optionsFile = newOptionsFile('/test/root', content: '''
+analyzer:
+  exclude:
+    - data/**
+''');
+    File packagesFile = newPackagesFile('/test/root');
+    Folder dataFolder = newFolder('/test/root/data');
+    newOptionsFile('/test/root/data', content: '');
+
+    List<ContextRoot> roots =
+        contextLocator.locateRoots(includedPaths: [rootFolder.path]);
+    expect(roots, hasLength(1));
+
+    ContextRoot root = findRoot(roots, rootFolder);
+    expect(root.includedPaths, unorderedEquals([rootFolder.path]));
+    expect(root.excludedPaths, unorderedEquals([dataFolder.path]));
+    expect(root.optionsFile, optionsFile);
+    expect(root.packagesFile, packagesFile);
+
+    _assertNotAnalyzed(root, [
+      '/test/root/data/f.dart',
+      '/test/root/data/foo/f.dart',
+    ]);
+
+    _assertAnalyzed(root, [
+      '/test/root/f.dart',
+    ]);
   }
 
   void test_locateRoots_single_dir_directOptions_directPackages() {
@@ -600,6 +703,20 @@
     expect(package1Root.packagesFile, packagesFile);
   }
 
+  void _assertAnalyzed(ContextRoot root, List<String> posixPathList) {
+    for (var posixPath in posixPathList) {
+      var path = convertPath(posixPath);
+      expect(root.isAnalyzed(path), isTrue, reason: path);
+    }
+  }
+
+  void _assertNotAnalyzed(ContextRoot root, List<String> posixPathList) {
+    for (var posixPath in posixPathList) {
+      var path = convertPath(posixPath);
+      expect(root.isAnalyzed(path), isFalse, reason: path);
+    }
+  }
+
   File _newPackageConfigFile(String directoryPath) {
     String path = join(
       directoryPath,
diff --git a/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart b/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart
index 5e89733..517130b 100644
--- a/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart
@@ -13,11 +13,12 @@
   });
 }
 
+/// For null safe code, `GETTER_NOT_SUBTYPE_SETTER_TYPES ` is generally reported
+/// for test cases like below, without `GETTER_NOT_ASSIGNABLE_SETTER_TYPES`.
+/// Those are covered well in their own diagnostic tests.
 @reflectiveTest
 class GetterNotAssignableSetterTypesTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
-  // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
-  //  test cases.
   test_class_instance_dynamicGetter() async {
     await assertNoErrorsInCode(r'''
 class C {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_cast_new_expr_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_cast_new_expr_test.dart
index 80347bb..5464092 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_cast_new_expr_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_cast_new_expr_test.dart
@@ -13,11 +13,12 @@
   });
 }
 
+/// For null safe code, `*_ELEMENT_TYPE_NOT_ASSIGNABLE` is generally reported
+/// for test cases like below, without `INVALID_CAST_NEW_EXPR`. Those are
+/// covered well in their own diagnostic tests.
 @reflectiveTest
 class InvalidCastNewExprTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
-  // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
-  //  test cases.
   test_listLiteral_const() async {
     await assertErrorsInCode(r'''
 const c = <B>[A()];
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_eq_eq_operator_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_eq_eq_operator_test.dart
index 34ff26a..199e8d6 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_eq_eq_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_eq_eq_operator_test.dart
@@ -5,7 +5,6 @@
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../dart/resolution/context_collection_resolution.dart';
 import 'sdk_constraint_verifier_support.dart';
 
 main() {
@@ -15,16 +14,13 @@
 }
 
 @reflectiveTest
-class SdkVersionEqEqOperatorTest extends SdkConstraintVerifierTest
-    with WithoutNullSafetyMixin {
-  // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
-  //  test cases.
+class SdkVersionEqEqOperatorTest extends SdkConstraintVerifierTest {
   test_left_equals() async {
     await verifyVersion('2.5.0', '''
 class A {
   const A();
 }
-const A a = A();
+const A? a = A();
 const c = a == null;
 ''');
   }
@@ -34,10 +30,10 @@
 class A {
   const A();
 }
-const A a = A();
+const A? a = A();
 const c = a == null;
 ''', expectedErrors: [
-      error(HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT, 54, 2),
+      error(HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT, 55, 2),
     ]);
   }
 
@@ -47,7 +43,7 @@
   const A();
 }
 const A a = A();
-const c = null == a;
+const c = 0 == a;
 ''');
   }
 
@@ -57,9 +53,9 @@
   const A();
 }
 const A a = A();
-const c = null == a;
+const c = 0 == a;
 ''', expectedErrors: [
-      error(HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT, 57, 2),
+      error(HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT, 54, 2),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart b/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart
index b580419..c9f2359 100644
--- a/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart
+++ b/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart
@@ -23,10 +23,7 @@
 }
 
 @reflectiveTest
-abstract class AbstractLinterContextTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
-  // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
-  //  test cases.
+abstract class AbstractLinterContextTest extends PubPackageResolutionTest {
   late final LinterContextImpl context;
 
   Future<void> resolve(String content) async {
diff --git a/pkg/front_end/lib/src/base/instrumentation.dart b/pkg/front_end/lib/src/base/instrumentation.dart
index 24876a6..8cf7170 100644
--- a/pkg/front_end/lib/src/base/instrumentation.dart
+++ b/pkg/front_end/lib/src/base/instrumentation.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 import 'package:kernel/ast.dart' show DartType, Member;
 import 'package:kernel/src/text_util.dart';
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/member_covariance.dart b/pkg/front_end/lib/src/fasta/kernel/member_covariance.dart
index c4901b9..b33dbcd 100644
--- a/pkg/front_end/lib/src/fasta/kernel/member_covariance.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/member_covariance.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 import 'dart:math';
 
 import 'package:kernel/ast.dart';
@@ -51,27 +49,27 @@
   /// The covariance mask for the positional parameters.
   ///
   /// If no positional parameters have covariance, this is `null`.
-  final List<int> _positionalParameters;
+  final List<int>? _positionalParameters;
 
   /// The covariance mask for the named parameters with name covariance.
   ///
   /// If no named parameters have covariance, this is `null`.
-  final Map<String, int> _namedParameters;
+  final Map<String, int>? _namedParameters;
 
   /// The generic-covariant-impl state for the type parameters.
   ///
   /// If no type parameters are generic-covariant-impl, this is `null`.
-  final List<bool> _typeParameters;
+  final List<bool>? _typeParameters;
 
   Covariance.internal(
       this._positionalParameters, this._namedParameters, this._typeParameters) {
     assert(_positionalParameters == null ||
-        _positionalParameters.any((element) => element != 0));
+        _positionalParameters!.any((element) => element != 0));
     assert(_namedParameters == null ||
-        _namedParameters.values.isNotEmpty &&
-            _namedParameters.values.every((element) => element != 0));
+        _namedParameters!.values.isNotEmpty &&
+            _namedParameters!.values.every((element) => element != 0));
     assert(
-        _typeParameters == null || _typeParameters.any((element) => element));
+        _typeParameters == null || _typeParameters!.any((element) => element));
   }
 
   /// The empty covariance.
@@ -97,7 +95,7 @@
   /// Computes the covariance for the [setter].
   factory Covariance.fromSetter(Procedure setter) {
     int covariance =
-        covarianceFromParameter(setter.function.positionalParameters.first);
+        covarianceFromParameter(setter.function!.positionalParameters.first);
     if (covariance == 0) {
       return const Covariance.empty();
     }
@@ -106,8 +104,8 @@
 
   /// Computes the covariance for the [procedure].
   factory Covariance.fromMethod(Procedure procedure) {
-    FunctionNode function = procedure.function;
-    List<int> positionalParameters;
+    FunctionNode function = procedure.function!;
+    List<int>? positionalParameters;
     if (function.positionalParameters.isNotEmpty) {
       for (int index = 0;
           index < function.positionalParameters.length;
@@ -121,18 +119,18 @@
         }
       }
     }
-    Map<String, int> namedParameters;
+    Map<String, int>? namedParameters;
     if (function.namedParameters.isNotEmpty) {
       for (int index = 0; index < function.namedParameters.length; index++) {
         VariableDeclaration parameter = function.namedParameters[index];
         int covariance = covarianceFromParameter(parameter);
         if (covariance != 0) {
           namedParameters ??= {};
-          namedParameters[parameter.name] = covariance;
+          namedParameters[parameter.name!] = covariance;
         }
       }
     }
-    List<bool> typeParameters;
+    List<bool>? typeParameters;
     if (function.typeParameters.isNotEmpty) {
       for (int index = 0; index < function.typeParameters.length; index++) {
         if (function.typeParameters[index].isGenericCovariantImpl) {
@@ -156,7 +154,8 @@
   /// If [forSetter] is `true`, the covariance is computed for the setter
   /// aspect of [member]. Otherwise, the covariance for the getter/method aspect
   /// of [member] is computed.
-  factory Covariance.fromMember(Member member, {bool forSetter}) {
+  factory Covariance.fromMember(Member member, {required bool forSetter}) {
+    // ignore: unnecessary_null_comparison
     assert(forSetter != null);
     if (member is Procedure) {
       if (member.kind == ProcedureKind.Getter) {
@@ -185,40 +184,47 @@
       _typeParameters == null;
 
   /// Returns the covariance mask for the [index]th positional parameter.
-  int getPositionalVariance(int index) =>
-      _positionalParameters != null && index < _positionalParameters.length
-          ? _positionalParameters[index]
-          : 0;
+  int getPositionalVariance(int index) {
+    List<int>? positionalParameters = _positionalParameters;
+    return positionalParameters != null && index < positionalParameters.length
+        ? positionalParameters[index]
+        : 0;
+  }
 
   /// Returns the covariance mask for the named parameter with the [name].
-  int getNamedVariance(String name) =>
-      _namedParameters != null ? (_namedParameters[name] ?? 0) : 0;
+  int getNamedVariance(String name) {
+    Map<String, int>? namedParameters = _namedParameters;
+    return namedParameters != null ? (namedParameters[name] ?? 0) : 0;
+  }
 
   /// Returns `true` if the [index]th type parameter is generic-covariant-impl.
-  bool isTypeParameterGenericCovariantImpl(int index) =>
-      _typeParameters != null && index < _typeParameters.length
-          ? _typeParameters[index]
-          : false;
+  bool isTypeParameterGenericCovariantImpl(int index) {
+    List<bool>? typeParameters = _typeParameters;
+    return typeParameters != null && index < typeParameters.length
+        ? typeParameters[index]
+        : false;
+  }
 
   /// Returns the merge of this covariance with [other] in which parameters are
   /// covariant if they are covariant in either [this] or [other].
   Covariance merge(Covariance other) {
     if (identical(this, other)) return this;
-    List<int> positionalParameters;
+    List<int>? positionalParameters;
     if (_positionalParameters == null) {
       positionalParameters = other._positionalParameters;
     } else if (other._positionalParameters == null) {
       positionalParameters = _positionalParameters;
     } else {
       positionalParameters = new List<int>.filled(
-          max(_positionalParameters.length, other._positionalParameters.length),
-          null);
+          max(_positionalParameters!.length,
+              other._positionalParameters!.length),
+          0);
       for (int index = 0; index < positionalParameters.length; index++) {
         positionalParameters[index] =
             getPositionalVariance(index) | other.getPositionalVariance(index);
       }
     }
-    Map<String, int> namedParameters;
+    Map<String, int>? namedParameters;
     if (_namedParameters == null) {
       namedParameters = other._namedParameters;
     } else if (other._namedParameters == null) {
@@ -226,22 +232,22 @@
     } else {
       namedParameters = {};
       Set<String> names = {
-        ..._namedParameters.keys,
-        ...other._namedParameters.keys
+        ..._namedParameters!.keys,
+        ...other._namedParameters!.keys
       };
       for (String name in names) {
         namedParameters[name] =
             getNamedVariance(name) | other.getNamedVariance(name);
       }
     }
-    List<bool> typeParameters;
+    List<bool>? typeParameters;
     if (_typeParameters == null) {
       typeParameters = other._typeParameters;
     } else if (other._typeParameters == null) {
       typeParameters = _typeParameters;
     } else {
       typeParameters = new List<bool>.filled(
-          max(_typeParameters.length, other._typeParameters.length), null);
+          max(_typeParameters!.length, other._typeParameters!.length), false);
       for (int index = 0; index < typeParameters.length; index++) {
         typeParameters[index] = isTypeParameterGenericCovariantImpl(index) ||
             other.isTypeParameterGenericCovariantImpl(index);
@@ -263,24 +269,26 @@
   void applyCovariance(Member member) {
     if (isEmpty) return;
     if (member is Procedure) {
-      FunctionNode function = member.function;
-      if (_positionalParameters != null) {
-        for (int index = 0; index < _positionalParameters.length; index++) {
+      FunctionNode function = member.function!;
+      List<int>? positionalParameters = _positionalParameters;
+      if (positionalParameters != null) {
+        for (int index = 0; index < positionalParameters.length; index++) {
           if (index < function.positionalParameters.length) {
-            covarianceToParameter(_positionalParameters[index],
+            covarianceToParameter(positionalParameters[index],
                 function.positionalParameters[index]);
           }
         }
       }
       if (_namedParameters != null) {
         for (VariableDeclaration parameter in function.namedParameters) {
-          covarianceToParameter(getNamedVariance(parameter.name), parameter);
+          covarianceToParameter(getNamedVariance(parameter.name!), parameter);
         }
       }
-      if (_typeParameters != null) {
-        for (int index = 0; index < _typeParameters.length; index++) {
+      List<bool>? typeParameters = _typeParameters;
+      if (typeParameters != null) {
+        for (int index = 0; index < typeParameters.length; index++) {
           if (index < function.typeParameters.length) {
-            if (_typeParameters[index]) {
+            if (typeParameters[index]) {
               function.typeParameters[index].isGenericCovariantImpl = true;
             }
           }
@@ -299,18 +307,21 @@
   @override
   int get hashCode {
     int hash = 0;
-    if (_positionalParameters != null) {
-      for (int covariance in _positionalParameters) {
+    List<int>? positionalParameters = _positionalParameters;
+    if (positionalParameters != null) {
+      for (int covariance in positionalParameters) {
         hash += covariance.hashCode * 17;
       }
     }
-    if (_namedParameters != null) {
-      for (String name in _namedParameters.keys) {
-        hash += name.hashCode * 19 + _namedParameters[name].hashCode * 23;
+    Map<String, int>? namedParameters = _namedParameters;
+    if (namedParameters != null) {
+      for (String name in namedParameters.keys) {
+        hash += name.hashCode * 19 + namedParameters[name].hashCode * 23;
       }
     }
-    if (_typeParameters != null) {
-      for (bool covariance in _typeParameters) {
+    List<bool>? typeParameters = _typeParameters;
+    if (typeParameters != null) {
+      for (bool covariance in typeParameters) {
         if (covariance) {
           hash += covariance.hashCode * 31;
         }
@@ -329,7 +340,7 @@
           return false;
         }
         int positionalParameterCount = max(
-            _positionalParameters.length, other._positionalParameters.length);
+            _positionalParameters!.length, other._positionalParameters!.length);
         for (int i = 0; i < positionalParameterCount; i++) {
           if (getPositionalVariance(i) != other.getPositionalVariance(i)) {
             return false;
@@ -341,8 +352,8 @@
           return false;
         }
         Set<String> names = {
-          ..._namedParameters.keys,
-          ...other._namedParameters.keys
+          ..._namedParameters!.keys,
+          ...other._namedParameters!.keys
         };
         for (String name in names) {
           if (getNamedVariance(name) != other.getNamedVariance(name)) {
@@ -355,7 +366,7 @@
           return false;
         }
         int typeParameterCount =
-            max(_typeParameters.length, other._typeParameters.length);
+            max(_typeParameters!.length, other._typeParameters!.length);
         for (int i = 0; i < typeParameterCount; i++) {
           if (isTypeParameterGenericCovariantImpl(i) !=
               other.isTypeParameterGenericCovariantImpl(i)) {
@@ -376,12 +387,13 @@
     } else {
       sb.write('Covariance(');
       String comma = '';
-      if (_positionalParameters != null) {
-        for (int index = 0; index < _positionalParameters.length; index++) {
-          if (_positionalParameters[index] != 0) {
+      List<int>? positionalParameters = _positionalParameters;
+      if (positionalParameters != null) {
+        for (int index = 0; index < positionalParameters.length; index++) {
+          if (positionalParameters[index] != 0) {
             sb.write(comma);
             sb.write('$index:');
-            switch (_positionalParameters[index]) {
+            switch (positionalParameters[index]) {
               case GenericCovariantImpl:
                 sb.write('GenericCovariantImpl');
                 break;
@@ -396,9 +408,10 @@
           }
         }
       }
-      if (_namedParameters != null) {
-        for (String name in _namedParameters.keys) {
-          int covariance = _namedParameters[name];
+      Map<String, int>? namedParameters = _namedParameters;
+      if (namedParameters != null) {
+        for (String name in namedParameters.keys) {
+          int covariance = namedParameters[name]!;
           if (covariance != 0) {
             sb.write(comma);
             sb.write('$name:');
@@ -418,12 +431,13 @@
           }
         }
       }
-      if (_typeParameters != null) {
+      List<bool>? typeParameters = _typeParameters;
+      if (typeParameters != null) {
         sb.write(comma);
         sb.write('types:');
         comma = '';
-        for (int index = 0; index < _typeParameters.length; index++) {
-          if (_typeParameters[index]) {
+        for (int index = 0; index < typeParameters.length; index++) {
+          if (typeParameters[index]) {
             sb.write(comma);
             sb.write('$index');
             comma = ',';
diff --git a/pkg/front_end/lib/src/fasta/names.dart b/pkg/front_end/lib/src/fasta/names.dart
index ba20ec8..229b64b 100644
--- a/pkg/front_end/lib/src/fasta/names.dart
+++ b/pkg/front_end/lib/src/fasta/names.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library front_end.src.fasta.names;
 
 import 'package:kernel/ast.dart' show Name;
diff --git a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
index a1f535a..a8d620c 100644
--- a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
@@ -180,7 +180,7 @@
 
     scope.forEach(buildBuilders);
 
-    _extension.onType = onType?.build(libraryBuilder);
+    _extension.onType = onType.build(libraryBuilder);
 
     return _extension;
   }
diff --git a/pkg/front_end/lib/src/fasta/target.dart b/pkg/front_end/lib/src/fasta/target.dart
index 82ecb31..8d2efd9 100644
--- a/pkg/front_end/lib/src/fasta/target.dart
+++ b/pkg/front_end/lib/src/fasta/target.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library fasta.target;
 
 import 'package:kernel/ast.dart' show Component;
diff --git a/pkg/front_end/lib/src/fasta/type_inference/factor_type.dart b/pkg/front_end/lib/src/fasta/type_inference/factor_type.dart
index 7e90983..ab6c5e8 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/factor_type.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/factor_type.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 import 'package:kernel/ast.dart';
 import 'package:kernel/type_environment.dart';
 
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_demotion.dart b/pkg/front_end/lib/src/fasta/type_inference/type_demotion.dart
index f391d17..9e4a88b 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_demotion.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_demotion.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
 
-// @dart = 2.9
-
 import 'package:kernel/ast.dart';
 import 'package:kernel/src/replacement_visitor.dart';
 
@@ -28,7 +26,8 @@
     for (NamedType namedParameterType in node.namedParameters) {
       if (namedParameterType.type.accept(this)) return true;
     }
-    if (node.typedefType != null && node.typedefType.accept(this)) {
+    TypedefType? typedefType = node.typedefType;
+    if (typedefType != null && typedefType.accept(this)) {
       return true;
     }
     return false;
@@ -106,12 +105,15 @@
   final bool forNonNullableByDefault;
 
   const _DemotionNullabilityNormalization(
-      {this.demoteTypeVariables, this.forNonNullableByDefault})
+      {required this.demoteTypeVariables,
+      required this.forNonNullableByDefault})
+      // ignore: unnecessary_null_comparison
       : assert(demoteTypeVariables != null),
+        // ignore: unnecessary_null_comparison
         assert(forNonNullableByDefault != null);
 
   @override
-  Nullability visitNullability(DartType node) {
+  Nullability? visitNullability(DartType node) {
     if (forNonNullableByDefault) {
       if (node.declaredNullability == Nullability.legacy) {
         return Nullability.nonNullable;
@@ -125,8 +127,8 @@
   }
 
   @override
-  DartType visitTypeParameterType(TypeParameterType node, int variance) {
-    Nullability newNullability = visitNullability(node);
+  DartType? visitTypeParameterType(TypeParameterType node, int variance) {
+    Nullability? newNullability = visitNullability(node);
     if (demoteTypeVariables && node.promotedBound != null) {
       return new TypeParameterType(
           node.parameter, newNullability ?? node.declaredNullability);
diff --git a/pkg/front_end/test/fasta/generator_to_string_test.dart b/pkg/front_end/test/fasta/generator_to_string_test.dart
index 6adfa4c..88b6146 100644
--- a/pkg/front_end/test/fasta/generator_to_string_test.dart
+++ b/pkg/front_end/test/fasta/generator_to_string_test.dart
@@ -109,7 +109,7 @@
         new ThisAccessGenerator(helper, token, false, false, false);
 
     Library library = new Library(uri);
-    Class cls = new Class();
+    Class cls = new Class(name: 'foo');
     library.addClass(cls);
     library.addProcedure(getter);
     library.addProcedure(setter);
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index fd0b0bc..eaaaf4b 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -559,12 +559,12 @@
     }
     for (int i = 0; i < classes.length; ++i) {
       Class class_ = classes[i];
-      canonicalName.getChild(class_.name!).bindTo(class_.reference);
+      canonicalName.getChild(class_.name).bindTo(class_.reference);
       class_.computeCanonicalNames();
     }
     for (int i = 0; i < extensions.length; ++i) {
       Extension extension = extensions[i];
-      canonicalName.getChild(extension.name!).bindTo(extension.reference);
+      canonicalName.getChild(extension.name).bindTo(extension.reference);
     }
   }
 
@@ -873,6 +873,7 @@
   List<Expression> annotations = const <Expression>[];
   String name;
   final List<TypeParameter> typeParameters;
+  // TODO(johnniwinther): Make this non-nullable.
   DartType? type;
 
   // The following two fields describe parameters of the underlying type when
@@ -1032,8 +1033,7 @@
   /// The name may contain characters that are not valid in a Dart identifier,
   /// in particular, the symbol '&' is used in class names generated for mixin
   /// applications.
-  // TODO(johnniwinther): Make this non-nullable.
-  String? name;
+  String name;
 
   // Must match serialized bit positions.
   static const int FlagAbstract = 1 << 0;
@@ -1231,7 +1231,7 @@
   }
 
   Class(
-      {this.name,
+      {required this.name,
       bool isAbstract: false,
       bool isAnonymousMixin: false,
       this.supertype,
@@ -1244,7 +1244,9 @@
       List<RedirectingFactoryConstructor>? redirectingFactoryConstructors,
       this.fileUri,
       Reference? reference})
-      : this.typeParameters = typeParameters ?? <TypeParameter>[],
+      // ignore: unnecessary_null_comparison
+      : assert(name != null),
+        this.typeParameters = typeParameters ?? <TypeParameter>[],
         this.implementedTypes = implementedTypes ?? <Supertype>[],
         this.fieldsInternal = fields ?? <Field>[],
         this.constructorsInternal = constructors ?? <Constructor>[],
@@ -1334,18 +1336,18 @@
 
   String get demangledName {
     if (isAnonymousMixin) return nameAsMixinApplication;
-    assert(!name!.contains('&'));
-    return name!;
+    assert(!name.contains('&'));
+    return name;
   }
 
   String get nameAsMixinApplication {
     assert(isAnonymousMixin);
-    return demangleMixinApplicationName(name!);
+    return demangleMixinApplicationName(name);
   }
 
   String get nameAsMixinApplicationSubclass {
     assert(isAnonymousMixin);
-    return demangleMixinApplicationSubclassName(name!);
+    return demangleMixinApplicationSubclassName(name);
   }
 
   /// Members declared in this class.
@@ -1520,8 +1522,7 @@
   ///
   /// If unnamed, the extension will be given a synthesized name by the
   /// front end.
-  // TODO(johnniwinther): Make this non-nullable.
-  String? name;
+  String name;
 
   /// The URI of the source file this class was loaded from.
   Uri? fileUri;
@@ -1536,8 +1537,7 @@
   ///   class A {}
   ///   extension B on A {}
   ///
-  // TODO(johnniwinther): Should this be late non-nullable?
-  DartType? onType;
+  late DartType onType;
 
   /// The members declared by the extension.
   ///
@@ -1546,16 +1546,21 @@
   final List<ExtensionMemberDescriptor> members;
 
   Extension(
-      {this.name,
+      {required this.name,
       List<TypeParameter>? typeParameters,
-      this.onType,
+      DartType? onType,
       List<ExtensionMemberDescriptor>? members,
       this.fileUri,
       Reference? reference})
-      : this.typeParameters = typeParameters ?? <TypeParameter>[],
+      // ignore: unnecessary_null_comparison
+      : assert(name != null),
+        this.typeParameters = typeParameters ?? <TypeParameter>[],
         this.members = members ?? <ExtensionMemberDescriptor>[],
         super(reference) {
     setParents(this.typeParameters, this);
+    if (onType != null) {
+      this.onType = onType;
+    }
   }
 
   Library get enclosingLibrary => parent as Library;
@@ -1569,27 +1574,24 @@
   @override
   void visitChildren(Visitor v) {
     visitList(typeParameters, v);
-    onType?.accept(v);
+    onType.accept(v);
   }
 
   @override
   void transformChildren(Transformer v) {
     v.transformList(typeParameters, this);
+    // ignore: unnecessary_null_comparison
     if (onType != null) {
-      onType = v.visitDartType(onType!);
+      onType = v.visitDartType(onType);
     }
   }
 
   @override
   void transformOrRemoveChildren(RemovingTransformer v) {
     v.transformTypeParameterList(typeParameters, this);
+    // ignore: unnecessary_null_comparison
     if (onType != null) {
-      DartType newOnType = v.visitDartType(onType!, dummyDartType);
-      if (identical(newOnType, dummyDartType)) {
-        onType = null;
-      } else {
-        onType = newOnType;
-      }
+      onType = v.visitDartType(onType, cannotRemoveSentinel);
     }
   }
 
@@ -1839,7 +1841,7 @@
   CanonicalName? get getterCanonicalName => getterReference.canonicalName;
   CanonicalName? get setterCanonicalName => setterReference?.canonicalName;
 
-  Field.mutable(Name name,
+  Field.mutable(Name? name,
       {this.type: const DynamicType(),
       this.initializer,
       bool isCovariant: false,
@@ -1863,7 +1865,7 @@
     this.transformerFlags = transformerFlags;
   }
 
-  Field.immutable(Name name,
+  Field.immutable(Name? name,
       {this.type: const DynamicType(),
       this.initializer,
       bool isCovariant: false,
@@ -2615,7 +2617,7 @@
   ProcedureStubKind stubKind;
   Reference? stubTargetReference;
 
-  Procedure(Name name, ProcedureKind kind, FunctionNode function,
+  Procedure(Name? name, ProcedureKind kind, FunctionNode function,
       {bool isAbstract: false,
       bool isStatic: false,
       bool isExternal: false,
@@ -2641,7 +2643,7 @@
             stubTargetReference:
                 getMemberReferenceBasedOnProcedureKind(stubTarget, kind));
 
-  Procedure._byReferenceRenamed(Name name, this.kind, this.function,
+  Procedure._byReferenceRenamed(Name? name, this.kind, this.function,
       {bool isAbstract: false,
       bool isStatic: false,
       bool isExternal: false,
@@ -8657,11 +8659,12 @@
 ///
 /// The frontend does not generate labeled statements without uses.
 class LabeledStatement extends Statement {
-  // TODO(johnniwinther): Make this non-nullable.
-  Statement? body;
+  late Statement body;
 
-  LabeledStatement(this.body) {
-    body?.parent = this;
+  LabeledStatement(Statement? body) {
+    if (body != null) {
+      this.body = body..parent = this;
+    }
   }
 
   @override
@@ -8673,22 +8676,24 @@
 
   @override
   void visitChildren(Visitor v) {
-    body?.accept(v);
+    body.accept(v);
   }
 
   @override
   void transformChildren(Transformer v) {
+    // ignore: unnecessary_null_comparison
     if (body != null) {
-      body = v.transform(body!);
-      body?.parent = this;
+      body = v.transform(body);
+      body.parent = this;
     }
   }
 
   @override
   void transformOrRemoveChildren(RemovingTransformer v) {
+    // ignore: unnecessary_null_comparison
     if (body != null) {
-      body = v.transformOrRemoveStatement(body!);
-      body?.parent = this;
+      body = v.transform(body);
+      body.parent = this;
     }
   }
 
@@ -8702,7 +8707,7 @@
     printer.write(printer.getLabelName(this));
     printer.write(':');
     printer.newLine();
-    printer.writeStatement(body!);
+    printer.writeStatement(body);
   }
 }
 
@@ -9204,29 +9209,26 @@
 class SwitchCase extends TreeNode {
   final List<Expression> expressions;
   final List<int> expressionOffsets;
-  // TODO(johnniwinther): Make this non-nullable.
-  Statement? body;
+  late Statement body;
   bool isDefault;
 
-  SwitchCase(this.expressions, this.expressionOffsets, this.body,
+  SwitchCase(this.expressions, this.expressionOffsets, Statement? body,
       {this.isDefault: false}) {
     setParents(expressions, this);
-    body?.parent = this;
+    if (body != null) {
+      this.body = body..parent = this;
+    }
   }
 
-  SwitchCase.defaultCase(this.body)
+  SwitchCase.defaultCase(Statement? body)
       : isDefault = true,
         expressions = <Expression>[],
         expressionOffsets = <int>[] {
-    body?.parent = this;
+    if (body != null) {
+      this.body = body..parent = this;
+    }
   }
 
-  SwitchCase.empty()
-      : expressions = <Expression>[],
-        expressionOffsets = <int>[],
-        body = null,
-        isDefault = false;
-
   @override
   R accept<R>(TreeVisitor<R> v) => v.visitSwitchCase(this);
 
@@ -9236,24 +9238,26 @@
   @override
   void visitChildren(Visitor v) {
     visitList(expressions, v);
-    body?.accept(v);
+    body.accept(v);
   }
 
   @override
   void transformChildren(Transformer v) {
     v.transformList(expressions, this);
+    // ignore: unnecessary_null_comparison
     if (body != null) {
-      body = v.transform(body!);
-      body?.parent = this;
+      body = v.transform(body);
+      body.parent = this;
     }
   }
 
   @override
   void transformOrRemoveChildren(RemovingTransformer v) {
     v.transformExpressionList(expressions, this);
+    // ignore: unnecessary_null_comparison
     if (body != null) {
-      body = v.transformOrRemoveStatement(body!);
-      body?.parent = this;
+      body = v.transform(body);
+      body.parent = this;
     }
   }
 
@@ -9294,7 +9298,7 @@
       }
     } else {
       printer.write(' ');
-      printer.writeStatement(body!);
+      printer.writeStatement(body);
     }
     printer.decIndentation();
   }
@@ -13412,7 +13416,7 @@
 /// This is used as the removal sentinel in [RemovingTransformer] and can be
 /// used for instance as a dummy initial value for the `List.filled`
 /// constructor.
-final Class dummyClass = new Class();
+final Class dummyClass = new Class(name: '');
 
 /// Non-nullable [Constructor] dummy value.
 ///
@@ -13426,7 +13430,7 @@
 /// This is used as the removal sentinel in [RemovingTransformer] and can be
 /// used for instance as a dummy initial value for the `List.filled`
 /// constructor.
-final Extension dummyExtension = new Extension();
+final Extension dummyExtension = new Extension(name: '');
 
 /// Non-nullable [Member] dummy value.
 ///
@@ -13544,7 +13548,7 @@
 /// This is used as the removal sentinel in [RemovingTransformer] and can be
 /// used for instance as a dummy initial value for the `List.filled`
 /// constructor.
-final SwitchCase dummySwitchCase = new SwitchCase.empty();
+final SwitchCase dummySwitchCase = new SwitchCase.defaultCase(dummyStatement);
 
 /// Non-nullable [Catch] dummy value.
 ///
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index f6ae627..a46ee31 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -1274,17 +1274,20 @@
     if (alwaysCreateNewNamedNodes) {
       node = null;
     }
+    Uri fileUri = readUriReference();
+    int startFileOffset = readOffset();
+    int fileOffset = readOffset();
+    int fileEndOffset = readOffset();
+    int flags = readByte();
+    String name = readStringReference();
     if (node == null) {
-      node = new Class(reference: reference)..dirty = false;
+      node = new Class(name: name, reference: reference)..dirty = false;
     }
 
-    Uri fileUri = readUriReference();
-    node.startFileOffset = readOffset();
-    node.fileOffset = readOffset();
-    node.fileEndOffset = readOffset();
-    int flags = readByte();
+    node.startFileOffset = startFileOffset;
+    node.fileOffset = fileOffset;
+    node.fileEndOffset = fileEndOffset;
     node.flags = flags;
-    String name = readStringOrNullIfEmpty();
     List<Expression> annotations = readAnnotationList(node);
     assert(() {
       debugPath.add(node.name ?? 'normal-class');
@@ -1326,13 +1329,13 @@
     if (alwaysCreateNewNamedNodes) {
       node = null;
     }
-    if (node == null) {
-      node = new Extension(reference: reference);
-    }
 
-    String name = readStringOrNullIfEmpty();
+    String name = readStringReference();
+    if (node == null) {
+      node = new Extension(name: name, reference: reference);
+    }
     assert(() {
-      debugPath.add(node.name ?? 'extension');
+      debugPath.add(name);
       return true;
     }());
 
@@ -2577,11 +2580,13 @@
     Expression expression = readExpression();
     int count = readUInt30();
     List<SwitchCase> cases = new List<SwitchCase>.generate(
-        count, (_) => new SwitchCase.empty(),
+        count,
+        (_) => new SwitchCase(<Expression>[], <int>[], dummyStatement,
+            isDefault: false),
         growable: true);
     switchCaseStack.addAll(cases);
     for (int i = 0; i < cases.length; ++i) {
-      readSwitchCaseInto(cases[i]);
+      _readSwitchCaseInto(cases[i]);
     }
     switchCaseStack.length -= count;
     return new SwitchStatement(expression, cases)..fileOffset = offset;
@@ -2640,7 +2645,7 @@
     return new FunctionDeclaration(variable, function)..fileOffset = offset;
   }
 
-  void readSwitchCaseInto(SwitchCase caseNode) {
+  void _readSwitchCaseInto(SwitchCase caseNode) {
     int length = readUInt30();
     caseNode.expressions.length = length;
     caseNode.expressionOffsets.length = length;
@@ -3196,9 +3201,9 @@
   }
 
   @override
-  void readSwitchCaseInto(SwitchCase caseNode) {
+  void _readSwitchCaseInto(SwitchCase caseNode) {
     _associateMetadata(caseNode, _byteOffset);
-    super.readSwitchCaseInto(caseNode);
+    super._readSwitchCaseInto(caseNode);
   }
 
   @override
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 979d08f..69d6fd7 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library kernel.clone;
 
 import 'ast.dart';
@@ -30,14 +28,14 @@
   /// outline elements in the source AST should be cloned to the target AST. The
   /// annotations in procedure bodies are cloned unconditionally.
   CloneVisitorNotMembers(
-      {Map<TypeParameter, DartType> typeSubstitution,
-      Map<TypeParameter, TypeParameter> typeParams,
+      {Map<TypeParameter, DartType>? typeSubstitution,
+      Map<TypeParameter, TypeParameter>? typeParams,
       this.cloneAnnotations = true})
       : this.typeSubstitution = ensureMutable(typeSubstitution),
         this.typeParams = typeParams ?? <TypeParameter, TypeParameter>{};
 
   static Map<TypeParameter, DartType> ensureMutable(
-      Map<TypeParameter, DartType> map) {
+      Map<TypeParameter, DartType>? map) {
     // We need to mutate this map, so make sure we don't use a constant map.
     if (map == null || map.isEmpty) {
       return <TypeParameter, DartType>{};
@@ -77,7 +75,7 @@
   // The currently active file uri where we are cloning [TreeNode]s from.  If
   // this is set to `null` we cannot clone file offsets to newly created nodes.
   // The [_cloneFileOffset] helper function will ensure this.
-  Uri _activeFileUri;
+  Uri? _activeFileUri;
 
   // If we don't know the file uri we are cloning elements from, it's not safe
   // to clone file offsets either.
@@ -86,22 +84,22 @@
   }
 
   T clone<T extends TreeNode>(T node) {
-    final Uri activeFileUriSaved = _activeFileUri;
+    final Uri? activeFileUriSaved = _activeFileUri;
     if (node is FileUriNode) _activeFileUri = node.fileUri ?? _activeFileUri;
     final TreeNode result = node.accept(this)
       ..fileOffset = _cloneFileOffset(node.fileOffset);
     _activeFileUri = activeFileUriSaved;
-    return result;
+    return result as T;
   }
 
-  TreeNode cloneOptional(TreeNode node) {
+  T? cloneOptional<T extends TreeNode>(T? node) {
     if (node == null) return null;
-    final Uri activeFileUriSaved = _activeFileUri;
+    final Uri? activeFileUriSaved = _activeFileUri;
     if (node is FileUriNode) _activeFileUri = node.fileUri ?? _activeFileUri;
-    TreeNode result = node?.accept(this);
+    TreeNode? result = node.accept(this);
     if (result != null) result.fileOffset = _cloneFileOffset(node.fileOffset);
     _activeFileUri = activeFileUriSaved;
-    return result;
+    return result as T?;
   }
 
   /// Root entry point for cloning a subtree within the same context where the
@@ -111,12 +109,14 @@
     _activeFileUri = _activeFileUriFromContext(node);
     final TreeNode result = clone<T>(node);
     _activeFileUri = null;
-    return result;
+    return result as T;
   }
 
-  Uri _activeFileUriFromContext(TreeNode node) {
+  Uri? _activeFileUriFromContext(TreeNode? node) {
     while (node != null) {
-      if (node is FileUriNode && node.fileUri != null) return node.fileUri;
+      if (node is FileUriNode && node.fileUri != null) {
+        return node.fileUri!;
+      }
       node = node.parent;
     }
     return null;
@@ -130,7 +130,7 @@
     return constant;
   }
 
-  DartType visitOptionalType(DartType type) {
+  DartType? visitOptionalType(DartType? type) {
     return type == null ? null : substitute(type, typeSubstitution);
   }
 
@@ -140,11 +140,11 @@
 
   visitVariableGet(VariableGet node) {
     return new VariableGet(
-        variables[node.variable], visitOptionalType(node.promotedType));
+        variables[node.variable]!, visitOptionalType(node.promotedType));
   }
 
   visitVariableSet(VariableSet node) {
-    return new VariableSet(variables[node.variable], clone(node.value));
+    return new VariableSet(variables[node.variable]!, clone(node.value));
   }
 
   visitPropertyGet(PropertyGet node) {
@@ -213,7 +213,7 @@
 
   visitConditionalExpression(ConditionalExpression node) {
     return new ConditionalExpression(clone(node.condition), clone(node.then),
-        clone(node.otherwise), visitOptionalType(node.staticType));
+        clone(node.otherwise), visitType(node.staticType));
   }
 
   visitStringConcatenation(StringConcatenation node) {
@@ -249,7 +249,7 @@
   }
 
   visitFileUriExpression(FileUriExpression node) {
-    return new FileUriExpression(clone(node.expression), _activeFileUri);
+    return new FileUriExpression(clone(node.expression), _activeFileUri!);
   }
 
   visitIsExpression(IsExpression node) {
@@ -279,7 +279,7 @@
   }
 
   visitThrow(Throw node) {
-    return new Throw(cloneOptional(node.expression));
+    return new Throw(clone(node.expression));
   }
 
   visitListLiteral(ListLiteral node) {
@@ -377,7 +377,7 @@
   }
 
   visitBreakStatement(BreakStatement node) {
-    return new BreakStatement(labels[node.target]);
+    return new BreakStatement(labels[node.target]!);
   }
 
   visitWhileStatement(WhileStatement node) {
@@ -407,7 +407,7 @@
       switchCases[switchCase] = new SwitchCase(
           switchCase.expressions.map(clone).toList(),
           new List<int>.from(switchCase.expressionOffsets),
-          null,
+          dummyStatement,
           isDefault: switchCase.isDefault);
     }
     return new SwitchStatement(
@@ -415,13 +415,13 @@
   }
 
   visitSwitchCase(SwitchCase node) {
-    SwitchCase switchCase = switchCases[node];
+    SwitchCase switchCase = switchCases[node]!;
     switchCase.body = clone(node.body)..parent = switchCase;
     return switchCase;
   }
 
   visitContinueSwitchStatement(ContinueSwitchStatement node) {
-    return new ContinueSwitchStatement(switchCases[node.target]);
+    return new ContinueSwitchStatement(switchCases[node.target]!);
   }
 
   visitIfStatement(IfStatement node) {
@@ -439,8 +439,8 @@
   }
 
   visitCatch(Catch node) {
-    VariableDeclaration newException = cloneOptional(node.exception);
-    VariableDeclaration newStackTrace = cloneOptional(node.stackTrace);
+    VariableDeclaration? newException = cloneOptional(node.exception);
+    VariableDeclaration? newStackTrace = cloneOptional(node.stackTrace);
     return new Catch(newException, clone(node.body),
         stackTrace: newStackTrace, guard: visitType(node.guard));
   }
@@ -466,12 +466,12 @@
 
   visitFunctionDeclaration(FunctionDeclaration node) {
     VariableDeclaration newVariable = clone(node.variable);
-    return new FunctionDeclaration(newVariable, clone(node.function));
+    return new FunctionDeclaration(newVariable, clone(node.function!));
   }
 
   void prepareTypeParameters(List<TypeParameter> typeParameters) {
     for (TypeParameter node in typeParameters) {
-      TypeParameter newNode = typeParams[node];
+      TypeParameter? newNode = typeParams[node];
       if (newNode == null) {
         newNode = new TypeParameter(node.name);
         typeParams[node] = newNode;
@@ -482,10 +482,10 @@
   }
 
   visitTypeParameter(TypeParameter node) {
-    TypeParameter newNode = typeParams[node];
-    newNode.bound = visitType(node.bound);
+    TypeParameter newNode = typeParams[node]!;
+    newNode.bound = visitType(node.bound!);
     if (node.defaultType != null) {
-      newNode.defaultType = visitType(node.defaultType);
+      newNode.defaultType = visitType(node.defaultType!);
     }
     return newNode
       ..annotations = cloneAnnotations && !node.annotations.isEmpty
@@ -494,7 +494,7 @@
       ..flags = node.flags;
   }
 
-  TreeNode cloneFunctionNodeBody(FunctionNode node) {
+  Statement? cloneFunctionNodeBody(FunctionNode node) {
     bool savedCloneAnnotations = this.cloneAnnotations;
     try {
       this.cloneAnnotations = true;
@@ -638,7 +638,7 @@
   TreeNode visitEqualsCall(EqualsCall node) {
     return new EqualsCall.byReference(clone(node.left), clone(node.right),
         isNot: node.isNot,
-        functionType: visitOptionalType(node.functionType),
+        functionType: visitType(node.functionType) as FunctionType,
         interfaceTargetReference: node.interfaceTargetReference);
   }
 
@@ -651,14 +651,14 @@
   TreeNode visitFunctionInvocation(FunctionInvocation node) {
     return new FunctionInvocation(
         node.kind, clone(node.receiver), clone(node.arguments),
-        functionType: visitOptionalType(node.functionType));
+        functionType: visitOptionalType(node.functionType) as FunctionType?);
   }
 
   @override
   TreeNode visitInstanceGet(InstanceGet node) {
     return new InstanceGet.byReference(
         node.kind, clone(node.receiver), node.name,
-        resultType: visitOptionalType(node.resultType),
+        resultType: visitType(node.resultType),
         interfaceTargetReference: node.interfaceTargetReference);
   }
 
@@ -666,7 +666,7 @@
   TreeNode visitInstanceInvocation(InstanceInvocation node) {
     return new InstanceInvocation.byReference(
         node.kind, clone(node.receiver), node.name, clone(node.arguments),
-        functionType: visitOptionalType(node.functionType),
+        functionType: visitType(node.functionType) as FunctionType,
         interfaceTargetReference: node.interfaceTargetReference);
   }
 
@@ -681,15 +681,15 @@
   TreeNode visitInstanceTearOff(InstanceTearOff node) {
     return new InstanceTearOff.byReference(
         node.kind, clone(node.receiver), node.name,
-        resultType: visitOptionalType(node.resultType),
+        resultType: visitType(node.resultType),
         interfaceTargetReference: node.interfaceTargetReference);
   }
 
   @override
   TreeNode visitLocalFunctionInvocation(LocalFunctionInvocation node) {
     return new LocalFunctionInvocation(
-        variables[node.variable], clone(node.arguments),
-        functionType: visitOptionalType(node.functionType));
+        variables[node.variable]!, clone(node.arguments),
+        functionType: visitType(node.functionType) as FunctionType);
   }
 
   @override
@@ -710,8 +710,8 @@
 /// supported.
 class CloneVisitorWithMembers extends CloneVisitorNotMembers {
   CloneVisitorWithMembers(
-      {Map<TypeParameter, DartType> typeSubstitution,
-      Map<TypeParameter, TypeParameter> typeParams,
+      {Map<TypeParameter, DartType>? typeSubstitution,
+      Map<TypeParameter, TypeParameter>? typeParams,
       bool cloneAnnotations = true})
       : super(
             typeSubstitution: typeSubstitution,
@@ -723,12 +723,12 @@
     return super.clone(node);
   }
 
-  Constructor cloneConstructor(Constructor node, Constructor referenceFrom) {
-    final Uri activeFileUriSaved = _activeFileUri;
+  Constructor cloneConstructor(Constructor node, Reference? reference) {
+    final Uri? activeFileUriSaved = _activeFileUri;
     _activeFileUri = node.fileUri ?? _activeFileUri;
 
     Constructor result = new Constructor(
-      super.clone(node.function),
+      super.clone(node.function!),
       name: node.name,
       isConst: node.isConst,
       isExternal: node.isExternal,
@@ -736,7 +736,7 @@
       initializers: node.initializers.map(super.clone).toList(),
       transformerFlags: node.transformerFlags,
       fileUri: _activeFileUri,
-      reference: referenceFrom?.reference,
+      reference: reference,
     )
       ..annotations = cloneAnnotations && !node.annotations.isEmpty
           ? node.annotations.map(super.clone).toList()
@@ -748,11 +748,11 @@
     return result;
   }
 
-  Procedure cloneProcedure(Procedure node, Reference reference) {
-    final Uri activeFileUriSaved = _activeFileUri;
+  Procedure cloneProcedure(Procedure node, Reference? reference) {
+    final Uri? activeFileUriSaved = _activeFileUri;
     _activeFileUri = node.fileUri ?? _activeFileUri;
     Procedure result = new Procedure(
-        node.name, node.kind, super.clone(node.function),
+        node.name, node.kind, super.clone(node.function!),
         reference: reference,
         transformerFlags: node.transformerFlags,
         fileUri: _activeFileUri,
@@ -771,8 +771,8 @@
   }
 
   Field cloneField(
-      Field node, Reference getterReference, Reference setterReference) {
-    final Uri activeFileUriSaved = _activeFileUri;
+      Field node, Reference? getterReference, Reference? setterReference) {
+    final Uri? activeFileUriSaved = _activeFileUri;
     _activeFileUri = node.fileUri ?? _activeFileUri;
 
     Field result;
@@ -809,9 +809,8 @@
   }
 
   RedirectingFactoryConstructor cloneRedirectingFactoryConstructor(
-      RedirectingFactoryConstructor node,
-      RedirectingFactoryConstructor referenceFrom) {
-    final Uri activeFileUriSaved = _activeFileUri;
+      RedirectingFactoryConstructor node, Reference? reference) {
+    final Uri? activeFileUriSaved = _activeFileUri;
     _activeFileUri = node.fileUri ?? _activeFileUri;
 
     prepareTypeParameters(node.typeParameters);
@@ -828,7 +827,7 @@
         namedParameters: node.namedParameters.map(super.clone).toList(),
         requiredParameterCount: node.requiredParameterCount,
         fileUri: _activeFileUri,
-        reference: referenceFrom?.reference)
+        reference: reference)
       ..annotations = cloneAnnotations && !node.annotations.isEmpty
           ? node.annotations.map(super.clone).toList()
           : const <Expression>[];
@@ -841,19 +840,20 @@
 /// Cloner that resolves super calls in mixin declarations.
 class MixinApplicationCloner extends CloneVisitorWithMembers {
   final Class mixinApplicationClass;
-  Map<Name, Member> _getterMap;
-  Map<Name, Member> _setterMap;
+  Map<Name, Member>? _getterMap;
+  Map<Name, Member>? _setterMap;
 
   MixinApplicationCloner(this.mixinApplicationClass,
-      {Map<TypeParameter, DartType> typeSubstitution,
-      Map<TypeParameter, TypeParameter> typeParams,
+      {Map<TypeParameter, DartType>? typeSubstitution,
+      Map<TypeParameter, TypeParameter>? typeParams,
       bool cloneAnnotations = true})
       : super(
             typeSubstitution: typeSubstitution,
             typeParams: typeParams,
             cloneAnnotations: cloneAnnotations);
 
-  Member _findSuperMember(Name name, {bool isSetter}) {
+  Member? _findSuperMember(Name name, {required bool isSetter}) {
+    // ignore: unnecessary_null_comparison
     assert(isSetter != null);
     Map<Name, Member> cache;
     if (isSetter) {
@@ -861,11 +861,11 @@
     } else {
       cache = _getterMap ??= {};
     }
-    Member member = cache[name];
+    Member? member = cache[name];
     if (member != null) {
       return member;
     }
-    Class superClass = mixinApplicationClass.superclass;
+    Class? superClass = mixinApplicationClass.superclass;
     while (superClass != null) {
       for (Procedure procedure in superClass.procedures) {
         if (procedure.name == name) {
@@ -905,21 +905,25 @@
 
   @override
   SuperMethodInvocation visitSuperMethodInvocation(SuperMethodInvocation node) {
-    SuperMethodInvocation cloned = super.visitSuperMethodInvocation(node);
-    cloned.interfaceTarget = _findSuperMember(node.name, isSetter: false);
+    SuperMethodInvocation cloned =
+        super.visitSuperMethodInvocation(node) as SuperMethodInvocation;
+    cloned.interfaceTarget =
+        _findSuperMember(node.name, isSetter: false) as Procedure?;
     return cloned;
   }
 
   @override
   SuperPropertyGet visitSuperPropertyGet(SuperPropertyGet node) {
-    SuperPropertyGet cloned = super.visitSuperPropertyGet(node);
+    SuperPropertyGet cloned =
+        super.visitSuperPropertyGet(node) as SuperPropertyGet;
     cloned.interfaceTarget = _findSuperMember(node.name, isSetter: false);
     return cloned;
   }
 
   @override
   SuperPropertySet visitSuperPropertySet(SuperPropertySet node) {
-    SuperPropertySet cloned = super.visitSuperPropertySet(node);
+    SuperPropertySet cloned =
+        super.visitSuperPropertySet(node) as SuperPropertySet;
     cloned.interfaceTarget = _findSuperMember(node.name, isSetter: true);
     return cloned;
   }
@@ -927,12 +931,12 @@
 
 class CloneProcedureWithoutBody extends CloneVisitorWithMembers {
   CloneProcedureWithoutBody(
-      {Map<TypeParameter, DartType> typeSubstitution,
+      {Map<TypeParameter, DartType>? typeSubstitution,
       bool cloneAnnotations = true})
       : super(
             typeSubstitution: typeSubstitution,
             cloneAnnotations: cloneAnnotations);
 
   @override
-  TreeNode cloneFunctionNodeBody(FunctionNode node) => null;
+  Statement? cloneFunctionNodeBody(FunctionNode node) => null;
 }
diff --git a/pkg/kernel/lib/library_index.dart b/pkg/kernel/lib/library_index.dart
index 2619b62..99ea796 100644
--- a/pkg/kernel/lib/library_index.dart
+++ b/pkg/kernel/lib/library_index.dart
@@ -141,18 +141,18 @@
       _classes = <String, _MemberTable>{};
       _classes![LibraryIndex.topLevel] = new _MemberTable.topLevel(this);
       for (Class class_ in library.classes) {
-        _classes![class_.name!] = new _MemberTable.fromClass(this, class_);
+        _classes![class_.name] = new _MemberTable.fromClass(this, class_);
       }
       for (Extension extension_ in library.extensions) {
-        _classes![extension_.name!] =
+        _classes![extension_.name] =
             new _MemberTable.fromExtension(this, extension_);
       }
       for (Reference reference in library.additionalExports) {
         NamedNode? node = reference.node;
         if (node is Class) {
-          _classes![node.name!] = new _MemberTable.fromClass(this, node);
+          _classes![node.name] = new _MemberTable.fromClass(this, node);
         } else if (node is Extension) {
-          _classes![node.name!] = new _MemberTable.fromExtension(this, node);
+          _classes![node.name] = new _MemberTable.fromExtension(this, node);
         }
       }
     }
diff --git a/pkg/kernel/lib/reference_from_index.dart b/pkg/kernel/lib/reference_from_index.dart
index 02efc1f..bf89186 100644
--- a/pkg/kernel/lib/reference_from_index.dart
+++ b/pkg/kernel/lib/reference_from_index.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 import "ast.dart"
     show
         Class,
@@ -29,15 +27,15 @@
   }
 
   /// Lookup the new library and get an index of the old library.
-  IndexedLibrary lookupLibrary(Library library) => _indexedLibraries[library];
+  IndexedLibrary? lookupLibrary(Library library) => _indexedLibraries[library];
 }
 
 abstract class IndexedContainer {
   final Map<Name, Reference> _getterReferences = new Map<Name, Reference>();
   final Map<Name, Reference> _setterReferences = new Map<Name, Reference>();
 
-  Reference lookupGetterReference(Name name) => _getterReferences[name];
-  Reference lookupSetterReference(Name name) => _setterReferences[name];
+  Reference? lookupGetterReference(Name name) => _getterReferences[name];
+  Reference? lookupSetterReference(Name name) => _setterReferences[name];
 
   Library get library;
 
@@ -48,7 +46,7 @@
   }
 
   void _addProcedure(Procedure procedure) {
-    Name name = procedure.name;
+    Name name = procedure.name!;
     if (procedure.isSetter) {
       assert(_setterReferences[name] == null);
       _setterReferences[name] = procedure.reference;
@@ -64,12 +62,12 @@
   void _addFields(List<Field> fields) {
     for (int i = 0; i < fields.length; i++) {
       Field field = fields[i];
-      Name name = field.name;
+      Name name = field.name!;
       assert(_getterReferences[name] == null);
       _getterReferences[name] = field.getterReference;
       if (field.hasSetter) {
         assert(_setterReferences[name] == null);
-        _setterReferences[name] = field.setterReference;
+        _setterReferences[name] = field.setterReference!;
       }
     }
   }
@@ -105,10 +103,10 @@
     _addFields(library.fields);
   }
 
-  Typedef lookupTypedef(String name) => _typedefs[name];
-  Class lookupClass(String name) => _classes[name];
-  IndexedClass lookupIndexedClass(String name) => _indexedClasses[name];
-  Extension lookupExtension(String name) => _extensions[name];
+  Typedef? lookupTypedef(String name) => _typedefs[name];
+  Class? lookupClass(String name) => _classes[name];
+  IndexedClass? lookupIndexedClass(String name) => _indexedClasses[name];
+  Extension? lookupExtension(String name) => _extensions[name];
 }
 
 class IndexedClass extends IndexedContainer {
@@ -118,12 +116,12 @@
   IndexedClass._(Class c, this.library) {
     for (int i = 0; i < c.constructors.length; i++) {
       Constructor constructor = c.constructors[i];
-      _constructors[constructor.name] = constructor;
+      _constructors[constructor.name!] = constructor;
     }
     for (int i = 0; i < c.procedures.length; i++) {
       Procedure procedure = c.procedures[i];
       if (procedure.isFactory) {
-        _constructors[procedure.name] = procedure;
+        _constructors[procedure.name!] = procedure;
       } else {
         _addProcedure(procedure);
       }
@@ -131,5 +129,5 @@
     _addFields(c.fields);
   }
 
-  Member lookupConstructor(Name name) => _constructors[name];
+  Member? lookupConstructor(Name name) => _constructors[name];
 }
diff --git a/pkg/kernel/lib/src/bounds_checks.dart b/pkg/kernel/lib/src/bounds_checks.dart
index c8353fa..0d15d3b 100644
--- a/pkg/kernel/lib/src/bounds_checks.dart
+++ b/pkg/kernel/lib/src/bounds_checks.dart
@@ -2,31 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 import 'package:kernel/src/replacement_visitor.dart';
 
-import '../ast.dart'
-    show
-        BottomType,
-        Class,
-        DartType,
-        DynamicType,
-        FunctionType,
-        FutureOrType,
-        InterfaceType,
-        InvalidType,
-        Library,
-        NamedType,
-        NeverType,
-        NullType,
-        Nullability,
-        TypeParameter,
-        TypeParameterType,
-        Typedef,
-        TypedefType,
-        Variance,
-        VoidType;
+import '../ast.dart' hide MapEntry;
 
 import '../type_algebra.dart' show Substitution, substitute;
 
@@ -39,20 +17,25 @@
 import 'legacy_erasure.dart';
 
 class TypeVariableGraph extends Graph<int> {
-  List<int> vertices;
+  late List<int> vertices;
   List<TypeParameter> typeParameters;
   List<DartType> bounds;
 
   // `edges[i]` is the list of indices of type variables that reference the type
   // variable with the index `i` in their bounds.
-  List<List<int>> edges;
+  late List<List<int>> edges;
 
   TypeVariableGraph(this.typeParameters, this.bounds) {
     assert(typeParameters.length == bounds.length);
 
-    vertices = new List<int>.filled(typeParameters.length, null);
+    vertices = new List<int>.filled(
+        typeParameters.length,
+        // Dummy value.
+        -1);
     Map<TypeParameter, int> typeParameterIndices = <TypeParameter, int>{};
-    edges = new List<List<int>>.filled(typeParameters.length, null);
+    edges = new List<List<int>>.filled(typeParameters.length,
+        // Dummy value.
+        const []);
     for (int i = 0; i < vertices.length; i++) {
       vertices[i] = i;
       typeParameterIndices[typeParameters[i]] = i;
@@ -64,7 +47,7 @@
           new OccurrenceCollectorVisitor(typeParameters.toSet());
       collector.visit(bounds[i]);
       for (TypeParameter typeParameter in collector.occurred) {
-        edges[typeParameterIndices[typeParameter]].add(i);
+        edges[typeParameterIndices[typeParameter]!].add(i);
       }
     }
   }
@@ -104,7 +87,7 @@
 
   void visitFunctionType(FunctionType node) {
     for (TypeParameter typeParameter in node.typeParameters) {
-      typeParameter.bound.accept(this);
+      typeParameter.bound!.accept(this);
       typeParameter.defaultType?.accept(this);
     }
     for (DartType parameter in node.positionalParameters) {
@@ -174,17 +157,18 @@
 
 List<DartType> calculateBoundsInternal(
     List<TypeParameter> typeParameters, Class objectClass,
-    {bool isNonNullableByDefault}) {
+    {required bool isNonNullableByDefault}) {
+  // ignore: unnecessary_null_comparison
   assert(isNonNullableByDefault != null);
 
   List<DartType> bounds =
-      new List<DartType>.filled(typeParameters.length, null);
+      new List<DartType>.filled(typeParameters.length, dummyDartType);
   for (int i = 0; i < typeParameters.length; i++) {
-    DartType bound = typeParameters[i].bound;
+    DartType? bound = typeParameters[i].bound;
     if (bound == null) {
       bound = const DynamicType();
     } else if (bound is InterfaceType && bound.classNode == objectClass) {
-      DartType defaultType = typeParameters[i].defaultType;
+      DartType defaultType = typeParameters[i].defaultType!;
       if (!(defaultType is InterfaceType &&
           defaultType.classNode == objectClass)) {
         bound = const DynamicType();
@@ -240,7 +224,7 @@
   final TypeParameter typeParameter;
 
   /// The enclosing type of the issue, that is, the one with [typeParameter].
-  final DartType enclosingType;
+  final DartType? enclosingType;
 
   /// The type computed from [enclosingType] for the super-boundness check.
   ///
@@ -251,7 +235,7 @@
   /// regular-bounded, so the super-boundness check is skipped.  It is set to
   /// null also if the inversion didn't change the type at all, and it's not
   /// helpful to show the same type to the user.
-  DartType invertedType;
+  DartType? invertedType;
 
   TypeArgumentIssue(
       this.index, this.argument, this.typeParameter, this.enclosingType,
@@ -287,8 +271,6 @@
 // checks for super-boundness for construction of the auxiliary type.  For
 // details see Dart Language Specification, Section 14.3.2 The Instantiation to
 // Bound Algorithm.
-// TODO(dmitryas):  Remove [typedefInstantiations] when type arguments passed to
-// typedefs are preserved in the Kernel output.
 List<TypeArgumentIssue> findTypeArgumentIssues(Library library, DartType type,
     TypeEnvironment typeEnvironment, SubtypeCheckMode subtypeCheckMode,
     {bool allowSuperBounded = false}) {
@@ -311,7 +293,7 @@
     typedefRhsResult = findTypeArgumentIssues(
         library, cloned, typeEnvironment, subtypeCheckMode,
         allowSuperBounded: true);
-    type = functionType.typedefType;
+    type = functionType.typedefType!;
   }
 
   if (type is InterfaceType) {
@@ -325,7 +307,7 @@
 
     for (TypeParameter parameter in type.typeParameters) {
       result.addAll(findTypeArgumentIssues(
-          library, parameter.bound, typeEnvironment, subtypeCheckMode,
+          library, parameter.bound!, typeEnvironment, subtypeCheckMode,
           allowSuperBounded: true));
     }
 
@@ -370,7 +352,7 @@
       // Generic function types aren't allowed as type arguments either.
       result.add(new TypeArgumentIssue(i, argument, variables[i], type));
     } else if (variables[i].bound is! InvalidType) {
-      DartType bound = substitute(variables[i].bound, substitutionMap);
+      DartType bound = substitute(variables[i].bound!, substitutionMap);
       if (!library.isNonNullableByDefault) {
         bound = legacyErasure(bound);
       }
@@ -394,7 +376,7 @@
   if (!allowSuperBounded) return result;
 
   bool isCorrectSuperBounded = true;
-  DartType invertedType =
+  DartType? invertedType =
       convertSuperBoundedToRegularBounded(library, typeEnvironment, type);
 
   // The auxiliary type is the same as [type].  At this point we know that
@@ -421,7 +403,7 @@
       // Generic function types aren't allowed as type arguments either.
       isCorrectSuperBounded = false;
     } else if (!typeEnvironment.isSubtypeOf(argument,
-        substitute(variables[i].bound, substitutionMap), subtypeCheckMode)) {
+        substitute(variables[i].bound!, substitutionMap), subtypeCheckMode)) {
       isCorrectSuperBounded = false;
     }
   }
@@ -453,16 +435,13 @@
 // checks for super-boundness for construction of the auxiliary type.  For
 // details see Dart Language Specification, Section 14.3.2 The Instantiation to
 // Bound Algorithm.
-// TODO(dmitryas):  Remove [typedefInstantiations] when type arguments passed to
-// typedefs are preserved in the Kernel output.
 List<TypeArgumentIssue> findTypeArgumentIssuesForInvocation(
     Library library,
     List<TypeParameter> parameters,
     List<DartType> arguments,
     TypeEnvironment typeEnvironment,
     SubtypeCheckMode subtypeCheckMode,
-    DartType bottomType,
-    {Map<FunctionType, List<DartType>> typedefInstantiations}) {
+    DartType bottomType) {
   assert(arguments.length == parameters.length);
   assert(bottomType == const NeverType.nonNullable() || bottomType is NullType);
   List<TypeArgumentIssue> result = <TypeArgumentIssue>[];
@@ -478,7 +457,7 @@
       // Generic function types aren't allowed as type arguments either.
       result.add(new TypeArgumentIssue(i, argument, parameters[i], null));
     } else if (parameters[i].bound is! InvalidType) {
-      DartType bound = substitute(parameters[i].bound, substitutionMap);
+      DartType bound = substitute(parameters[i].bound!, substitutionMap);
       if (!library.isNonNullableByDefault) {
         bound = legacyErasure(bound);
       }
@@ -506,7 +485,7 @@
 /// Replaces all covariant occurrences of `dynamic`, `Object`, and `void` with
 /// [BottomType] and all contravariant occurrences of `Null` and [BottomType]
 /// with `Object`.  Returns null if the converted type is the same as [type].
-DartType convertSuperBoundedToRegularBounded(
+DartType? convertSuperBoundedToRegularBounded(
     Library clientLibrary, TypeEnvironment typeEnvironment, DartType type,
     {int variance = Variance.covariant}) {
   return type.accept1(
@@ -519,8 +498,11 @@
   final TypeEnvironment typeEnvironment;
   final bool isNonNullableByDefault;
 
-  _SuperBoundedTypeInverter(this.typeEnvironment, {this.isNonNullableByDefault})
+  _SuperBoundedTypeInverter(this.typeEnvironment,
+      {required this.isNonNullableByDefault})
+      // ignore: unnecessary_null_comparison
       : assert(typeEnvironment != null),
+        // ignore: unnecessary_null_comparison
         assert(isNonNullableByDefault != null);
 
   bool flipTop(int variance) {
@@ -567,7 +549,7 @@
   }
 
   @override
-  DartType visitDynamicType(DynamicType node, int variance) {
+  DartType? visitDynamicType(DynamicType node, int variance) {
     // dynamic is always a top type.
     assert(isTop(node));
     if (flipTop(variance)) {
@@ -578,7 +560,7 @@
   }
 
   @override
-  DartType visitVoidType(VoidType node, int variance) {
+  DartType? visitVoidType(VoidType node, int variance) {
     // void is always a top type.
     assert(isTop(node));
     if (flipTop(variance)) {
@@ -589,7 +571,7 @@
   }
 
   @override
-  DartType visitInterfaceType(InterfaceType node, int variance) {
+  DartType? visitInterfaceType(InterfaceType node, int variance) {
     // Check for Object-based top types.
     if (isTop(node) && flipTop(variance)) {
       return bottomType;
@@ -599,7 +581,7 @@
   }
 
   @override
-  DartType visitFutureOrType(FutureOrType node, int variance) {
+  DartType? visitFutureOrType(FutureOrType node, int variance) {
     // Check FutureOr-based top types.
     if (isTop(node) && flipTop(variance)) {
       return bottomType;
@@ -609,7 +591,7 @@
   }
 
   @override
-  DartType visitNullType(NullType node, int variance) {
+  DartType? visitNullType(NullType node, int variance) {
     // Null isn't a bottom type in NNBD.
     if (isBottom(node) && flipBottom(variance)) {
       return topType;
@@ -619,7 +601,7 @@
   }
 
   @override
-  DartType visitNeverType(NeverType node, int variance) {
+  DartType? visitNeverType(NeverType node, int variance) {
     // Depending on the variance, Never may not be a bottom type.
     if (isBottom(node) && flipBottom(variance)) {
       return topType;
@@ -629,7 +611,7 @@
   }
 
   @override
-  DartType visitTypeParameterType(TypeParameterType node, int variance) {
+  DartType? visitTypeParameterType(TypeParameterType node, int variance) {
     // Types such as X extends Never are bottom types.
     if (isBottom(node) && flipBottom(variance)) {
       return topType;
@@ -639,7 +621,7 @@
   }
 
   @override
-  DartType visitBottomType(BottomType node, int variance) {
+  DartType? visitBottomType(BottomType node, int variance) {
     // Bottom is always a bottom type.
     assert(isBottom(node));
     if (flipBottom(variance)) {
@@ -654,15 +636,15 @@
   // TODO(dmitryas): Remove the method when the discrepancy between the NNBD
   // modes is resolved.
   @override
-  DartType visitTypedefType(TypedefType node, int variance) {
-    Nullability newNullability = visitNullability(node);
-    List<DartType> newTypeArguments = null;
+  DartType? visitTypedefType(TypedefType node, int variance) {
+    Nullability? newNullability = visitNullability(node);
+    List<DartType>? newTypeArguments = null;
     for (int i = 0; i < node.typeArguments.length; i++) {
       // The implementation of instantiate-to-bound in legacy mode ignored the
       // variance of type parameters of the typedef.  This behavior is preserved
       // here in passing the 'variance' parameter unchanged in for legacy
       // libraries.
-      DartType newTypeArgument = node.typeArguments[i].accept1(
+      DartType? newTypeArgument = node.typeArguments[i].accept1(
           this,
           isNonNullableByDefault
               ? Variance.combine(
@@ -678,15 +660,16 @@
 }
 
 int computeVariance(TypeParameter typeParameter, DartType type,
-    {Map<TypeParameter, Map<DartType, int>> computedVariances}) {
+    {Map<TypeParameter, Map<DartType, int>>? computedVariances}) {
   computedVariances ??= new Map<TypeParameter, Map<DartType, int>>.identity();
-  computedVariances[typeParameter] ??= new Map<DartType, int>.identity();
+  Map<DartType, int> variancesFromTypeParameter =
+      computedVariances[typeParameter] ??= new Map<DartType, int>.identity();
 
-  int variance = computedVariances[typeParameter][type];
+  int? variance = variancesFromTypeParameter[type];
   if (variance != null) return variance;
-  computedVariances[typeParameter][type] = VarianceCalculator._visitMarker;
+  variancesFromTypeParameter[type] = VarianceCalculator._visitMarker;
 
-  return computedVariances[typeParameter][type] =
+  return variancesFromTypeParameter[type] =
       type.accept1(new VarianceCalculator(typeParameter), computedVariances);
 }
 
@@ -742,7 +725,7 @@
       Typedef typedefNode = node.typedefNode;
       TypeParameter typedefTypeParameter = typedefNode.typeParameters[i];
       if (computedVariances.containsKey(typedefTypeParameter) &&
-          computedVariances[typedefTypeParameter][typedefNode.type] ==
+          computedVariances[typedefTypeParameter]![typedefNode.type] ==
               _visitMarker) {
         throw new StateError("The typedef '${node.typedefNode.name}' "
             "has a reference to itself.");
@@ -753,7 +736,7 @@
           Variance.combine(
               computeVariance(typeParameter, node.typeArguments[i],
                   computedVariances: computedVariances),
-              computeVariance(typedefTypeParameter, typedefNode.type,
+              computeVariance(typedefTypeParameter, typedefNode.type!,
                   computedVariances: computedVariances)));
     }
     return result;
@@ -772,7 +755,7 @@
       // variance of [typeParameter] in the entire type invariant.  The
       // invocation of the visitor below is made to simply figure out if
       // [typeParameter] occurs in the bound.
-      if (computeVariance(typeParameter, functionTypeParameter.bound,
+      if (computeVariance(typeParameter, functionTypeParameter.bound!,
               computedVariances: computedVariances) !=
           Variance.unrelated) {
         result = Variance.invariant;
diff --git a/pkg/kernel/lib/src/future_value_type.dart b/pkg/kernel/lib/src/future_value_type.dart
index a77cef5..fb7872e 100644
--- a/pkg/kernel/lib/src/future_value_type.dart
+++ b/pkg/kernel/lib/src/future_value_type.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 import '../ast.dart';
 import '../core_types.dart';
 
@@ -19,7 +17,7 @@
   /// the visitor.  If not set, an exception is thrown then an unhandled
   /// implementer of [DartType] is encountered.
   final DartType Function(DartType node, CoreTypes coreTypes,
-          DartType Function(DartType node, CoreTypes coreTypes) recursor)
+          DartType Function(DartType node, CoreTypes coreTypes) recursor)?
       unhandledTypeHandler;
 
   const FutureValueTypeVisitor({this.unhandledTypeHandler});
@@ -32,7 +30,7 @@
     if (unhandledTypeHandler == null) {
       throw new UnsupportedError("Unsupported type '${node.runtimeType}'.");
     } else {
-      return unhandledTypeHandler(node, coreTypes, visit);
+      return unhandledTypeHandler!(node, coreTypes, visit);
     }
   }
 
diff --git a/pkg/kernel/lib/src/text_util.dart b/pkg/kernel/lib/src/text_util.dart
index 873fafb..3c0f523f 100644
--- a/pkg/kernel/lib/src/text_util.dart
+++ b/pkg/kernel/lib/src/text_util.dart
@@ -85,9 +85,7 @@
 }
 
 String classNameToString(Class? node) {
-  return node == null
-      ? 'null'
-      : node.name ?? 'null-named class ${node.runtimeType} ${node.hashCode}';
+  return node == null ? 'null' : node.name;
 }
 
 String qualifiedExtensionNameToString(Extension node,
@@ -124,10 +122,7 @@
 }
 
 String extensionNameToString(Extension? node) {
-  return node == null
-      ? 'null'
-      : node.name ??
-          'null-named extension ${node.runtimeType} ${node.hashCode}';
+  return node == null ? 'null' : node.name;
 }
 
 String qualifiedTypedefNameToString(Typedef node,
diff --git a/pkg/kernel/lib/target/changed_structure_notifier.dart b/pkg/kernel/lib/target/changed_structure_notifier.dart
index 228a5d2..e1b2c7f 100644
--- a/pkg/kernel/lib/target/changed_structure_notifier.dart
+++ b/pkg/kernel/lib/target/changed_structure_notifier.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 import 'package:kernel/ast.dart' show Class;
 
 /// Meant for notifying the backend (the compiler) that the structure has
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 871f92b..c5311c3 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -112,9 +112,7 @@
 }
 
 String debugClassName(Class? node) {
-  return node == null
-      ? 'null'
-      : node.name ?? globalDebuggingNames.nameClass(node);
+  return node == null ? 'null' : node.name;
 }
 
 String debugQualifiedClassName(Class node) {
@@ -335,11 +333,11 @@
   }
 
   String getClassName(Class node) {
-    return node.name ?? syntheticNames.nameClass(node);
+    return node.name;
   }
 
   String getExtensionName(Extension node) {
-    return node.name ?? syntheticNames.nameExtension(node);
+    return node.name;
   }
 
   String getClassReference(Class node) {
@@ -500,11 +498,11 @@
       if (node is Class) {
         Library nodeLibrary = node.enclosingLibrary;
         String prefix = syntheticNames.nameLibraryPrefix(nodeLibrary);
-        write(prefix + '::' + node.name!);
+        write(prefix + '::' + node.name);
       } else if (node is Extension) {
         Library nodeLibrary = node.enclosingLibrary;
         String prefix = syntheticNames.nameLibraryPrefix(nodeLibrary);
-        write(prefix + '::' + node.name!);
+        write(prefix + '::' + node.name);
       } else if (node is Field) {
         Library nodeLibrary = node.enclosingLibrary;
         String prefix = syntheticNames.nameLibraryPrefix(nodeLibrary);
@@ -1317,7 +1315,7 @@
     writeWord(getExtensionName(node));
     writeTypeParameterList(node.typeParameters);
     writeSpaced('on');
-    writeType(node.onType!);
+    writeType(node.onType);
     String endLineString = ' {';
     if (node.enclosingLibrary.fileUri != node.fileUri) {
       endLineString += ' // from ${node.fileUri}';
diff --git a/pkg/kernel/lib/transformations/type_casts_optimizer.dart b/pkg/kernel/lib/transformations/type_casts_optimizer.dart
index 5f901e6..4df790f 100644
--- a/pkg/kernel/lib/transformations/type_casts_optimizer.dart
+++ b/pkg/kernel/lib/transformations/type_casts_optimizer.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 import 'package:kernel/ast.dart';
 import 'package:kernel/type_environment.dart'
     show StaticTypeContext, SubtypeCheckMode, TypeEnvironment;
diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
index 00dc2af..0a5ad7f 100644
--- a/pkg/kernel/lib/verifier.dart
+++ b/pkg/kernel/lib/verifier.dart
@@ -2,37 +2,35 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
 library kernel.checks;
 
 import 'ast.dart';
 import 'transformations/flags.dart';
 import 'type_environment.dart' show StatefulStaticTypeContext, TypeEnvironment;
 
-void verifyComponent(Component component, {bool isOutline, bool afterConst}) {
+void verifyComponent(Component component, {bool? isOutline, bool? afterConst}) {
   VerifyingVisitor.check(component,
       isOutline: isOutline, afterConst: afterConst);
 }
 
 class VerificationError {
-  final TreeNode context;
+  final TreeNode? context;
 
-  final TreeNode node;
+  final TreeNode? node;
 
   final String details;
 
   VerificationError(this.context, this.node, this.details);
 
   toString() {
-    Location location;
+    Location? location;
     try {
       location = node?.location ?? context?.location;
     } catch (_) {
       // TODO(ahe): Fix the compiler instead.
     }
     if (location != null) {
-      String file = location.file?.toString() ?? "";
+      String file = location.file.toString();
       return "$file:${location.line}:${location.column}: Verification error:"
           " $details";
     } else {
@@ -74,25 +72,25 @@
 
   bool inUnevaluatedConstant = false;
 
-  Library currentLibrary;
+  Library? currentLibrary;
 
-  Member currentMember;
+  Member? currentMember;
 
-  Class currentClass;
+  Class? currentClass;
 
-  Extension currentExtension;
+  Extension? currentExtension;
 
-  TreeNode currentParent;
+  TreeNode? currentParent;
 
-  TreeNode get currentClassOrExtensionOrMember =>
+  TreeNode? get currentClassOrExtensionOrMember =>
       currentMember ?? currentClass ?? currentExtension;
 
-  static void check(Component component, {bool isOutline, bool afterConst}) {
+  static void check(Component component, {bool? isOutline, bool? afterConst}) {
     component.accept(
         new VerifyingVisitor(isOutline: isOutline, afterConst: afterConst));
   }
 
-  VerifyingVisitor({bool isOutline, bool afterConst})
+  VerifyingVisitor({bool? isOutline, bool? afterConst})
       : isOutline = isOutline ?? false,
         afterConst = afterConst ?? !(isOutline ?? false);
 
@@ -113,12 +111,12 @@
     constant.visitChildren(this);
   }
 
-  problem(TreeNode node, String details, {TreeNode context}) {
+  problem(TreeNode? node, String details, {TreeNode? context}) {
     context ??= currentClassOrExtensionOrMember;
     throw new VerificationError(context, node, details);
   }
 
-  TreeNode enterParent(TreeNode node) {
+  TreeNode? enterParent(TreeNode node) {
     if (!identical(node.parent, currentParent)) {
       problem(
           node,
@@ -127,12 +125,12 @@
           " but found: '${node.parent.runtimeType}'.",
           context: currentParent);
     }
-    TreeNode oldParent = currentParent;
+    TreeNode? oldParent = currentParent;
     currentParent = node;
     return oldParent;
   }
 
-  void exitParent(TreeNode oldParent) {
+  void exitParent(TreeNode? oldParent) {
     currentParent = oldParent;
   }
 
@@ -146,7 +144,7 @@
   }
 
   void visitChildren(TreeNode node) {
-    TreeNode oldParent = enterParent(node);
+    TreeNode? oldParent = enterParent(node);
     node.visitChildren(this);
     exitParent(oldParent);
   }
@@ -247,7 +245,7 @@
   visitExtension(Extension node) {
     currentExtension = node;
     declareTypeParameters(node.typeParameters);
-    final TreeNode oldParent = enterParent(node);
+    final TreeNode? oldParent = enterParent(node);
     node.visitChildren(this);
     exitParent(oldParent);
     undeclareTypeParameters(node.typeParameters);
@@ -255,7 +253,7 @@
   }
 
   void checkTypedef(Typedef node) {
-    TypedefState state = typedefState[node];
+    TypedefState? state = typedefState[node];
     if (state == TypedefState.Done) return;
     if (state == TypedefState.BeingChecked) {
       problem(node, "The typedef '$node' refers to itself", context: node);
@@ -264,7 +262,7 @@
     typedefState[node] = TypedefState.BeingChecked;
     Set<TypeParameter> savedTypeParameters = typeParametersInScope;
     typeParametersInScope = node.typeParameters.toSet();
-    TreeNode savedParent = currentParent;
+    TreeNode? savedParent = currentParent;
     currentParent = node;
     // Visit children without checking the parent pointer on the typedef itself
     // since this can be called from a context other than its true parent.
@@ -282,14 +280,14 @@
 
   visitField(Field node) {
     currentMember = node;
-    TreeNode oldParent = enterParent(node);
+    TreeNode? oldParent = enterParent(node);
     bool isTopLevel = node.parent == currentLibrary;
     if (isTopLevel && !node.isStatic) {
-      problem(node, "The top-level field '${node.name.text}' should be static",
+      problem(node, "The top-level field '${node.name!.text}' should be static",
           context: node);
     }
     if (node.isConst && !node.isStatic) {
-      problem(node, "The const field '${node.name.text}' should be static",
+      problem(node, "The const field '${node.name!.text}' should be static",
           context: node);
     }
     bool isImmutable = node.isLate
@@ -298,7 +296,7 @@
     if (isImmutable == node.hasSetter) {
       if (node.hasSetter) {
         problem(node,
-            "The immutable field '${node.name.text}' has a setter reference",
+            "The immutable field '${node.name!.text}' has a setter reference",
             context: node);
       } else {
         if (isOutline && node.isLate) {
@@ -308,7 +306,7 @@
           // whether it has an initializer or not.
         } else {
           problem(node,
-              "The mutable field '${node.name.text}' has no setter reference",
+              "The mutable field '${node.name!.text}' has no setter reference",
               context: node);
         }
       }
@@ -324,7 +322,7 @@
 
   visitProcedure(Procedure node) {
     currentMember = node;
-    TreeNode oldParent = enterParent(node);
+    TreeNode? oldParent = enterParent(node);
     classTypeParametersAreInScope = !node.isStatic;
     if (node.isAbstract && node.isExternal) {
       problem(node, "Procedure cannot be both abstract and external.");
@@ -365,7 +363,7 @@
           "Only forwarding stubs can have a forwarding stub super target "
           "$node.");
     }
-    node.function.accept(this);
+    node.function!.accept(this);
     classTypeParametersAreInScope = false;
     visitList(node.annotations, this);
     exitParent(oldParent);
@@ -377,9 +375,9 @@
     classTypeParametersAreInScope = true;
     // The constructor member needs special treatment due to parameters being
     // in scope in the initializer list.
-    TreeNode oldParent = enterParent(node);
+    TreeNode? oldParent = enterParent(node);
     int stackHeight = enterLocalScope();
-    visitChildren(node.function);
+    visitChildren(node.function!);
     visitList(node.initializers, this);
     if (!isOutline) {
       checkInitializers(node);
@@ -395,7 +393,7 @@
   visitClass(Class node) {
     currentClass = node;
     declareTypeParameters(node.typeParameters);
-    TreeNode oldParent = enterParent(node);
+    TreeNode? oldParent = enterParent(node);
     classTypeParametersAreInScope = false;
     visitList(node.annotations, this);
     classTypeParametersAreInScope = true;
@@ -414,7 +412,7 @@
     AsyncMarker savedAsyncMarker = currentAsyncMarker;
     currentAsyncMarker = node.asyncMarker;
     if (!isOutline &&
-        currentMember.isNonNullableByDefault &&
+        currentMember!.isNonNullableByDefault &&
         node.asyncMarker == AsyncMarker.Async &&
         node.futureValueType == null) {
       problem(node,
@@ -468,7 +466,7 @@
     int stackHeight = enterLocalScope();
     // Do not visit the block directly because the value expression needs to
     // be in its scope.
-    TreeNode oldParent = enterParent(node);
+    TreeNode? oldParent = enterParent(node);
     enterParent(node.body);
     for (int i = 0; i < node.body.statements.length; ++i) {
       node.body.statements[i].accept(this);
@@ -532,7 +530,7 @@
   }
 
   visitVariableDeclaration(VariableDeclaration node) {
-    TreeNode parent = node.parent;
+    TreeNode? parent = node.parent;
     if (parent is! Block &&
         !(parent is Catch && parent.body != node) &&
         !(parent is FunctionNode && parent.body != node) &&
@@ -549,7 +547,7 @@
     visitChildren(node);
     declareVariable(node);
     if (afterConst && node.isConst) {
-      Expression initializer = node.initializer;
+      Expression? initializer = node.initializer;
       if (!(initializer is InvalidExpression ||
           initializer is ConstantExpression &&
               initializer.constant is UnevaluatedConstant)) {
@@ -574,6 +572,7 @@
   @override
   visitStaticGet(StaticGet node) {
     visitChildren(node);
+    // ignore: unnecessary_null_comparison
     if (node.target == null) {
       problem(node, "StaticGet without target.");
     }
@@ -599,6 +598,7 @@
   @override
   visitStaticSet(StaticSet node) {
     visitChildren(node);
+    // ignore: unnecessary_null_comparison
     if (node.target == null) {
       problem(node, "StaticSet without target.");
     }
@@ -633,19 +633,20 @@
 
   void checkTargetedInvocation(Member target, InvocationExpression node) {
     visitChildren(node);
+    // ignore: unnecessary_null_comparison
     if (target == null) {
       problem(node, "${node.runtimeType} without target.");
     }
     if (target.function == null) {
       problem(node, "${node.runtimeType} without function.");
     }
-    if (!areArgumentsCompatible(node.arguments, target.function)) {
+    if (!areArgumentsCompatible(node.arguments, target.function!)) {
       problem(node,
           "${node.runtimeType} with incompatible arguments for '${target}'.");
     }
     int expectedTypeParameters = target is Constructor
-        ? target.enclosingClass.typeParameters.length
-        : target.function.typeParameters.length;
+        ? target.enclosingClass!.typeParameters.length
+        : target.function!.typeParameters.length;
     if (node.arguments.types.length != expectedTypeParameters) {
       problem(
           node,
@@ -657,7 +658,7 @@
   @override
   visitConstructorInvocation(ConstructorInvocation node) {
     checkTargetedInvocation(node.target, node);
-    if (node.target.enclosingClass.isAbstract) {
+    if (node.target.enclosingClass!.isAbstract) {
       problem(node, "ConstructorInvocation of abstract class.");
     }
     if (node.isConst && !node.target.isConst) {
@@ -723,12 +724,13 @@
 
   @override
   visitContinueSwitchStatement(ContinueSwitchStatement node) {
+    // ignore: unnecessary_null_comparison
     if (node.target == null) {
       problem(node, "No target.");
     } else if (node.target.parent == null) {
       problem(node, "Target has no parent.");
     } else {
-      SwitchStatement statement = node.target.parent;
+      SwitchStatement statement = node.target.parent as SwitchStatement;
       for (SwitchCase switchCase in statement.cases) {
         if (switchCase == node.target) return;
       }
@@ -749,7 +751,7 @@
     }
     Set<Class> superClasses = <Class>{};
     int fieldCount = 0;
-    for (Class cls = constant.classNode; cls != null; cls = cls.superclass) {
+    for (Class? cls = constant.classNode; cls != null; cls = cls.superclass) {
       superClasses.add(cls);
       for (Field f in cls.fields) {
         if (!f.isStatic && !f.isConst) fieldCount++;
@@ -780,7 +782,7 @@
     }
     bool savedInUnevaluatedConstant = inUnevaluatedConstant;
     inUnevaluatedConstant = true;
-    TreeNode oldParent = currentParent;
+    TreeNode? oldParent = currentParent;
     currentParent = null;
     constant.expression.accept(this);
     currentParent = oldParent;
@@ -840,11 +842,11 @@
     }
     if (node.classNode.isAnonymousMixin) {
       if (currentParent is FunctionNode) {
-        TreeNode functionNodeParent = currentParent.parent;
+        TreeNode? functionNodeParent = currentParent!.parent;
         if (functionNodeParent is Constructor ||
             functionNodeParent is Procedure &&
                 functionNodeParent.kind == ProcedureKind.Factory) {
-          if (functionNodeParent.parent == node.classNode) {
+          if (functionNodeParent!.parent == node.classNode) {
             // We only allow references to anonymous mixins in types as the
             // return type of its own constructor.
             return;
@@ -876,7 +878,7 @@
 
 class VerifyGetStaticType extends RecursiveVisitor {
   final TypeEnvironment env;
-  Member currentMember;
+  Member? currentMember;
   final StatefulStaticTypeContext _staticTypeContext;
 
   VerifyGetStaticType(this.env)
@@ -934,7 +936,7 @@
     node.accept(new CheckParentPointers(node.parent));
   }
 
-  TreeNode parent;
+  TreeNode? parent;
 
   CheckParentPointers([this.parent]);
 
@@ -947,7 +949,7 @@
           "is '${node.parent.runtimeType}' "
           "but should be '${parent.runtimeType}'.");
     }
-    TreeNode oldParent = parent;
+    TreeNode? oldParent = parent;
     parent = node;
     node.visitChildren(this);
     parent = oldParent;
diff --git a/runtime/lib/stacktrace.cc b/runtime/lib/stacktrace.cc
index 545a3d3..2c75f02 100644
--- a/runtime/lib/stacktrace.cc
+++ b/runtime/lib/stacktrace.cc
@@ -18,35 +18,25 @@
 
 static const intptr_t kDefaultStackAllocation = 8;
 
-static StackTracePtr CreateStackTraceObject(
-    Zone* zone,
-    const GrowableObjectArray& code_list,
-    const GrowableArray<uword>& pc_offset_list) {
-  const auto& code_array =
-      Array::Handle(zone, Array::MakeFixedLength(code_list));
-  const auto& pc_offset_array = TypedData::Handle(
-      zone, TypedData::New(kUintPtrCid, pc_offset_list.length()));
-  {
-    NoSafepointScope no_safepoint;
-    memmove(pc_offset_array.DataAddr(0), pc_offset_list.data(),
-            pc_offset_list.length() * kWordSize);
-  }
-  return StackTrace::New(code_array, pc_offset_array);
-}
-
 static StackTracePtr CurrentSyncStackTraceLazy(Thread* thread,
                                                intptr_t skip_frames = 1) {
   Zone* zone = thread->zone();
 
   const auto& code_array = GrowableObjectArray::ZoneHandle(
       zone, GrowableObjectArray::New(kDefaultStackAllocation));
-  GrowableArray<uword> pc_offset_array;
+  const auto& pc_offset_array = GrowableObjectArray::ZoneHandle(
+      zone, GrowableObjectArray::New(kDefaultStackAllocation));
 
   // Collect the frames.
-  StackTraceUtils::CollectFramesLazy(thread, code_array, &pc_offset_array,
+  StackTraceUtils::CollectFramesLazy(thread, code_array, pc_offset_array,
                                      skip_frames);
 
-  return CreateStackTraceObject(zone, code_array, pc_offset_array);
+  const auto& code_array_fixed =
+      Array::Handle(zone, Array::MakeFixedLength(code_array));
+  const auto& pc_offset_array_fixed =
+      Array::Handle(zone, Array::MakeFixedLength(pc_offset_array));
+
+  return StackTrace::New(code_array_fixed, pc_offset_array_fixed);
 }
 
 static StackTracePtr CurrentSyncStackTrace(Thread* thread,
@@ -61,8 +51,8 @@
   // Allocate once.
   const Array& code_array =
       Array::ZoneHandle(zone, Array::New(stack_trace_length));
-  const TypedData& pc_offset_array = TypedData::ZoneHandle(
-      zone, TypedData::New(kUintPtrCid, stack_trace_length));
+  const Array& pc_offset_array =
+      Array::ZoneHandle(zone, Array::New(stack_trace_length));
 
   // Collect the frames.
   const intptr_t collected_frames_count = StackTraceUtils::CollectFrames(
@@ -99,7 +89,7 @@
 }
 
 static void AppendFrames(const GrowableObjectArray& code_list,
-                         GrowableArray<uword>* pc_offset_list,
+                         const GrowableObjectArray& pc_offset_list,
                          int skip_frames) {
   Thread* thread = Thread::Current();
   Zone* zone = thread->zone();
@@ -108,6 +98,7 @@
   StackFrame* frame = frames.NextFrame();
   ASSERT(frame != NULL);  // We expect to find a dart invocation frame.
   Code& code = Code::Handle(zone);
+  Smi& offset = Smi::Handle(zone);
   for (; frame != NULL; frame = frames.NextFrame()) {
     if (!frame->IsDartFrame()) {
       continue;
@@ -118,9 +109,9 @@
     }
 
     code = frame->LookupDartCode();
-    const intptr_t pc_offset = frame->pc() - code.PayloadStart();
+    offset = Smi::New(frame->pc() - code.PayloadStart());
     code_list.Add(code);
-    pc_offset_list->Add(pc_offset);
+    pc_offset_list.Add(offset);
   }
 }
 
@@ -128,14 +119,16 @@
 //
 // Skips the first skip_frames Dart frames.
 const StackTrace& GetCurrentStackTrace(int skip_frames) {
-  Zone* zone = Thread::Current()->zone();
   const GrowableObjectArray& code_list =
-      GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
-  GrowableArray<uword> pc_offset_list;
-  AppendFrames(code_list, &pc_offset_list, skip_frames);
-
-  const StackTrace& stacktrace = StackTrace::Handle(
-      zone, CreateStackTraceObject(zone, code_list, pc_offset_list));
+      GrowableObjectArray::Handle(GrowableObjectArray::New());
+  const GrowableObjectArray& pc_offset_list =
+      GrowableObjectArray::Handle(GrowableObjectArray::New());
+  AppendFrames(code_list, pc_offset_list, skip_frames);
+  const Array& code_array = Array::Handle(Array::MakeFixedLength(code_list));
+  const Array& pc_offset_array =
+      Array::Handle(Array::MakeFixedLength(pc_offset_list));
+  const StackTrace& stacktrace =
+      StackTrace::Handle(StackTrace::New(code_array, pc_offset_array));
   return stacktrace;
 }
 
diff --git a/runtime/vm/code_patcher_arm.cc b/runtime/vm/code_patcher_arm.cc
index 2fc5361..0947b58 100644
--- a/runtime/vm/code_patcher_arm.cc
+++ b/runtime/vm/code_patcher_arm.cc
@@ -96,8 +96,9 @@
     const Code& caller_code,
     const Object& data,
     const Code& target) {
+  ASSERT(caller_code.ContainsInstructionAt(return_address));
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
-    BareSwitchableCallPattern call(return_address);
+    BareSwitchableCallPattern call(return_address, caller_code);
     call.SetData(data);
     call.SetTarget(target);
   } else {
@@ -109,8 +110,9 @@
 
 uword CodePatcher::GetSwitchableCallTargetEntryAt(uword return_address,
                                                   const Code& caller_code) {
+  ASSERT(caller_code.ContainsInstructionAt(return_address));
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
-    BareSwitchableCallPattern call(return_address);
+    BareSwitchableCallPattern call(return_address, caller_code);
     return call.target_entry();
   } else {
     SwitchableCallPattern call(return_address, caller_code);
@@ -120,8 +122,9 @@
 
 ObjectPtr CodePatcher::GetSwitchableCallDataAt(uword return_address,
                                                const Code& caller_code) {
+  ASSERT(caller_code.ContainsInstructionAt(return_address));
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
-    BareSwitchableCallPattern call(return_address);
+    BareSwitchableCallPattern call(return_address, caller_code);
     return call.data();
   } else {
     SwitchableCallPattern call(return_address, caller_code);
diff --git a/runtime/vm/code_patcher_arm64.cc b/runtime/vm/code_patcher_arm64.cc
index c399fd1..b7590db 100644
--- a/runtime/vm/code_patcher_arm64.cc
+++ b/runtime/vm/code_patcher_arm64.cc
@@ -132,8 +132,9 @@
     const Code& caller_code,
     const Object& data,
     const Code& target) {
+  ASSERT(caller_code.ContainsInstructionAt(return_address));
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
-    BareSwitchableCallPattern call(return_address);
+    BareSwitchableCallPattern call(return_address, caller_code);
     call.SetData(data);
     call.SetTarget(target);
   } else {
@@ -145,8 +146,9 @@
 
 uword CodePatcher::GetSwitchableCallTargetEntryAt(uword return_address,
                                                   const Code& caller_code) {
+  ASSERT(caller_code.ContainsInstructionAt(return_address));
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
-    BareSwitchableCallPattern call(return_address);
+    BareSwitchableCallPattern call(return_address, caller_code);
     return call.target_entry();
   } else {
     SwitchableCallPattern call(return_address, caller_code);
@@ -156,8 +158,9 @@
 
 ObjectPtr CodePatcher::GetSwitchableCallDataAt(uword return_address,
                                                const Code& caller_code) {
+  ASSERT(caller_code.ContainsInstructionAt(return_address));
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
-    BareSwitchableCallPattern call(return_address);
+    BareSwitchableCallPattern call(return_address, caller_code);
     return call.data();
   } else {
     SwitchableCallPattern call(return_address, caller_code);
diff --git a/runtime/vm/code_patcher_x64.cc b/runtime/vm/code_patcher_x64.cc
index ce1d9f2..1ba005f 100644
--- a/runtime/vm/code_patcher_x64.cc
+++ b/runtime/vm/code_patcher_x64.cc
@@ -220,8 +220,10 @@
 //   call target.entry           call stub.entry         call stub.entry
 class SwitchableCallBase : public ValueObject {
  public:
-  explicit SwitchableCallBase(const ObjectPool& object_pool)
-      : object_pool_(object_pool), target_index_(-1), data_index_(-1) {}
+  explicit SwitchableCallBase(const Code& code)
+      : object_pool_(ObjectPool::Handle(code.GetObjectPool())),
+        target_index_(-1),
+        data_index_(-1) {}
 
   intptr_t data_index() const { return data_index_; }
   intptr_t target_index() const { return target_index_; }
@@ -235,7 +237,7 @@
   }
 
  protected:
-  const ObjectPool& object_pool_;
+  ObjectPool& object_pool_;
   intptr_t target_index_;
   intptr_t data_index_;
 
@@ -249,9 +251,8 @@
 // monomorphic function or a stub code.
 class SwitchableCall : public SwitchableCallBase {
  public:
-  SwitchableCall(uword return_address, const Code& caller_code)
-      : SwitchableCallBase(ObjectPool::Handle(caller_code.GetObjectPool())) {
-    ASSERT(caller_code.ContainsInstructionAt(return_address));
+  SwitchableCall(uword return_address, const Code& code)
+      : SwitchableCallBase(code) {
     uword pc = return_address;
 
     // callq RCX
@@ -332,9 +333,11 @@
 // of the monomorphic function or a stub entry point.
 class BareSwitchableCall : public SwitchableCallBase {
  public:
-  explicit BareSwitchableCall(uword return_address)
-      : SwitchableCallBase(ObjectPool::Handle(
-            IsolateGroup::Current()->object_store()->global_object_pool())) {
+  BareSwitchableCall(uword return_address, const Code& code)
+      : SwitchableCallBase(code) {
+    object_pool_ = ObjectPool::RawCast(
+        IsolateGroup::Current()->object_store()->global_object_pool());
+
     uword pc = return_address;
 
     // callq RCX
@@ -486,8 +489,9 @@
     const Code& caller_code,
     const Object& data,
     const Code& target) {
+  ASSERT(caller_code.ContainsInstructionAt(return_address));
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
-    BareSwitchableCall call(return_address);
+    BareSwitchableCall call(return_address, caller_code);
     call.SetData(data);
     call.SetTarget(target);
   } else {
@@ -499,8 +503,9 @@
 
 uword CodePatcher::GetSwitchableCallTargetEntryAt(uword return_address,
                                                   const Code& caller_code) {
+  ASSERT(caller_code.ContainsInstructionAt(return_address));
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
-    BareSwitchableCall call(return_address);
+    BareSwitchableCall call(return_address, caller_code);
     return call.target_entry();
   } else {
     SwitchableCall call(return_address, caller_code);
@@ -510,8 +515,9 @@
 
 ObjectPtr CodePatcher::GetSwitchableCallDataAt(uword return_address,
                                                const Code& caller_code) {
+  ASSERT(caller_code.ContainsInstructionAt(return_address));
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
-    BareSwitchableCall call(return_address);
+    BareSwitchableCall call(return_address, caller_code);
     return call.data();
   } else {
     SwitchableCall call(return_address, caller_code);
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm64.cc b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
index c2adf98..6bef2d7 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
@@ -95,8 +95,14 @@
 void AsmIntrinsifier::Integer_addFromInteger(Assembler* assembler,
                                              Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);  // Checks two smis.
-  __ adds(R0, R0, Operand(R1));                      // Adds.
+#if !defined(DART_COMPRESSED_POINTERS)
+  __ adds(R0, R0, Operand(R1));  // Add.
   __ b(normal_ir_body, VS);  // Fall-through on overflow.
+#else
+  __ addsw(R0, R0, Operand(R1));  // Add (32-bit).
+  __ b(normal_ir_body, VS);       // Fall-through on overflow.
+  __ sxtw(R0, R0);                // Sign extend.
+#endif
   __ ret();
   __ Bind(normal_ir_body);
 }
@@ -108,16 +114,28 @@
 void AsmIntrinsifier::Integer_subFromInteger(Assembler* assembler,
                                              Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
+#if !defined(DART_COMPRESSED_POINTERS)
   __ subs(R0, R0, Operand(R1));  // Subtract.
   __ b(normal_ir_body, VS);      // Fall-through on overflow.
+#else
+  __ subsw(R0, R0, Operand(R1));  // Subtract (32-bit).
+  __ b(normal_ir_body, VS);       // Fall-through on overflow.
+  __ sxtw(R0, R0);                // Sign extend.
+#endif
   __ ret();
   __ Bind(normal_ir_body);
 }
 
 void AsmIntrinsifier::Integer_sub(Assembler* assembler, Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
+#if !defined(DART_COMPRESSED_POINTERS)
   __ subs(R0, R1, Operand(R0));  // Subtract.
   __ b(normal_ir_body, VS);      // Fall-through on overflow.
+#else
+  __ subsw(R0, R1, Operand(R0));  // Subtract (32-bit).
+  __ b(normal_ir_body, VS);       // Fall-through on overflow.
+  __ sxtw(R0, R0);                // Sign extend.
+#endif
   __ ret();
   __ Bind(normal_ir_body);
 }
@@ -127,9 +145,15 @@
   TestBothArgumentsSmis(assembler, normal_ir_body);  // checks two smis
   __ SmiUntag(R0);  // Untags R6. We only want result shifted by one.
 
+#if !defined(DART_COMPRESSED_POINTERS)
   __ mul(TMP, R0, R1);
   __ smulh(TMP2, R0, R1);
   // TMP: result bits 64..127.
+#else
+  __ smull(TMP, R0, R1);
+  __ AsrImmediate(TMP2, TMP, 31);
+  // TMP: result bits 32..63.
+#endif
   __ cmp(TMP2, Operand(TMP, ASR, 63));
   __ b(normal_ir_body, NE);
   __ mov(R0, TMP);
@@ -246,7 +270,11 @@
 
   // Check the corner case of dividing the 'MIN_SMI' with -1, in which case we
   // cannot tag the result.
+#if !defined(DART_COMPRESSED_POINTERS)
   __ CompareImmediate(R0, 0x4000000000000000);
+#else
+  __ CompareImmediate(R0, 0x40000000);
+#endif
   __ b(normal_ir_body, EQ);
   __ SmiTag(R0);  // Not equal. Okay to tag and return.
   __ ret();       // Return.
@@ -257,8 +285,14 @@
                                      Label* normal_ir_body) {
   __ ldr(R0, Address(SP, +0 * target::kWordSize));  // Grab first argument.
   __ BranchIfNotSmi(R0, normal_ir_body);
+#if !defined(DART_COMPRESSED_POINTERS)
   __ negs(R0, R0);
   __ b(normal_ir_body, VS);
+#else
+  __ negsw(R0, R0);
+  __ b(normal_ir_body, VS);
+  __ sxtw(R0, R0);
+#endif
   __ ret();
   __ Bind(normal_ir_body);
 }
@@ -318,9 +352,15 @@
   // Check if count too large for handling it inlined.
   __ SmiUntag(TMP, right);  // SmiUntag right into TMP.
   // Overflow test (preserve left, right, and TMP);
+#if !defined(DART_COMPRESSED_POINTERS)
   __ lslv(temp, left, TMP);
   __ asrv(TMP2, temp, TMP);
   __ CompareRegisters(left, TMP2);
+#else
+  __ lslvw(temp, left, TMP);
+  __ asrvw(TMP2, temp, TMP);
+  __ cmpw(left, Operand(TMP2));
+#endif
   __ b(normal_ir_body, NE);  // Overflow.
   // Shift for result now we know there is no overflow.
   __ lslv(result, left, TMP);
@@ -1283,7 +1323,11 @@
   __ BranchIfNotSmi(R0, normal_ir_body);
   // Is Smi.
   __ SmiUntag(R0);
+#if !defined(DART_COMPRESSED_POINTERS)
   __ scvtfdx(V0, R0);
+#else
+  __ scvtfdw(V0, R0);
+#endif
   const Class& double_class = DoubleClass();
   __ TryAllocate(double_class, normal_ir_body, R0, R1);
   __ StoreDFieldToOffset(V0, R0, target::Double::value_offset());
@@ -1356,11 +1400,20 @@
   __ fcmpd(V0, V0);
   __ b(normal_ir_body, VS);
 
+#if !defined(DART_COMPRESSED_POINTERS)
   __ fcvtzdsx(R0, V0);
   // Overflow is signaled with minint.
   // Check for overflow and that it fits into Smi.
   __ CompareImmediate(R0, 0xC000000000000000);
   __ b(normal_ir_body, MI);
+#else
+  __ fcvtzdsw(R0, V0);
+  // Overflow is signaled with minint.
+  // Check for overflow and that it fits into Smi.
+  __ AsrImmediate(TMP, R0, 30);
+  __ cmp(TMP, Operand(R0, ASR, 63));
+  __ b(normal_ir_body, NE);
+#endif
   __ SmiTag(R0);
   __ ret();
   __ Bind(normal_ir_body);
@@ -1378,18 +1431,31 @@
   __ fcmpd(V0, V0);
   __ b(&double_hash, VS);
 
+#if !defined(DART_COMPRESSED_POINTERS)
   // Convert double value to signed 64-bit int in R0 and back to a
   // double value in V1.
   __ fcvtzdsx(R0, V0);
   __ scvtfdx(V1, R0);
+#else
+  // Convert double value to signed 32-bit int in R0 and back to a
+  // double value in V1.
+  __ fcvtzdsw(R0, V0);
+  __ scvtfdw(V1, R0);
+#endif
 
   // Tag the int as a Smi, making sure that it fits; this checks for
   // overflow in the conversion from double to int. Conversion
   // overflow is signalled by fcvt through clamping R0 to either
   // INT64_MAX or INT64_MIN (saturation).
   ASSERT(kSmiTag == 0 && kSmiTagShift == 1);
+#if !defined(DART_COMPRESSED_POINTERS)
   __ adds(R0, R0, Operand(R0));
   __ b(normal_ir_body, VS);
+#else
+  __ addsw(R0, R0, Operand(R0));
+  __ b(normal_ir_body, VS);
+  __ sxtw(R0, R0);  // Sign extend.
+#endif
 
   // Compare the two double values. If they are equal, we return the
   // Smi tagged result immediately as the hash code.
diff --git a/runtime/vm/compiler/asm_intrinsifier_x64.cc b/runtime/vm/compiler/asm_intrinsifier_x64.cc
index 8cf9a76..7df68fa 100644
--- a/runtime/vm/compiler/asm_intrinsifier_x64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_x64.cc
@@ -94,8 +94,14 @@
                                              Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   // RAX contains right argument.
+#if !defined(DART_COMPRESSED_POINTERS)
   __ addq(RAX, Address(RSP, +2 * target::kWordSize));
   __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
+#else
+  __ addl(RAX, Address(RSP, +2 * target::kWordSize));
+  __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
+  __ movsxd(RAX, RAX);
+#endif
   // Result is in RAX.
   __ ret();
   __ Bind(normal_ir_body);
@@ -109,8 +115,14 @@
                                              Label* normal_ir_body) {
   TestBothArgumentsSmis(assembler, normal_ir_body);
   // RAX contains right argument, which is the actual minuend of subtraction.
+#if !defined(DART_COMPRESSED_POINTERS)
   __ subq(RAX, Address(RSP, +2 * target::kWordSize));
   __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
+#else
+  __ subl(RAX, Address(RSP, +2 * target::kWordSize));
+  __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
+  __ movsxd(RAX, RAX);
+#endif
   // Result is in RAX.
   __ ret();
   __ Bind(normal_ir_body);
@@ -121,8 +133,14 @@
   // RAX contains right argument, which is the actual subtrahend of subtraction.
   __ movq(RCX, RAX);
   __ movq(RAX, Address(RSP, +2 * target::kWordSize));
+#if !defined(DART_COMPRESSED_POINTERS)
   __ subq(RAX, RCX);
   __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
+#else
+  __ subl(RAX, RCX);
+  __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
+  __ movsxd(RAX, RAX);
+#endif
   // Result is in RAX.
   __ ret();
   __ Bind(normal_ir_body);
@@ -134,8 +152,14 @@
   // RAX is the right argument.
   ASSERT(kSmiTag == 0);  // Adjust code below if not the case.
   __ SmiUntag(RAX);
+#if !defined(DART_COMPRESSED_POINTERS)
   __ imulq(RAX, Address(RSP, +2 * target::kWordSize));
   __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
+#else
+  __ imull(RAX, Address(RSP, +2 * target::kWordSize));
+  __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
+  __ movsxd(RAX, RAX);
+#endif
   // Result is in RAX.
   __ ret();
   __ Bind(normal_ir_body);
@@ -179,6 +203,7 @@
 
   __ Bind(&try_modulo);
 
+#if !defined(DART_COMPRESSED_POINTERS)
   // Check if both operands fit into 32bits as idiv with 64bit operands
   // requires twice as many cycles and has much higher latency. We are checking
   // this before untagging them to avoid corner case dividing INT_MAX by -1 that
@@ -189,6 +214,7 @@
   __ movsxd(RBX, RCX);
   __ cmpq(RBX, RCX);
   __ j(NOT_EQUAL, &not_32bit, Assembler::kNearJump);
+#endif
 
   // Both operands are 31bit smis. Divide using 32bit idiv.
   __ SmiUntag(RAX);
@@ -196,6 +222,7 @@
   __ cdq();
   __ idivl(RCX);
   __ movsxd(RAX, RDX);
+#if !defined(DART_COMPRESSED_POINTERS)
   __ jmp(&done, Assembler::kNearJump);
 
   // Divide using 64bit idiv.
@@ -206,6 +233,7 @@
   __ idivq(RCX);
   __ movq(RAX, RDX);
   __ Bind(&done);
+#endif
 }
 
 // Implementation:
@@ -262,6 +290,7 @@
   __ movq(RAX,
           Address(RSP, +2 * target::kWordSize));  // Left argument (dividend).
 
+#if !defined(DART_COMPRESSED_POINTERS)
   // Check if both operands fit into 32bits as idiv with 64bit operands
   // requires twice as many cycles and has much higher latency. We are checking
   // this before untagging them to avoid corner case dividing INT_MAX by -1 that
@@ -296,6 +325,21 @@
   __ j(EQUAL, normal_ir_body);
   __ SmiTag(RAX);
   __ ret();
+#else
+  // Check the corner case of dividing the 'MIN_SMI' with -1, in which case we
+  // cannot tag the result.
+  __ cmpq(RAX, Immediate(target::ToRawSmi(target::kSmiMin)));
+  __ j(EQUAL, normal_ir_body);
+
+  // Both operands are 31bit smis. Divide using 32bit idiv.
+  __ SmiUntag(RAX);
+  __ SmiUntag(RCX);
+  __ cdq();
+  __ idivl(RCX);
+  __ SmiTag(RAX);  // Result is guaranteed to fit into a smi.
+  __ movsxd(RAX, RAX);
+  __ ret();
+#endif
   __ Bind(normal_ir_body);
 }
 
@@ -304,8 +348,14 @@
   __ movq(RAX, Address(RSP, +1 * target::kWordSize));
   __ testq(RAX, Immediate(kSmiTagMask));
   __ j(NOT_ZERO, normal_ir_body, Assembler::kNearJump);  // Non-smi value.
+#if !defined(DART_COMPRESSED_POINTERS)
   __ negq(RAX);
   __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
+#else
+  __ negl(RAX);
+  __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
+  __ movsxd(RAX, RAX);
+#endif
   // Result is in RAX.
   __ ret();
   __ Bind(normal_ir_body);
@@ -371,8 +421,14 @@
 
   // Overflow test - all the shifted-out bits must be same as the sign bit.
   __ movq(RDI, RAX);
+#if !defined(DART_COMPRESSED_POINTERS)
   __ shlq(RAX, RCX);
   __ sarq(RAX, RCX);
+#else
+  __ shll(RAX, RCX);
+  __ sarl(RAX, RCX);
+  __ movsxd(RAX, RAX);
+#endif
   __ cmpq(RAX, RDI);
   __ j(NOT_EQUAL, &overflow, Assembler::kNearJump);
 
@@ -383,7 +439,7 @@
 
   __ Bind(&overflow);
   // Mint is rarely used on x64 (only for integers requiring 64 bit instead of
-  // 63 bits as represented by Smi).
+  // 63 or 31 bits as represented by Smi).
   __ Bind(normal_ir_body);
 }
 
@@ -1219,7 +1275,11 @@
   __ j(NOT_ZERO, normal_ir_body);
   // Is Smi.
   __ SmiUntag(RAX);
+#if !defined(DART_COMPRESSED_POINTER)
   __ cvtsi2sdq(XMM0, RAX);
+#else
+  __ cvtsi2sdl(XMM0, RAX);
+#endif
   const Class& double_class = DoubleClass();
   __ TryAllocate(double_class, normal_ir_body, Assembler::kFarJump,
                  RAX,  // Result register.
@@ -1291,13 +1351,26 @@
                                       Label* normal_ir_body) {
   __ movq(RAX, Address(RSP, +1 * target::kWordSize));
   __ movsd(XMM0, FieldAddress(RAX, target::Double::value_offset()));
+#if !defined(DART_COMPRESSED_POINTERS)
   __ cvttsd2siq(RAX, XMM0);
+#else
+  __ cvttsd2sil(RAX, XMM0);
+#endif
   // Overflow is signalled with minint.
   // Check for overflow and that it fits into Smi.
   __ movq(RCX, RAX);
+#if !defined(DART_COMPRESSED_POINTERS)
   __ shlq(RCX, Immediate(1));
+#else
+  __ shll(RCX, Immediate(1));
+#endif
   __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
+#if !defined(DART_COMPRESSED_POINTERS)
   __ SmiTag(RAX);
+#else
+  ASSERT((kSmiTagShift == 1) && (kSmiTag == 0));
+  __ movsxd(RAX, RCX);
+#endif
   __ ret();
   __ Bind(normal_ir_body);
 }
@@ -1310,15 +1383,26 @@
   // back to a double in XMM1.
   __ movq(RCX, Address(RSP, +1 * target::kWordSize));
   __ movsd(XMM0, FieldAddress(RCX, target::Double::value_offset()));
+#if !defined(DART_COMPRESSED_POINTERS)
   __ cvttsd2siq(RAX, XMM0);
   __ cvtsi2sdq(XMM1, RAX);
+#else
+  __ cvttsd2sil(RAX, XMM0);
+  __ cvtsi2sdl(XMM1, RAX);
+#endif
 
   // Tag the int as a Smi, making sure that it fits; this checks for
   // overflow and NaN in the conversion from double to int. Conversion
   // overflow from cvttsd2si is signalled with an INT64_MIN value.
   ASSERT(kSmiTag == 0 && kSmiTagShift == 1);
+#if !defined(DART_COMPRESSED_POINTERS)
   __ addq(RAX, RAX);
   __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
+#else
+  __ addl(RAX, RAX);
+  __ j(OVERFLOW, normal_ir_body, Assembler::kNearJump);
+  __ movsxd(RAX, RAX);
+#endif
 
   // Compare the two double values. If they are equal, we return the
   // Smi tagged result immediately as the hash code.
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index af87467..503fa52 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -928,6 +928,26 @@
   vmuls(vd, vd, VTMP);
 }
 
+void Assembler::LoadCompressed(Register dest,
+                               const Address& slot,
+                               CanBeSmi can_value_be_smi) {
+#if !defined(DART_COMPRESSED_POINTERS)
+  ldr(dest, slot);
+#else
+  Label done;
+  ldr(dest, slot, kFourBytes);  // Sign-extension.
+  if (can_value_be_smi == kValueCanBeSmi) {
+    BranchIfSmi(dest, &done);
+  }
+  add(dest, dest, Operand(HEAP_BASE));
+  Bind(&done);
+
+  // After further Smi changes:
+  // ldr(dest, slot, kUnsignedFourBytes);  // Zero-extension.
+  // add(dest, dest, Operand(HEAP_BASE));
+#endif
+}
+
 // Preserves object and value registers.
 void Assembler::StoreIntoObjectFilter(Register object,
                                       Register value,
@@ -1263,6 +1283,9 @@
   ldr(BARRIER_MASK,
       compiler::Address(THR, target::Thread::write_barrier_mask_offset()));
   ldr(NULL_REG, compiler::Address(THR, target::Thread::object_null_offset()));
+#if defined(DART_COMPRESSED_POINTERS)
+  ldr(HEAP_BASE, compiler::Address(THR, target::Thread::heap_base_offset()));
+#endif
 }
 
 void Assembler::SetupGlobalPoolAndDispatchTable() {
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index 1d6a830..3c44731 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -926,12 +926,16 @@
             OperandSize sz = kEightBytes) {
     EmitMiscDP3Source(MSUB, rd, rn, rm, ra, sz);
   }
+  // Signed Multiply High
+  // rd <- (rn * rm)[127:64]
   void smulh(Register rd,
              Register rn,
              Register rm,
              OperandSize sz = kEightBytes) {
     EmitMiscDP3Source(SMULH, rd, rn, rm, R31, sz);
   }
+  // Unsigned Multiply High
+  // rd <- (rn * rm)[127:64]
   void umulh(Register rd,
              Register rn,
              Register rm,
@@ -945,6 +949,8 @@
               OperandSize sz = kEightBytes) {
     EmitMiscDP3Source(UMADDL, rd, rn, rm, ra, sz);
   }
+  // Unsigned Multiply Long
+  // rd:uint64 <- rn:uint32 * rm:uint32
   void umull(Register rd,
              Register rn,
              Register rm,
@@ -958,6 +964,8 @@
               OperandSize sz = kEightBytes) {
     EmitMiscDP3Source(SMADDL, rd, rn, rm, ra, sz);
   }
+  // Signed Multiply Long
+  // rd:int64 <- rn:int32 * rm:int32
   void smull(Register rd,
              Register rn,
              Register rm,
@@ -1653,6 +1661,10 @@
     kValueCanBeSmi,
   };
 
+  void LoadCompressed(Register dest,
+                      const Address& slot,
+                      CanBeSmi can_value_be_smi = kValueCanBeSmi);
+
   // Store into a heap object and apply the generational and incremental write
   // barriers. All stores into heap objects must pass through this function or,
   // if the value can be proven either Smi or old-and-premarked, its NoBarrier
diff --git a/runtime/vm/compiler/assembler/assembler_arm64_test.cc b/runtime/vm/compiler/assembler/assembler_arm64_test.cc
index 29ed087..600d64b 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64_test.cc
@@ -2526,16 +2526,19 @@
   __ Push(THR);
   __ Push(BARRIER_MASK);
   __ Push(NULL_REG);
+  __ Push(HEAP_BASE);
   __ TagAndPushPP();
   __ ldr(CODE_REG, Address(R0, VMHandles::kOffsetOfRawPtrInHandle));
   __ mov(THR, R1);
   __ ldr(BARRIER_MASK, Address(THR, Thread::write_barrier_mask_offset()));
   __ ldr(NULL_REG, Address(THR, Thread::object_null_offset()));
+  __ ldr(HEAP_BASE, Address(THR, Thread::heap_base_offset()));
   __ LoadPoolPointer(PP);
 }
 
 static void LeaveTestFrame(Assembler* assembler) {
   __ PopAndUntagPP();
+  __ Pop(HEAP_BASE);
   __ Pop(NULL_REG);
   __ Pop(BARRIER_MASK);
   __ Pop(THR);
diff --git a/runtime/vm/compiler/assembler/assembler_x64.cc b/runtime/vm/compiler/assembler/assembler_x64.cc
index 03122d3..7a616d9 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64.cc
@@ -1339,6 +1339,26 @@
   }
 }
 
+void Assembler::LoadCompressed(Register dest,
+                               const Address& slot,
+                               CanBeSmi can_value_be_smi) {
+#if !defined(DART_COMPRESSED_POINTERS)
+  movq(dest, slot);
+#else
+  Label done;
+  movsxd(dest, slot);  // (movslq) Sign-extension.
+  if (can_value_be_smi == kValueCanBeSmi) {
+    BranchIfSmi(dest, &done, kNearJump);
+  }
+  addq(dest, Address(THR, target::Thread::heap_base_offset()));
+  Bind(&done);
+
+  // After further Smi changes:
+  // movl(dest, slot);  // Zero-extension.
+  // addq(dest, Address(THR, target::Thread::heap_base_offset());
+#endif
+}
+
 // Destroys the value register.
 void Assembler::StoreIntoObjectFilter(Register object,
                                       Register value,
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index 08f870b..cffa9e9 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -767,6 +767,10 @@
     kValueCanBeSmi,
   };
 
+  void LoadCompressed(Register dest,
+                      const Address& slot,
+                      CanBeSmi can_value_be_smi = kValueCanBeSmi);
+
   // Store into a heap object and apply the generational and incremental write
   // barriers. All stores into heap objects must pass through this function or,
   // if the value can be proven either Smi or old-and-premarked, its NoBarrier
diff --git a/runtime/vm/compiler/assembler/disassembler.cc b/runtime/vm/compiler/assembler/disassembler.cc
index 9e19290..78ae30b 100644
--- a/runtime/vm/compiler/assembler/disassembler.cc
+++ b/runtime/vm/compiler/assembler/disassembler.cc
@@ -457,9 +457,6 @@
 void Disassembler::DisassembleCode(const Function& function,
                                    const Code& code,
                                    bool optimized) {
-  if (code.IsUnknownDartCode()) {
-    return;
-  }
   TextBuffer buffer(128);
   const char* function_fullname = function.ToFullyQualifiedCString();
   buffer.Printf("%s", Function::KindToCString(function.kind()));
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index b90b712..f1f8f02 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -2173,7 +2173,7 @@
 static intptr_t RepresentationBits(Representation r) {
   switch (r) {
     case kTagged:
-      return compiler::target::kBitsPerWord - 1;
+      return compiler::target::kSmiBits + 1;
     case kUnboxedInt32:
     case kUnboxedUint32:
       return 32;
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index f27870d..48ba834 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -5744,7 +5744,8 @@
   intptr_t element_count() const { return element_count_; }
 
   bool can_pack_into_smi() const {
-    return element_count() <= kSmiBits / (index_scale() * kBitsPerByte);
+    return element_count() <=
+           compiler::target::kSmiBits / (index_scale() * kBitsPerByte);
   }
 
   virtual bool ComputeCanDeoptimize() const { return false; }
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index 8a6897e..cc4cc66 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -1785,6 +1785,7 @@
       index.reg(), TMP);
   __ ldr(result, element_address, sz);
 
+  ASSERT(can_pack_into_smi());
   __ SmiTag(result);
 }
 
@@ -3358,17 +3359,29 @@
     const Object& constant = locs.in(1).constant();
     ASSERT(constant.IsSmi());
     // Immediate shift operation takes 6 bits for the count.
+#if !defined(DART_COMPRESSED_POINTERS)
     const intptr_t kCountLimit = 0x3F;
+#else
+    const intptr_t kCountLimit = 0x1F;
+#endif
     const intptr_t value = Smi::Cast(constant).Value();
     ASSERT((0 < value) && (value < kCountLimit));
     if (shift_left->can_overflow()) {
       // Check for overflow (preserve left).
+#if !defined(DART_COMPRESSED_POINTERS)
       __ LslImmediate(TMP, left, value);
       __ cmp(left, compiler::Operand(TMP, ASR, value));
+#else
+      __ LslImmediate(TMP, left, value, compiler::kFourBytes);
+      __ cmpw(left, compiler::Operand(TMP, ASR, value));
+#endif
       __ b(deopt, NE);  // Overflow.
     }
     // Shift for result now we know there is no overflow.
     __ LslImmediate(result, left, value);
+#if defined(DART_COMPRESSED_POINTERS)
+    __ sxtw(result, result);
+#endif
     return;
   }
 
@@ -3387,7 +3400,8 @@
         __ mov(result, ZR);
         return;
       }
-      const intptr_t max_right = kSmiBits - Utils::HighestBit(left_int);
+      const intptr_t max_right =
+          compiler::target::kSmiBits - Utils::HighestBit(left_int);
       const bool right_needs_check =
           !RangeUtils::IsWithin(right_range, 0, max_right - 1);
       if (right_needs_check) {
@@ -3396,6 +3410,9 @@
       }
       __ SmiUntag(TMP, right);
       __ lslv(result, left, TMP);
+#if defined(DART_COMPRESSED_POINTERS)
+      __ sxtw(result, result);
+#endif
     }
     return;
   }
@@ -3430,9 +3447,15 @@
     __ SmiUntag(TMP, right);
     // Overflow test (preserve left, right, and TMP);
     const Register temp = locs.temp(0).reg();
+#if !defined(DART_COMPRESSED_POINTERS)
     __ lslv(temp, left, TMP);
     __ asrv(TMP2, temp, TMP);
     __ CompareRegisters(left, TMP2);
+#else
+    __ lslvw(temp, left, TMP);
+    __ asrvw(TMP2, temp, TMP);
+    __ cmpw(left, compiler::Operand(TMP2));
+#endif
     __ b(deopt, NE);  // Overflow.
     // Shift for result now we know there is no overflow.
     __ lslv(result, left, TMP);
@@ -3516,18 +3539,34 @@
 
   switch (op_kind()) {
     case Token::kADD:
+#if !defined(DART_COMPRESSED_POINTERS)
       __ adds(result, left, compiler::Operand(right));
+#else
+      __ addsw(result, left, compiler::Operand(right));
+      __ sxtw(result, result);
+#endif
       __ b(slow_path->entry_label(), VS);
       break;
     case Token::kSUB:
+#if !defined(DART_COMPRESSED_POINTERS)
       __ subs(result, left, compiler::Operand(right));
+#else
+      __ subsw(result, left, compiler::Operand(right));
+      __ sxtw(result, result);
+#endif
       __ b(slow_path->entry_label(), VS);
       break;
     case Token::kMUL:
       __ SmiUntag(TMP, left);
+#if !defined(DART_COMPRESSED_POINTERS)
       __ mul(result, TMP, right);
       __ smulh(TMP, TMP, right);
       // TMP: result bits 64..127.
+#else
+      __ smull(result, TMP, right);
+      __ AsrImmediate(TMP, result, 31);
+      // TMP: result bits 32..63.
+#endif
       __ cmp(TMP, compiler::Operand(result, ASR, 63));
       __ b(slow_path->entry_label(), NE);
       break;
@@ -3551,8 +3590,13 @@
 
       __ SmiUntag(TMP, right);
       __ lslv(result, left, TMP);
+#if !defined(DART_COMPRESSED_POINTERS)
       __ asrv(TMP2, result, TMP);
       __ CompareRegisters(left, TMP2);
+#else
+      __ asrvw(TMP2, result, TMP);
+      __ cmp(left, compiler::Operand(TMP2, SXTW, 0));
+#endif
       __ b(slow_path->entry_label(), NE);  // Overflow.
       break;
     case Token::kSHR:
@@ -3781,21 +3825,37 @@
     switch (op_kind()) {
       case Token::kADD: {
         if (deopt == NULL) {
+          // When we can't overflow, prefer 64-bit op to 32-bit op followed by
+          // sign extension.
           __ AddImmediate(result, left, imm);
         } else {
+#if !defined(DART_COMPRESSED_POINTERS)
           __ AddImmediateSetFlags(result, left, imm);
           __ b(deopt, VS);
+#else
+          __ AddImmediateSetFlags(result, left, imm, compiler::kFourBytes);
+          __ b(deopt, VS);
+          __ sxtw(result, result);
+#endif
         }
         break;
       }
       case Token::kSUB: {
         if (deopt == NULL) {
+          // When we can't overflow, prefer 64-bit op to 32-bit op followed by
+          // sign extension.
           __ AddImmediate(result, left, -imm);
         } else {
           // Negating imm and using AddImmediateSetFlags would not detect the
           // overflow when imm == kMinInt64.
+#if !defined(DART_COMPRESSED_POINTERS)
           __ SubImmediateSetFlags(result, left, imm);
           __ b(deopt, VS);
+#else
+          __ SubImmediateSetFlags(result, left, imm, compiler::kFourBytes);
+          __ b(deopt, VS);
+          __ sxtw(result, result);
+#endif
         }
         break;
       }
@@ -3803,10 +3863,19 @@
         // Keep left value tagged and untag right value.
         const intptr_t value = Smi::Cast(constant).Value();
         __ LoadImmediate(TMP, value);
+#if !defined(DART_COMPRESSED_POINTERS)
         __ mul(result, left, TMP);
+#else
+        __ smull(result, left, TMP);
+#endif
         if (deopt != NULL) {
+#if !defined(DART_COMPRESSED_POINTERS)
           __ smulh(TMP, left, TMP);
           // TMP: result bits 64..127.
+#else
+          __ AsrImmediate(TMP, result, 31);
+          // TMP: result bits 32..63.
+#endif
           __ cmp(TMP, compiler::Operand(result, ASR, 63));
           __ b(deopt, NE);
         }
@@ -3865,8 +3934,14 @@
       if (deopt == NULL) {
         __ add(result, left, compiler::Operand(right));
       } else {
+#if !defined(DART_COMPRESSED_POINTERS)
         __ adds(result, left, compiler::Operand(right));
         __ b(deopt, VS);
+#else
+        __ addsw(result, left, compiler::Operand(right));
+        __ b(deopt, VS);
+        __ sxtw(result, result);
+#endif
       }
       break;
     }
@@ -3874,19 +3949,32 @@
       if (deopt == NULL) {
         __ sub(result, left, compiler::Operand(right));
       } else {
+#if !defined(DART_COMPRESSED_POINTERS)
         __ subs(result, left, compiler::Operand(right));
         __ b(deopt, VS);
+#else
+        __ subsw(result, left, compiler::Operand(right));
+        __ b(deopt, VS);
+        __ sxtw(result, result);
+#endif
       }
       break;
     }
     case Token::kMUL: {
       __ SmiUntag(TMP, left);
-      if (deopt == NULL) {
-        __ mul(result, TMP, right);
-      } else {
-        __ mul(result, TMP, right);
+#if !defined(DART_COMPRESSED_POINTERS)
+      __ mul(result, TMP, right);
+#else
+      __ smull(result, TMP, right);
+#endif
+      if (deopt != NULL) {
+#if !defined(DART_COMPRESSED_POINTERS)
         __ smulh(TMP, TMP, right);
         // TMP: result bits 64..127.
+#else
+        __ AsrImmediate(TMP, result, 31);
+        // TMP: result bits 32..63.
+#endif
         __ cmp(TMP, compiler::Operand(result, ASR, 63));
         __ b(deopt, NE);
       }
@@ -3921,7 +4009,11 @@
       if (RangeUtils::Overlaps(right_range(), -1, -1)) {
         // Check the corner case of dividing the 'MIN_SMI' with -1, in which
         // case we cannot tag the result.
+#if !defined(DART_COMPRESSED_POINTERS)
         __ CompareImmediate(result, 0x4000000000000000LL);
+#else
+        __ CompareImmediate(result, 0x40000000LL);
+#endif
         __ b(deopt, EQ);
       }
       __ SmiTag(result);
@@ -4196,12 +4288,24 @@
                                                         bool opt) const {
   ASSERT((from_representation() == kUnboxedInt32) ||
          (from_representation() == kUnboxedUint32));
+#if !defined(DART_COMPRESSED_POINTERS)
+  // ValueFitsSmi() may be overly conservative and false because we only
+  // perform range analysis during optimized compilation.
+  const bool kMayAllocateMint = false;
+#else
+  const bool kMayAllocateMint = !ValueFitsSmi();
+#endif
   const intptr_t kNumInputs = 1;
-  const intptr_t kNumTemps = 0;
+  const intptr_t kNumTemps = kMayAllocateMint ? 1 : 0;
   LocationSummary* summary = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
+      LocationSummary(zone, kNumInputs, kNumTemps,
+                      kMayAllocateMint ? LocationSummary::kCallOnSlowPath
+                                       : LocationSummary::kNoCall);
   summary->set_in(0, Location::RequiresRegister());
   summary->set_out(0, Location::RequiresRegister());
+  if (kMayAllocateMint) {
+    summary->set_temp(0, Location::RequiresRegister());
+  }
   return summary;
 }
 
@@ -4210,6 +4314,7 @@
   Register out = locs()->out(0).reg();
   ASSERT(value != out);
 
+#if !defined(DART_COMPRESSED_POINTERS)
   ASSERT(compiler::target::kSmiBits >= 32);
   if (from_representation() == kUnboxedInt32) {
     __ sbfiz(out, value, kSmiTagSize, 32);
@@ -4217,6 +4322,41 @@
     ASSERT(from_representation() == kUnboxedUint32);
     __ ubfiz(out, value, kSmiTagSize, 32);
   }
+#else
+  compiler::Label done;
+  if (from_representation() == kUnboxedInt32) {
+    ASSERT(kSmiTag == 0);
+    // Signed Bitfield Insert in Zero instruction extracts the 31 significant
+    // bits from a Smi.
+    __ sbfiz(out, value, kSmiTagSize, 32 - kSmiTagSize);
+    if (ValueFitsSmi()) {
+      return;
+    }
+    __ cmp(out, compiler::Operand(value, LSL, 1));
+    __ b(&done, EQ);  // Jump if the sbfiz instruction didn't lose info.
+  } else {
+    ASSERT(from_representation() == kUnboxedUint32);
+    // A 32 bit positive Smi has one tag bit and one unused sign bit,
+    // leaving only 30 bits for the payload.
+    __ ubfiz(out, value, kSmiTagSize, compiler::target::kSmiBits);
+    if (ValueFitsSmi()) {
+      return;
+    }
+    __ TestImmediate(value, 0xC0000000);
+    __ b(&done, EQ);  // Jump if both bits are zero.
+  }
+
+  Register temp = locs()->temp(0).reg();
+  BoxAllocationSlowPath::Allocate(compiler, this, compiler->mint_class(), out,
+                                  temp);
+  if (from_representation() == kUnboxedInt32) {
+    __ sxtw(temp, value);  // Sign-extend.
+  } else {
+    __ ubfiz(temp, value, 0, 32);  // Zero extend word.
+  }
+  __ StoreToOffset(temp, out, Mint::value_offset() - kHeapObjectTag);
+  __ Bind(&done);
+#endif
 }
 
 LocationSummary* BoxInt64Instr::MakeLocationSummary(Zone* zone,
@@ -4265,11 +4405,19 @@
     return;
   }
   ASSERT(kSmiTag == 0);
-  __ adds(out, in, compiler::Operand(in));  // SmiTag
   compiler::Label done;
+#if !defined(DART_COMPRESSED_POINTERS)
+  __ adds(out, in, compiler::Operand(in));  // SmiTag
   // If the value doesn't fit in a smi, the tagging changes the sign,
   // which causes the overflow flag to be set.
   __ b(&done, NO_OVERFLOW);
+#else
+  __ LslImmediate(out, in, kSmiTagSize,
+                  compiler::kFourBytes);  // SmiTag (32-bit);
+  __ sxtw(out, out);                      // Sign-extend.
+  __ cmp(in, compiler::Operand(out, ASR, kSmiTagSize));
+  __ b(&done, EQ);
+#endif
 
   Register temp = locs()->temp(0).reg();
   if (compiler->intrinsic_mode()) {
@@ -5026,7 +5174,12 @@
     case Token::kNEGATE: {
       compiler::Label* deopt =
           compiler->AddDeoptStub(deopt_id(), ICData::kDeoptUnaryOp);
+#if !defined(DART_COMPRESSED_POINTERS)
       __ subs(result, ZR, compiler::Operand(value));
+#else
+      __ subsw(result, ZR, compiler::Operand(value));
+      __ sxtw(result, result);
+#endif
       __ b(deopt, VS);
       break;
     }
@@ -5089,7 +5242,11 @@
   const Register value = locs()->in(0).reg();
   const VRegister result = locs()->out(0).fpu_reg();
   __ SmiUntag(TMP, value);
+#if !defined(DART_COMPRESSED_POINTERS)
   __ scvtfdx(result, TMP);
+#else
+  __ scvtfdw(result, TMP);
+#endif
 }
 
 LocationSummary* Int64ToDoubleInstr::MakeLocationSummary(Zone* zone,
@@ -5136,9 +5293,16 @@
   __ fcvtzdsx(result, VTMP);
   // Overflow is signaled with minint.
 
+#if !defined(DART_COMPRESSED_POINTERS)
   // Check for overflow and that it fits into Smi.
   __ CompareImmediate(result, 0xC000000000000000);
   __ b(&do_call, MI);
+#else
+  // Check for overflow and that it fits into Smi.
+  __ AsrImmediate(TMP, result, 30);
+  __ cmp(TMP, compiler::Operand(result, ASR, 63));
+  __ b(&do_call, NE);
+#endif
   __ SmiTag(result);
   __ b(&done);
   __ Bind(&do_call);
@@ -5181,10 +5345,18 @@
   __ fcmpd(value, value);
   __ b(deopt, VS);
 
+#if !defined(DART_COMPRESSED_POINTERS)
   __ fcvtzdsx(result, value);
   // Check for overflow and that it fits into Smi.
   __ CompareImmediate(result, 0xC000000000000000);
   __ b(deopt, MI);
+#else
+  __ fcvtzdsw(result, value);
+  // Check for overflow and that it fits into Smi.
+  __ AsrImmediate(TMP, result, 30);
+  __ cmp(TMP, compiler::Operand(result, ASR, 63));
+  __ b(deopt, NE);
+#endif
   __ SmiTag(result);
 }
 
@@ -5455,7 +5627,11 @@
 
   // Check the corner case of dividing the 'MIN_SMI' with -1, in which
   // case we cannot tag the result.
+#if !defined(DART_COMPRESSED_POINTERS)
   __ CompareImmediate(result_div, 0x4000000000000000);
+#else
+  __ CompareImmediate(result_div, 0x40000000);
+#endif
   __ b(deopt, EQ);
   // result_mod <- left - right * result_div.
   __ msub(result_mod, TMP, result_div, result_mod);
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index d81e582..bd87d93 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -1755,6 +1755,7 @@
         default:
           UNREACHABLE();
       }
+      ASSERT(can_pack_into_smi());
       __ SmiTag(result);
       break;
     case kTwoByteStringCid:
@@ -1769,6 +1770,7 @@
         default:
           UNREACHABLE();
       }
+      ASSERT(can_pack_into_smi());
       __ SmiTag(result);
       break;
     default:
@@ -3372,26 +3374,47 @@
     const Object& constant = locs.in(1).constant();
     ASSERT(constant.IsSmi());
     // shlq operation masks the count to 6 bits.
+#if !defined(DART_COMPRESSED_POINTERS)
     const intptr_t kCountLimit = 0x3F;
+#else
+    const intptr_t kCountLimit = 0x1F;
+#endif
     const intptr_t value = Smi::Cast(constant).Value();
     ASSERT((0 < value) && (value < kCountLimit));
     if (shift_left->can_overflow()) {
       if (value == 1) {
         // Use overflow flag.
+#if !defined(DART_COMPRESSED_POINTERS)
         __ shlq(left, compiler::Immediate(1));
         __ j(OVERFLOW, deopt);
+#else
+        __ shll(left, compiler::Immediate(1));
+        __ j(OVERFLOW, deopt);
+        __ movsxd(left, left);
+#endif
         return;
       }
       // Check for overflow.
       Register temp = locs.temp(0).reg();
       __ movq(temp, left);
+#if !defined(DART_COMPRESSED_POINTERS)
       __ shlq(left, compiler::Immediate(value));
       __ sarq(left, compiler::Immediate(value));
+#else
+      __ shll(left, compiler::Immediate(value));
+      __ sarl(left, compiler::Immediate(value));
+      __ movsxd(left, left);
+#endif
       __ cmpq(left, temp);
       __ j(NOT_EQUAL, deopt);  // Overflow.
     }
     // Shift for result now we know there is no overflow.
     __ shlq(left, compiler::Immediate(value));
+#if defined(DART_COMPRESSED_POINTERS)
+    if (shift_left->is_truncating()) {
+      __ movsxd(left, left);
+    }
+#endif
     return;
   }
 
@@ -3420,6 +3443,13 @@
       }
       __ SmiUntag(right);
       __ shlq(left, right);
+#if defined(DART_COMPRESSED_POINTERS)
+      if (shift_left->is_truncating()) {
+        __ movsxd(left, left);
+      }
+#endif
+    } else {
+      __ int3();  //???
     }
     return;
   }
@@ -3451,6 +3481,11 @@
       __ SmiUntag(right);
       __ shlq(left, right);
     }
+#if defined(DART_COMPRESSED_POINTERS)
+    if (shift_left->is_truncating()) {
+      __ movsxd(left, left);
+    }
+#endif
   } else {
     if (right_needs_check) {
       ASSERT(shift_left->CanDeoptimize());
@@ -3462,15 +3497,26 @@
     // Left is not a constant.
     Register temp = locs.temp(0).reg();
     // Check if count too large for handling it inlined.
+#if !defined(DART_COMPRESSED_POINTERS)
     __ movq(temp, left);
+#else
+    __ movl(temp, left);
+#endif
     __ SmiUntag(right);
     // Overflow test (preserve temp and right);
+#if !defined(DART_COMPRESSED_POINTERS)
     __ shlq(left, right);
     __ sarq(left, right);
     __ cmpq(left, temp);
+#else
+    __ shll(temp, right);
+    __ sarl(temp, right);
+    __ cmpl(temp, left);
+#endif
     __ j(NOT_EQUAL, deopt);  // Overflow.
     // Shift for result now we know there is no overflow.
     __ shlq(left, right);
+    ASSERT(!shift_left->is_truncating());
   }
 }
 
@@ -3572,19 +3618,37 @@
   switch (op_kind()) {
     case Token::kADD:
       __ movq(result, left);
+#if !defined(DART_COMPRESSED_POINTERS)
       __ addq(result, right);
       __ j(OVERFLOW, slow_path->entry_label());
+#else
+      __ addl(result, right);
+      __ j(OVERFLOW, slow_path->entry_label());
+      __ movsxd(result, result);
+#endif
       break;
     case Token::kSUB:
       __ movq(result, left);
+#if !defined(DART_COMPRESSED_POINTERS)
       __ subq(result, right);
       __ j(OVERFLOW, slow_path->entry_label());
+#else
+      __ subl(result, right);
+      __ j(OVERFLOW, slow_path->entry_label());
+      __ movsxd(result, result);
+#endif
       break;
     case Token::kMUL:
       __ movq(result, left);
       __ SmiUntag(result);
+#if !defined(DART_COMPRESSED_POINTERS)
       __ imulq(result, right);
       __ j(OVERFLOW, slow_path->entry_label());
+#else
+      __ imull(result, right);
+      __ j(OVERFLOW, slow_path->entry_label());
+      __ movsxd(result, result);
+#endif
       break;
     case Token::kBIT_OR:
       ASSERT(left == result);
@@ -3607,11 +3671,20 @@
       __ movq(RCX, right);
       __ SmiUntag(RCX);
       __ movq(result, left);
+#if !defined(DART_COMPRESSED_POINTERS)
       __ shlq(result, RCX);
       __ movq(TMP, result);
       __ sarq(TMP, RCX);
       __ cmpq(TMP, left);
       __ j(NOT_EQUAL, slow_path->entry_label());
+#else
+      __ shll(result, RCX);
+      __ movq(TMP, result);
+      __ sarl(TMP, RCX);
+      __ cmpl(TMP, left);
+      __ j(NOT_EQUAL, slow_path->entry_label());
+      __ movsxd(result, result);
+#endif
       break;
     case Token::kSHR: {
       compiler::Label shift_count_ok;
@@ -3900,20 +3973,57 @@
     const int64_t imm = static_cast<int64_t>(constant.ptr());
     switch (op_kind()) {
       case Token::kADD: {
-        __ AddImmediate(left, compiler::Immediate(imm));
-        if (deopt != NULL) __ j(OVERFLOW, deopt);
+        if (deopt == NULL) {
+          // When we can't overflow, prefer 64-bit op to 32-bit op followed by
+          // sign extension.
+          __ AddImmediate(left, compiler::Immediate(imm));
+        } else {
+#if !defined(DART_COMPRESSED_POINTERS)
+          __ AddImmediate(left, compiler::Immediate(imm));
+          __ j(OVERFLOW, deopt);
+#else
+          __ AddImmediate(left, compiler::Immediate(imm), compiler::kFourBytes);
+          __ j(OVERFLOW, deopt);
+          __ movsxd(left, left);
+#endif
+        }
         break;
       }
       case Token::kSUB: {
-        __ SubImmediate(left, compiler::Immediate(imm));
-        if (deopt != NULL) __ j(OVERFLOW, deopt);
+        if (deopt == NULL) {
+          // When we can't overflow, prefer 64-bit op to 32-bit op followed by
+          // sign extension.
+          __ SubImmediate(left, compiler::Immediate(imm));
+        } else {
+#if !defined(DART_COMPRESSED_POINTERS)
+          __ SubImmediate(left, compiler::Immediate(imm));
+          __ j(OVERFLOW, deopt);
+#else
+          __ SubImmediate(left, compiler::Immediate(imm), compiler::kFourBytes);
+          __ j(OVERFLOW, deopt);
+          __ movsxd(left, left);
+#endif
+        }
         break;
       }
       case Token::kMUL: {
         // Keep left value tagged and untag right value.
         const intptr_t value = Smi::Cast(constant).Value();
-        __ MulImmediate(left, compiler::Immediate(value));
-        if (deopt != NULL) __ j(OVERFLOW, deopt);
+        if (deopt == NULL) {
+          // When we can't overflow, prefer 64-bit op to 32-bit op followed by
+          // sign extension.
+          __ MulImmediate(left, compiler::Immediate(value));
+        } else {
+#if !defined(DART_COMPRESSED_POINTERS)
+          __ MulImmediate(left, compiler::Immediate(value));
+          __ j(OVERFLOW, deopt);
+#else
+          __ MulImmediate(left, compiler::Immediate(value),
+                          compiler::kFourBytes);
+          __ j(OVERFLOW, deopt);
+          __ movsxd(left, left);
+#endif
+        }
         break;
       }
       case Token::kTRUNCDIV: {
@@ -3925,7 +4035,12 @@
         ASSERT(kSmiTagSize == 1);
         Register temp = locs()->temp(0).reg();
         __ movq(temp, left);
+#if !defined(DART_COMPRESSED_POINTERS)
         __ sarq(temp, compiler::Immediate(63));
+#else
+        // Assumes Smis are sign extended.
+        __ sarq(temp, compiler::Immediate(31));
+#endif
         ASSERT(shift_count > 1);  // 1, -1 case handled above.
         __ shrq(temp, compiler::Immediate(64 - shift_count));
         __ addq(left, temp);
@@ -3955,7 +4070,11 @@
 
       case Token::kSHR: {
         // sarq operation masks the count to 6 bits.
+#if !defined(DART_COMPRESSED_POINTERS)
         const intptr_t kCountLimit = 0x3F;
+#else
+        const intptr_t kCountLimit = 0x1F;
+#endif
         const intptr_t value = Smi::Cast(constant).Value();
         __ sarq(left, compiler::Immediate(
                           Utils::Minimum(value + kSmiTagSize, kCountLimit)));
@@ -3974,19 +4093,55 @@
     const compiler::Address& right = LocationToStackSlotAddress(locs()->in(1));
     switch (op_kind()) {
       case Token::kADD: {
-        __ addq(left, right);
-        if (deopt != NULL) __ j(OVERFLOW, deopt);
+        if (deopt == NULL) {
+          // When we can't overflow, prefer 64-bit op to 32-bit op followed by
+          // sign extension.
+          __ addq(left, right);
+        } else {
+#if !defined(DART_COMPRESSED_POINTERS)
+          __ addq(left, right);
+          __ j(OVERFLOW, deopt);
+#else
+          __ addl(left, right);
+          __ j(OVERFLOW, deopt);
+          __ movsxd(left, left);
+#endif
+        }
         break;
       }
       case Token::kSUB: {
-        __ subq(left, right);
-        if (deopt != NULL) __ j(OVERFLOW, deopt);
+        if (deopt == NULL) {
+          // When we can't overflow, prefer 64-bit op to 32-bit op followed by
+          // sign extension.
+          __ subq(left, right);
+        } else {
+#if !defined(DART_COMPRESSED_POINTERS)
+          __ subq(left, right);
+          __ j(OVERFLOW, deopt);
+#else
+          __ subl(left, right);
+          __ j(OVERFLOW, deopt);
+          __ movsxd(left, left);
+#endif
+        }
         break;
       }
       case Token::kMUL: {
         __ SmiUntag(left);
-        __ imulq(left, right);
-        if (deopt != NULL) __ j(OVERFLOW, deopt);
+        if (deopt == NULL) {
+          // When we can't overflow, prefer 64-bit op to 32-bit op followed by
+          // sign extension.
+          __ imulq(left, right);
+        } else {
+#if !defined(DART_COMPRESSED_POINTERS)
+          __ imulq(left, right);
+          __ j(OVERFLOW, deopt);
+#else
+          __ imull(left, right);
+          __ j(OVERFLOW, deopt);
+          __ movsxd(left, left);
+#endif
+        }
         break;
       }
       case Token::kBIT_AND: {
@@ -4015,19 +4170,55 @@
   Register right = locs()->in(1).reg();
   switch (op_kind()) {
     case Token::kADD: {
+#if !defined(DART_COMPRESSED_POINTERS)
       __ addq(left, right);
       if (deopt != NULL) __ j(OVERFLOW, deopt);
+#else
+      if (deopt == NULL) {
+        // When we can't overflow, prefer 64-bit op to 32-bit op followed by
+        // sign extension.
+        __ addq(left, right);
+      } else {
+        __ addl(left, right);
+        __ j(OVERFLOW, deopt);
+        __ movsxd(left, left);
+      }
+#endif
       break;
     }
     case Token::kSUB: {
+#if !defined(DART_COMPRESSED_POINTERS)
       __ subq(left, right);
       if (deopt != NULL) __ j(OVERFLOW, deopt);
+#else
+      if (deopt == NULL) {
+        // When we can't overflow, prefer 64-bit op to 32-bit op followed by
+        // sign extension.
+        __ subq(left, right);
+      } else {
+        __ subl(left, right);
+        __ j(OVERFLOW, deopt);
+        __ movsxd(left, left);
+      }
+#endif
       break;
     }
     case Token::kMUL: {
       __ SmiUntag(left);
+#if !defined(DART_COMPRESSED_POINTERS)
       __ imulq(left, right);
       if (deopt != NULL) __ j(OVERFLOW, deopt);
+#else
+      if (deopt == NULL) {
+        // When we can't overflow, prefer 64-bit op to 32-bit op followed by
+        // sign extension.
+        __ imulq(left, right);
+      } else {
+        __ imull(left, right);
+        __ j(OVERFLOW, deopt);
+        __ movsxd(left, left);
+      }
+#endif
       break;
     }
     case Token::kBIT_AND: {
@@ -4058,6 +4249,7 @@
         __ testq(right, right);
         __ j(ZERO, deopt);
       }
+#if !defined(DART_COMPRESSED_POINTERS)
       // Check if both operands fit into 32bits as idiv with 64bit operands
       // requires twice as many cycles and has much higher latency.
       // We are checking this before untagging them to avoid corner case
@@ -4090,6 +4282,21 @@
         __ CompareImmediate(result, compiler::Immediate(0x4000000000000000));
         __ j(EQUAL, deopt);
       }
+#else
+      // Both operands are 31bit smis. Divide using 32bit idiv.
+      __ SmiUntag(left);
+      __ SmiUntag(right);
+      __ cdq();
+      __ idivl(right);
+
+      if (RangeUtils::Overlaps(right_range(), -1, -1)) {
+        // Check the corner case of dividing the 'MIN_SMI' with -1, in which
+        // case we cannot tag the result.
+        __ cmpl(result, compiler::Immediate(0x40000000));
+        __ j(EQUAL, deopt);
+      }
+      __ movsxd(result, result);
+#endif
       __ Bind(&done);
       __ SmiTag(result);
       break;
@@ -4107,6 +4314,7 @@
         __ testq(right, right);
         __ j(ZERO, deopt);
       }
+#if !defined(DART_COMPRESSED_POINTERS)
       // Check if both operands fit into 32bits as idiv with 64bit operands
       // requires twice as many cycles and has much higher latency.
       // We are checking this before untagging them to avoid corner case
@@ -4118,6 +4326,7 @@
       __ movsxd(temp, right);
       __ cmpq(temp, right);
       __ j(NOT_EQUAL, &not_32bit);
+#endif
       // Both operands are 31bit smis. Divide using 32bit idiv.
       __ SmiUntag(left);
       __ SmiUntag(right);
@@ -4125,6 +4334,7 @@
       __ cdq();
       __ idivl(right);
       __ movsxd(result, result);
+#if !defined(DART_COMPRESSED_POINTERS)
       __ jmp(&div_done);
 
       // Divide using 64bit idiv.
@@ -4135,6 +4345,7 @@
       __ cqo();         // Sign extend RAX -> RDX:RAX.
       __ idivq(right);  //  RAX: quotient, RDX: remainder.
       __ Bind(&div_done);
+#endif
       //  res = left % right;
       //  if (res < 0) {
       //    if (right < 0) {
@@ -4426,6 +4637,11 @@
     __ j(NOT_CARRY, &done, compiler::Assembler::kNearJump);
     __ movq(value, compiler::Address(value, TIMES_2, Mint::value_offset()));
     __ Bind(&done);
+#if defined(DART_COMPRESSED_POINTERS)
+    if (is_truncating()) {
+      __ movsxd(value, value);
+    }
+#endif
     return;
   } else {
     compiler::Label done;
@@ -4474,11 +4690,19 @@
   ASSERT((from_representation() == kUnboxedInt32) ||
          (from_representation() == kUnboxedUint32));
   const intptr_t kNumInputs = 1;
-  const intptr_t kNumTemps = 0;
+  const intptr_t kNumTemps = ValueFitsSmi() ? 0 : 1;
   LocationSummary* summary = new (zone)
-      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kNoCall);
-  summary->set_in(0, Location::RequiresRegister());
+      LocationSummary(zone, kNumInputs, kNumTemps,
+                      ValueFitsSmi() ? LocationSummary::kNoCall
+                                     : LocationSummary::kCallOnSlowPath);
+  const bool needs_writable_input =
+      ValueFitsSmi() || (from_representation() == kUnboxedUint32) || true;
+  summary->set_in(0, needs_writable_input ? Location::WritableRegister()
+                                          : Location::RequiresRegister());
   summary->set_out(0, Location::RequiresRegister());
+  if (!ValueFitsSmi()) {
+    summary->set_temp(0, Location::RequiresRegister());
+  }
   return summary;
 }
 
@@ -4487,6 +4711,7 @@
   const Register out = locs()->out(0).reg();
   ASSERT(value != out);
 
+#if !defined(DART_COMPRESSED_POINTERS)
   ASSERT(kSmiTagSize == 1);
   if (from_representation() == kUnboxedInt32) {
     __ movsxd(out, value);
@@ -4495,6 +4720,40 @@
     __ movl(out, value);
   }
   __ SmiTag(out);
+#else
+  compiler::Label done;
+  if (from_representation() == kUnboxedInt32) {
+    __ MoveRegister(out, value);
+    __ addl(out, out);
+    __ movsxd(out, out);  // Does not affect flags.
+    if (ValueFitsSmi()) {
+      return;
+    }
+    __ j(NO_OVERFLOW, &done);
+  } else {
+    __ movl(out, value);
+    __ SmiTag(out);
+    if (ValueFitsSmi()) {
+      return;
+    }
+    __ TestImmediate(value, compiler::Immediate(0xC0000000LL));
+    __ j(ZERO, &done);
+  }
+  // Allocate a mint.
+  // Value input is a writable register and we have to inform the compiler of
+  // the type so it can be preserved untagged on the slow path
+  locs()->live_registers()->Add(locs()->in(0), from_representation());
+  const Register temp = locs()->temp(0).reg();
+  BoxAllocationSlowPath::Allocate(compiler, this, compiler->mint_class(), out,
+                                  temp);
+  if (from_representation() == kUnboxedInt32) {
+    __ movsxd(temp, value);  // Sign-extend.
+  } else {
+    __ movl(temp, value);  // Zero-extend.
+  }
+  __ movq(compiler::FieldAddress(out, Mint::value_offset()), temp);
+  __ Bind(&done);
+#endif
 }
 
 LocationSummary* BoxInt64Instr::MakeLocationSummary(Zone* zone,
@@ -4538,6 +4797,7 @@
 void BoxInt64Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   const Register out = locs()->out(0).reg();
   const Register value = locs()->in(0).reg();
+#if !defined(DART_COMPRESSED_POINTERS)
   __ MoveRegister(out, value);
   __ SmiTag(out);
   if (ValueFitsSmi()) {
@@ -4546,9 +4806,22 @@
   // If the value doesn't fit in a smi, the tagging changes the sign,
   // which causes the overflow flag to be set.
   compiler::Label done;
-  __ j(NO_OVERFLOW, &done);
-
   const Register temp = locs()->temp(0).reg();
+  __ j(NO_OVERFLOW, &done);
+#else
+  __ leaq(out, compiler::Address(value, value, TIMES_1, 0));
+  if (ValueFitsSmi()) {
+    return;
+  }
+  compiler::Label done;
+  const Register temp = locs()->temp(0).reg();
+  __ movq(temp, value);
+  __ sarq(temp, compiler::Immediate(30));
+  __ addq(temp, compiler::Immediate(1));
+  __ cmpq(temp, compiler::Immediate(2));
+  __ j(BELOW, &done);
+#endif
+
   if (compiler->intrinsic_mode()) {
     __ TryAllocate(compiler->mint_class(),
                    compiler->intrinsic_slow_path_label(),
@@ -5133,7 +5406,12 @@
     case Token::kNEGATE: {
       compiler::Label* deopt =
           compiler->AddDeoptStub(deopt_id(), ICData::kDeoptUnaryOp);
+#if !defined(DART_COMPRESSED_POINTERS)
       __ negq(value);
+#else
+      __ negl(value);
+      __ movsxd(value, value);
+#endif
       __ j(OVERFLOW, deopt);
       break;
     }
@@ -5285,7 +5563,11 @@
   Register value = locs()->in(0).reg();
   FpuRegister result = locs()->out(0).fpu_reg();
   __ SmiUntag(value);
+#if !defined(DART_COMPRESSED_POINTERS)
   __ cvtsi2sdq(result, value);
+#else
+  __ cvtsi2sdl(result, value);
+#endif
 }
 
 DEFINE_BACKEND(Int64ToDouble, (FpuRegister result, Register value)) {
@@ -5314,14 +5596,25 @@
   ASSERT(result != temp);
   __ movsd(value_double,
            compiler::FieldAddress(value_obj, Double::value_offset()));
+#if !defined(DART_COMPRESSED_POINTERS)
   __ cvttsd2siq(result, value_double);
+#else
+  __ cvttsd2sil(result, value_double);
+#endif
   // Overflow is signalled with minint.
   compiler::Label do_call, done;
   // Check for overflow and that it fits into Smi.
+#if !defined(DART_COMPRESSED_POINTERS)
   __ movq(temp, result);
   __ shlq(temp, compiler::Immediate(1));
   __ j(OVERFLOW, &do_call, compiler::Assembler::kNearJump);
   __ SmiTag(result);
+#else
+  __ movl(temp, result);
+  __ shll(temp, compiler::Immediate(1));
+  __ j(OVERFLOW, &do_call, compiler::Assembler::kNearJump);
+  __ movsxd(result, temp);
+#endif
   __ jmp(&done);
   __ Bind(&do_call);
   __ pushq(value_obj);
@@ -5360,14 +5653,26 @@
   XmmRegister value = locs()->in(0).fpu_reg();
   Register temp = locs()->temp(0).reg();
 
+#if !defined(DART_COMPRESSED_POINTERS)
   __ cvttsd2siq(result, value);
+#else
+  __ cvttsd2sil(result, value);
+#endif
   // Overflow is signalled with minint.
   compiler::Label do_call, done;
   // Check for overflow and that it fits into Smi.
+#if !defined(DART_COMPRESSED_POINTERS)
   __ movq(temp, result);
   __ shlq(temp, compiler::Immediate(1));
   __ j(OVERFLOW, deopt);
   __ SmiTag(result);
+#else
+  __ movl(temp, result);
+  __ shll(temp, compiler::Immediate(1));
+  __ j(OVERFLOW, deopt);
+  ASSERT(kSmiTagShift == 1 && kSmiTag == 0);
+  __ movsxd(result, temp);
+#endif
 }
 
 LocationSummary* DoubleToDoubleInstr::MakeLocationSummary(Zone* zone,
@@ -5694,6 +5999,7 @@
     __ testq(right, right);
     __ j(ZERO, deopt);
   }
+#if !defined(DART_COMPRESSED_POINTERS)
   // Check if both operands fit into 32bits as idiv with 64bit operands
   // requires twice as many cycles and has much higher latency.
   // We are checking this before untagging them to avoid corner case
@@ -5726,6 +6032,21 @@
   __ CompareImmediate(RAX, compiler::Immediate(0x4000000000000000));
   __ j(EQUAL, deopt);
   __ Bind(&done);
+#else
+  USE(temp);
+  // Both operands are 31bit smis. Divide using 32bit idiv.
+  __ SmiUntag(left);
+  __ SmiUntag(right);
+  __ cdq();
+  __ idivl(right);
+
+  // Check the corner case of dividing the 'MIN_SMI' with -1, in which
+  // case we cannot tag the result.
+  __ cmpl(RAX, compiler::Immediate(0x40000000));
+  __ j(EQUAL, deopt);
+  __ movsxd(RAX, RAX);
+  __ movsxd(RDX, RDX);
+#endif
 
   // Modulo correction (RDX).
   //  res = left % right;
diff --git a/runtime/vm/compiler/backend/range_analysis_test.cc b/runtime/vm/compiler/backend/range_analysis_test.cc
index 81b1467..2d42347 100644
--- a/runtime/vm/compiler/backend/range_analysis_test.cc
+++ b/runtime/vm/compiler/backend/range_analysis_test.cc
@@ -66,13 +66,14 @@
                 RangeBoundary::PositiveInfinity());
   TEST_RANGE_OP(Range::Shl, -1, 1, 63, 63, RangeBoundary(kMinInt64),
                 RangeBoundary::PositiveInfinity());
-  if (kBitsPerWord == 64) {
+  if (compiler::target::kSmiBits == 62) {
     TEST_RANGE_OP_SMI(Range::Shl, -1, 1, 62, 62,
                       RangeBoundary(compiler::target::kSmiMin),
                       RangeBoundary(compiler::target::kSmiMax));
     TEST_RANGE_OP_SMI(Range::Shl, -1, 1, 30, 30, RangeBoundary(-(1 << 30)),
                       RangeBoundary(1 << 30));
   } else {
+    ASSERT(compiler::target::kSmiBits == 30);
     TEST_RANGE_OP_SMI(Range::Shl, -1, 1, 30, 30,
                       RangeBoundary(compiler::target::kSmiMin),
                       RangeBoundary(compiler::target::kSmiMax));
diff --git a/runtime/vm/compiler/backend/type_propagator.cc b/runtime/vm/compiler/backend/type_propagator.cc
index 075f0cf..fd01d69 100644
--- a/runtime/vm/compiler/backend/type_propagator.cc
+++ b/runtime/vm/compiler/backend/type_propagator.cc
@@ -665,7 +665,7 @@
 }
 
 CompileType CompileType::Int32() {
-#if defined(TARGET_ARCH_IS_64_BIT)
+#if defined(TARGET_ARCH_IS_64_BIT) && !defined(DART_COMPRESSED_POINTERS)
   return FromCid(kSmiCid);
 #else
   return Int();
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
index f8fd87c..a106f1e 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
@@ -425,7 +425,7 @@
 Fragment BaseFlowGraphBuilder::AddIntptrIntegers() {
   Value* right = Pop();
   Value* left = Pop();
-#if defined(TARGET_ARCH_ARM64) || defined(TARGET_ARCH_X64)
+#if defined(TARGET_ARCH_IS_64_BIT)
   auto add = new (Z) BinaryInt64OpInstr(
       Token::kADD, left, right, DeoptId::kNone, Instruction::kNotSpeculative);
 #else
diff --git a/runtime/vm/compiler/jit/compiler.cc b/runtime/vm/compiler/jit/compiler.cc
index 3799ebd..b187eb6 100644
--- a/runtime/vm/compiler/jit/compiler.cc
+++ b/runtime/vm/compiler/jit/compiler.cc
@@ -342,6 +342,12 @@
     FlowGraph* flow_graph) {
   ASSERT(!CompilerState::Current().is_aot());
   const Function& function = parsed_function()->function();
+
+  // If another thread compiled and installed unoptmized code already,
+  // skip installation.
+  if (!optimized() && function.unoptimized_code() != Code::null()) {
+    return function.unoptimized_code();
+  }
   Zone* const zone = thread()->zone();
 
   // CreateDeoptInfo uses the object pool and needs to be done before
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index e1772e2..bfc1343 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -303,7 +303,11 @@
 constexpr uword kUwordMax = static_cast<word>(-1);
 
 // The number of bits in the _magnitude_ of a Smi, not counting the sign bit.
+#if !defined(DART_COMPRESSED_POINTERS)
 constexpr int kSmiBits = kBitsPerWord - 2;
+#else
+constexpr int kSmiBits = 30;
+#endif
 constexpr word kSmiMax = (static_cast<uword>(1) << kSmiBits) - 1;
 constexpr word kSmiMin = -(static_cast<uword>(1) << kSmiBits);
 
@@ -326,7 +330,7 @@
 // calculate both the parameter flag index in the parameter names array and
 // which bit to check, kNumParameterFlagsPerElement should be a power of two.
 static constexpr intptr_t kNumParameterFlagsPerElementLog2 =
-    kBitsPerWordLog2 - kNumParameterFlags;
+    kBitsPerWordLog2 - 1 - kNumParameterFlags;
 static constexpr intptr_t kNumParameterFlagsPerElement =
     1 << kNumParameterFlagsPerElementLog2;
 static_assert(kNumParameterFlagsPerElement <= kSmiBits,
@@ -1032,6 +1036,7 @@
   static word store_buffer_block_offset();
   static word call_to_runtime_entry_point_offset();
   static word write_barrier_mask_offset();
+  static word heap_base_offset();
   static word switchable_call_miss_entry_offset();
   static word write_barrier_wrappers_thread_offset(Register regno);
   static word array_write_barrier_entry_point_offset();
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index d5794ad..00bcf67 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -266,7 +266,7 @@
     Thread_call_to_runtime_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_dart_stream_offset = 740;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 44;
+    Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     308;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 224;
@@ -278,7 +278,7 @@
     348;
 static constexpr dart::compiler::target::word
     Thread_double_negate_address_offset = 344;
-static constexpr dart::compiler::target::word Thread_end_offset = 52;
+static constexpr dart::compiler::target::word Thread_end_offset = 56;
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
@@ -307,10 +307,10 @@
     Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     728;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset = 744;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    64;
+    68;
 static constexpr dart::compiler::target::word
     Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
@@ -318,7 +318,7 @@
 static constexpr dart::compiler::target::word
     Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 80;
+    Thread_marking_stack_block_offset = 84;
 static constexpr dart::compiler::target::word
     Thread_megamorphic_call_checked_entry_offset = 300;
 static constexpr dart::compiler::target::word
@@ -361,9 +361,9 @@
     Thread_slow_type_test_entry_point_offset = 320;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 32;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    56;
+    60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 60;
+    Thread_stack_overflow_flags_offset = 64;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
@@ -373,20 +373,21 @@
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    76;
+    80;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 72;
-static constexpr dart::compiler::target::word Thread_top_offset = 48;
+    Thread_top_exit_frame_info_offset = 76;
+static constexpr dart::compiler::target::word Thread_top_offset = 52;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 20;
 static constexpr dart::compiler::target::word
     Thread_unboxed_int64_runtime_arg_offset = 96;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 92;
 static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
     116;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 260;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     36;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
 static constexpr dart::compiler::target::word Thread_callback_code_offset = 720;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 724;
@@ -758,175 +759,176 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 720;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1392;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1400;
-static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 224;
-static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 512;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 544;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 360;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 552;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 368;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 560;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 376;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1472;
-static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 648;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 208;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 200;
-static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 632;
-static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 520;
-static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1488;
-static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 88;
-static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    600;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
-static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    680;
-static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_end_offset = 104;
-static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1432;
-static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 616;
-static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 240;
-static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 232;
-static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 704;
-static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 696;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    688;
-static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 712;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1408;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 248;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1464;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1496;
-static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    128;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 160;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 584;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 592;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 264;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    Thread_allocate_object_slow_stub_offset = 384;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
+    1480;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    Thread_call_to_runtime_stub_offset = 264;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1496;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    Thread_dispatch_table_array_offset = 96;
+static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    616;
+static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
+    448;
+static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
+    688;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 192;
-static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 656;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1416;
-static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1424;
-static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
+    Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
     1440;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 624;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
-static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    112;
+    Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 120;
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    Thread_fix_allocation_stub_code_offset = 248;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_fix_callers_target_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
-static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    152;
+    Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    696;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word Thread_top_offset = 96;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
+    Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1416;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    216;
+    Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
+    1472;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset =
+    1504;
+static constexpr dart::compiler::target::word Thread_field_table_values_offset =
+    136;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 504;
-static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    72;
-static constexpr dart::compiler::target::word Thread_callback_code_offset =
+    Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    Thread_marking_stack_block_offset = 168;
+static constexpr dart::compiler::target::word
+    Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+static constexpr dart::compiler::target::word
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1424;
+static constexpr dart::compiler::target::word
+    Thread_saved_shadow_call_stack_offset = 1432;
+static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1448;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1456;
+    Thread_slow_type_test_stub_offset = 472;
+static constexpr dart::compiler::target::word
+    Thread_slow_type_test_entry_point_offset = 632;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
+static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
+    120;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_flags_offset = 128;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
+    160;
+static constexpr dart::compiler::target::word
+    Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word Thread_top_offset = 104;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
+static constexpr dart::compiler::target::word
+    Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
+static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
+    224;
+static constexpr dart::compiler::target::word
+    Thread_write_barrier_entry_point_offset = 512;
+static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
+    72;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
+static constexpr dart::compiler::target::word Thread_callback_code_offset =
+    1456;
+static constexpr dart::compiler::target::word
+    Thread_callback_stack_return_offset = 1464;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -987,8 +989,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, -1,   -1,   1336, 1344,
-        1352, 1360, 1368, -1,   1376, 1384, -1,   -1};
+        1312, 1320, 1328, 1336, -1,   -1,   1344, 1352,
+        1360, 1368, 1376, -1,   1384, 1392, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -1337,7 +1339,7 @@
     Thread_call_to_runtime_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_dart_stream_offset = 708;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 44;
+    Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     308;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 224;
@@ -1349,7 +1351,7 @@
     348;
 static constexpr dart::compiler::target::word
     Thread_double_negate_address_offset = 344;
-static constexpr dart::compiler::target::word Thread_end_offset = 52;
+static constexpr dart::compiler::target::word Thread_end_offset = 56;
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
@@ -1378,10 +1380,10 @@
     Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     696;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset = 712;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    64;
+    68;
 static constexpr dart::compiler::target::word
     Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
@@ -1389,7 +1391,7 @@
 static constexpr dart::compiler::target::word
     Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 80;
+    Thread_marking_stack_block_offset = 84;
 static constexpr dart::compiler::target::word
     Thread_megamorphic_call_checked_entry_offset = 300;
 static constexpr dart::compiler::target::word
@@ -1432,9 +1434,9 @@
     Thread_slow_type_test_entry_point_offset = 320;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 32;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    56;
+    60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 60;
+    Thread_stack_overflow_flags_offset = 64;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
@@ -1444,20 +1446,21 @@
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    76;
+    80;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 72;
-static constexpr dart::compiler::target::word Thread_top_offset = 48;
+    Thread_top_exit_frame_info_offset = 76;
+static constexpr dart::compiler::target::word Thread_top_offset = 52;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 20;
 static constexpr dart::compiler::target::word
     Thread_unboxed_int64_runtime_arg_offset = 96;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 92;
 static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
     116;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 260;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     36;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
 static constexpr dart::compiler::target::word Thread_callback_code_offset = 688;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 692;
@@ -1826,171 +1829,172 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 720;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
     1464;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1472;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 224;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 512;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 544;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 360;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 552;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 368;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 560;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 376;
+    Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
     1544;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 648;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 208;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 200;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 632;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 520;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 256;
+    Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1560;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 88;
+    Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    600;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
     608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    616;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
+    448;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    680;
+    688;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_end_offset = 104;
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
+    Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
     1504;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
+    Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 496;
+    Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 616;
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 240;
+    Thread_fix_allocation_stub_code_offset = 248;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 232;
+    Thread_fix_callers_target_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 704;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 696;
+    Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    688;
+    696;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 712;
+    Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
     1480;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 248;
+    Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     1536;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
     1568;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    128;
+    136;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 160;
+    Thread_marking_stack_block_offset = 168;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 584;
+    Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 592;
+    Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 264;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 192;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 656;
+    Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1488;
 static constexpr dart::compiler::target::word
     Thread_saved_shadow_call_stack_offset = 1496;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1512;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 624;
+    Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    112;
+    120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 120;
+    Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    152;
+    160;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word Thread_top_offset = 96;
+    Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word Thread_top_offset = 104;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
+    Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
 static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    216;
+    224;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 504;
+    Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     72;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
     1520;
 static constexpr dart::compiler::target::word
@@ -2055,9 +2059,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384,
-        1392, 1400, 1408, 1416, -1,   -1,   -1,   -1,   1424, 1432, -1,
-        -1,   1440, 1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
+        1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392,
+        1400, 1408, 1416, 1424, -1,   -1,   -1,   -1,   1432, 1440, -1,
+        -1,   -1,   1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -2172,8 +2176,7 @@
 static constexpr dart::compiler::target::word ObjectPool_elements_start_offset =
     16;
 static constexpr dart::compiler::target::word ObjectPool_element_size = 8;
-static constexpr dart::compiler::target::word Array_kMaxElements =
-    576460752303423487;
+static constexpr dart::compiler::target::word Array_kMaxElements = 134217727;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     32765;
 static constexpr dart::compiler::target::word
@@ -2191,8 +2194,7 @@
 static constexpr dart::compiler::target::word OldPage_kBytesPerCardLog2 = 10;
 static constexpr dart::compiler::target::word
     NativeEntry_kNumCallWrapperArguments = 2;
-static constexpr dart::compiler::target::word String_kMaxElements =
-    2305843009213693951;
+static constexpr dart::compiler::target::word String_kMaxElements = 536870911;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
@@ -2211,7 +2213,7 @@
     SubtypeTestCache_kTestEntryLength = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
-    576460752303423487;
+    134217727;
 static constexpr dart::compiler::target::word
     AbstractType_type_test_stub_entry_point_offset = 8;
 static constexpr dart::compiler::target::word ArgumentsDescriptor_count_offset =
@@ -2367,175 +2369,176 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 720;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1392;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1400;
-static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 224;
-static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 512;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 544;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 360;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 552;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 368;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 560;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 376;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1472;
-static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 648;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 208;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 200;
-static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 632;
-static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 520;
-static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1488;
-static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 88;
-static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    600;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
-static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    680;
-static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_end_offset = 104;
-static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1432;
-static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 616;
-static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 240;
-static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 232;
-static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 704;
-static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 696;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    688;
-static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 712;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1408;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 248;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1464;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1496;
-static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    128;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 160;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 584;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 592;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 264;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    Thread_allocate_object_slow_stub_offset = 384;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
+    1480;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    Thread_call_to_runtime_stub_offset = 264;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1496;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    Thread_dispatch_table_array_offset = 96;
+static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    616;
+static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
+    448;
+static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
+    688;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 192;
-static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 656;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1416;
-static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1424;
-static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
+    Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
     1440;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 624;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
-static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    112;
+    Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 120;
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    Thread_fix_allocation_stub_code_offset = 248;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_fix_callers_target_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
-static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    152;
+    Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    696;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word Thread_top_offset = 96;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
+    Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1416;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    216;
+    Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
+    1472;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset =
+    1504;
+static constexpr dart::compiler::target::word Thread_field_table_values_offset =
+    136;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 504;
-static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    72;
-static constexpr dart::compiler::target::word Thread_callback_code_offset =
+    Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    Thread_marking_stack_block_offset = 168;
+static constexpr dart::compiler::target::word
+    Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+static constexpr dart::compiler::target::word
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1424;
+static constexpr dart::compiler::target::word
+    Thread_saved_shadow_call_stack_offset = 1432;
+static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1448;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1456;
+    Thread_slow_type_test_stub_offset = 472;
+static constexpr dart::compiler::target::word
+    Thread_slow_type_test_entry_point_offset = 632;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
+static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
+    120;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_flags_offset = 128;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
+    160;
+static constexpr dart::compiler::target::word
+    Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word Thread_top_offset = 104;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
+static constexpr dart::compiler::target::word
+    Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
+static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
+    224;
+static constexpr dart::compiler::target::word
+    Thread_write_barrier_entry_point_offset = 512;
+static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
+    72;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
+static constexpr dart::compiler::target::word Thread_callback_code_offset =
+    1456;
+static constexpr dart::compiler::target::word
+    Thread_callback_stack_return_offset = 1464;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -2596,8 +2599,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, -1,   -1,   1336, 1344,
-        1352, 1360, 1368, -1,   1376, 1384, -1,   -1};
+        1312, 1320, 1328, 1336, -1,   -1,   1344, 1352,
+        1360, 1368, 1376, -1,   1384, 1392, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -2712,8 +2715,7 @@
 static constexpr dart::compiler::target::word ObjectPool_elements_start_offset =
     16;
 static constexpr dart::compiler::target::word ObjectPool_element_size = 8;
-static constexpr dart::compiler::target::word Array_kMaxElements =
-    576460752303423487;
+static constexpr dart::compiler::target::word Array_kMaxElements = 134217727;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     32765;
 static constexpr dart::compiler::target::word
@@ -2731,8 +2733,7 @@
 static constexpr dart::compiler::target::word OldPage_kBytesPerCardLog2 = 10;
 static constexpr dart::compiler::target::word
     NativeEntry_kNumCallWrapperArguments = 2;
-static constexpr dart::compiler::target::word String_kMaxElements =
-    2305843009213693951;
+static constexpr dart::compiler::target::word String_kMaxElements = 536870911;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
@@ -2751,7 +2752,7 @@
     SubtypeTestCache_kTestEntryLength = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
-    576460752303423487;
+    134217727;
 static constexpr dart::compiler::target::word
     AbstractType_type_test_stub_entry_point_offset = 8;
 static constexpr dart::compiler::target::word ArgumentsDescriptor_count_offset =
@@ -2907,171 +2908,172 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 720;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
     1464;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1472;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 224;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 512;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 544;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 360;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 552;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 368;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 560;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 376;
+    Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
     1544;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 648;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 208;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 200;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 632;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 520;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 256;
+    Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1560;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 88;
+    Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    600;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
     608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    616;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
+    448;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    680;
+    688;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_end_offset = 104;
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
+    Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
     1504;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
+    Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 496;
+    Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 616;
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 240;
+    Thread_fix_allocation_stub_code_offset = 248;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 232;
+    Thread_fix_callers_target_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 704;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 696;
+    Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    688;
+    696;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 712;
+    Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
     1480;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 248;
+    Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     1536;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
     1568;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    128;
+    136;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 160;
+    Thread_marking_stack_block_offset = 168;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 584;
+    Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 592;
+    Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 264;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 192;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 656;
+    Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1488;
 static constexpr dart::compiler::target::word
     Thread_saved_shadow_call_stack_offset = 1496;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1512;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 624;
+    Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    112;
+    120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 120;
+    Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    152;
+    160;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word Thread_top_offset = 96;
+    Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word Thread_top_offset = 104;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
+    Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
 static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    216;
+    224;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 504;
+    Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     72;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
     1520;
 static constexpr dart::compiler::target::word
@@ -3136,9 +3138,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384,
-        1392, 1400, 1408, 1416, -1,   -1,   -1,   -1,   1424, 1432, -1,
-        -1,   1440, 1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
+        1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392,
+        1400, 1408, 1416, 1424, -1,   -1,   -1,   -1,   1432, 1440, -1,
+        -1,   -1,   1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -3486,7 +3488,7 @@
     Thread_call_to_runtime_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_dart_stream_offset = 740;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 44;
+    Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     308;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 224;
@@ -3498,7 +3500,7 @@
     348;
 static constexpr dart::compiler::target::word
     Thread_double_negate_address_offset = 344;
-static constexpr dart::compiler::target::word Thread_end_offset = 52;
+static constexpr dart::compiler::target::word Thread_end_offset = 56;
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
@@ -3527,10 +3529,10 @@
     Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     728;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset = 744;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    64;
+    68;
 static constexpr dart::compiler::target::word
     Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
@@ -3538,7 +3540,7 @@
 static constexpr dart::compiler::target::word
     Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 80;
+    Thread_marking_stack_block_offset = 84;
 static constexpr dart::compiler::target::word
     Thread_megamorphic_call_checked_entry_offset = 300;
 static constexpr dart::compiler::target::word
@@ -3581,9 +3583,9 @@
     Thread_slow_type_test_entry_point_offset = 320;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 32;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    56;
+    60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 60;
+    Thread_stack_overflow_flags_offset = 64;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
@@ -3593,20 +3595,21 @@
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    76;
+    80;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 72;
-static constexpr dart::compiler::target::word Thread_top_offset = 48;
+    Thread_top_exit_frame_info_offset = 76;
+static constexpr dart::compiler::target::word Thread_top_offset = 52;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 20;
 static constexpr dart::compiler::target::word
     Thread_unboxed_int64_runtime_arg_offset = 96;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 92;
 static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
     116;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 260;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     36;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
 static constexpr dart::compiler::target::word Thread_callback_code_offset = 720;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 724;
@@ -3972,175 +3975,176 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 720;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1392;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1400;
-static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 224;
-static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 512;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 544;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 360;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 552;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 368;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 560;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 376;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1472;
-static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 648;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 208;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 200;
-static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 632;
-static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 520;
-static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1488;
-static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 88;
-static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    600;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
-static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    680;
-static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_end_offset = 104;
-static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1432;
-static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 616;
-static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 240;
-static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 232;
-static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 704;
-static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 696;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    688;
-static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 712;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1408;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 248;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1464;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1496;
-static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    128;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 160;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 584;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 592;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 264;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    Thread_allocate_object_slow_stub_offset = 384;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
+    1480;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    Thread_call_to_runtime_stub_offset = 264;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1496;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    Thread_dispatch_table_array_offset = 96;
+static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    616;
+static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
+    448;
+static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
+    688;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 192;
-static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 656;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1416;
-static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1424;
-static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
+    Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
     1440;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 624;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
-static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    112;
+    Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 120;
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    Thread_fix_allocation_stub_code_offset = 248;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_fix_callers_target_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
-static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    152;
+    Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    696;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word Thread_top_offset = 96;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
+    Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1416;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    216;
+    Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
+    1472;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset =
+    1504;
+static constexpr dart::compiler::target::word Thread_field_table_values_offset =
+    136;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 504;
-static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    72;
-static constexpr dart::compiler::target::word Thread_callback_code_offset =
+    Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    Thread_marking_stack_block_offset = 168;
+static constexpr dart::compiler::target::word
+    Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+static constexpr dart::compiler::target::word
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1424;
+static constexpr dart::compiler::target::word
+    Thread_saved_shadow_call_stack_offset = 1432;
+static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1448;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1456;
+    Thread_slow_type_test_stub_offset = 472;
+static constexpr dart::compiler::target::word
+    Thread_slow_type_test_entry_point_offset = 632;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
+static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
+    120;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_flags_offset = 128;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
+    160;
+static constexpr dart::compiler::target::word
+    Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word Thread_top_offset = 104;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
+static constexpr dart::compiler::target::word
+    Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
+static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
+    224;
+static constexpr dart::compiler::target::word
+    Thread_write_barrier_entry_point_offset = 512;
+static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
+    72;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
+static constexpr dart::compiler::target::word Thread_callback_code_offset =
+    1456;
+static constexpr dart::compiler::target::word
+    Thread_callback_stack_return_offset = 1464;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -4198,8 +4202,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, -1,   -1,   1336, 1344,
-        1352, 1360, 1368, -1,   1376, 1384, -1,   -1};
+        1312, 1320, 1328, 1336, -1,   -1,   1344, 1352,
+        1360, 1368, 1376, -1,   1384, 1392, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -4545,7 +4549,7 @@
     Thread_call_to_runtime_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_dart_stream_offset = 708;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 44;
+    Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     308;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 224;
@@ -4557,7 +4561,7 @@
     348;
 static constexpr dart::compiler::target::word
     Thread_double_negate_address_offset = 344;
-static constexpr dart::compiler::target::word Thread_end_offset = 52;
+static constexpr dart::compiler::target::word Thread_end_offset = 56;
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
@@ -4586,10 +4590,10 @@
     Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     696;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset = 712;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    64;
+    68;
 static constexpr dart::compiler::target::word
     Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
@@ -4597,7 +4601,7 @@
 static constexpr dart::compiler::target::word
     Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 80;
+    Thread_marking_stack_block_offset = 84;
 static constexpr dart::compiler::target::word
     Thread_megamorphic_call_checked_entry_offset = 300;
 static constexpr dart::compiler::target::word
@@ -4640,9 +4644,9 @@
     Thread_slow_type_test_entry_point_offset = 320;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 32;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    56;
+    60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 60;
+    Thread_stack_overflow_flags_offset = 64;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
@@ -4652,20 +4656,21 @@
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    76;
+    80;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 72;
-static constexpr dart::compiler::target::word Thread_top_offset = 48;
+    Thread_top_exit_frame_info_offset = 76;
+static constexpr dart::compiler::target::word Thread_top_offset = 52;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 20;
 static constexpr dart::compiler::target::word
     Thread_unboxed_int64_runtime_arg_offset = 96;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 92;
 static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
     116;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 260;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     36;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
 static constexpr dart::compiler::target::word Thread_callback_code_offset = 688;
 static constexpr dart::compiler::target::word
     Thread_callback_stack_return_offset = 692;
@@ -5028,171 +5033,172 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 720;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
     1464;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1472;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 224;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 512;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 544;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 360;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 552;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 368;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 560;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 376;
+    Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
     1544;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 648;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 208;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 200;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 632;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 520;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 256;
+    Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1560;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 88;
+    Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    600;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
     608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    616;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
+    448;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    680;
+    688;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_end_offset = 104;
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
+    Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
     1504;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
+    Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 496;
+    Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 616;
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 240;
+    Thread_fix_allocation_stub_code_offset = 248;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 232;
+    Thread_fix_callers_target_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 704;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 696;
+    Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    688;
+    696;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 712;
+    Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
     1480;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 248;
+    Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     1536;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
     1568;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    128;
+    136;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 160;
+    Thread_marking_stack_block_offset = 168;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 584;
+    Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 592;
+    Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 264;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 192;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 656;
+    Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1488;
 static constexpr dart::compiler::target::word
     Thread_saved_shadow_call_stack_offset = 1496;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1512;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 624;
+    Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    112;
+    120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 120;
+    Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    152;
+    160;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word Thread_top_offset = 96;
+    Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word Thread_top_offset = 104;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
+    Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
 static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    216;
+    224;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 504;
+    Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     72;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
     1520;
 static constexpr dart::compiler::target::word
@@ -5254,9 +5260,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384,
-        1392, 1400, 1408, 1416, -1,   -1,   -1,   -1,   1424, 1432, -1,
-        -1,   1440, 1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
+        1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392,
+        1400, 1408, 1416, 1424, -1,   -1,   -1,   -1,   1432, 1440, -1,
+        -1,   -1,   1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -5371,8 +5377,7 @@
 static constexpr dart::compiler::target::word ObjectPool_elements_start_offset =
     16;
 static constexpr dart::compiler::target::word ObjectPool_element_size = 8;
-static constexpr dart::compiler::target::word Array_kMaxElements =
-    576460752303423487;
+static constexpr dart::compiler::target::word Array_kMaxElements = 134217727;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     32765;
 static constexpr dart::compiler::target::word
@@ -5390,8 +5395,7 @@
 static constexpr dart::compiler::target::word OldPage_kBytesPerCardLog2 = 10;
 static constexpr dart::compiler::target::word
     NativeEntry_kNumCallWrapperArguments = 2;
-static constexpr dart::compiler::target::word String_kMaxElements =
-    2305843009213693951;
+static constexpr dart::compiler::target::word String_kMaxElements = 536870911;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
@@ -5410,7 +5414,7 @@
     SubtypeTestCache_kTestEntryLength = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
-    576460752303423487;
+    134217727;
 static constexpr dart::compiler::target::word
     AbstractType_type_test_stub_entry_point_offset = 8;
 static constexpr dart::compiler::target::word ArgumentsDescriptor_count_offset =
@@ -5563,175 +5567,176 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 720;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1392;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1400;
-static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 224;
-static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 512;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
-static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 544;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 360;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 552;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 368;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 560;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 376;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1472;
-static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 648;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 208;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 200;
-static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 632;
-static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 520;
-static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1488;
-static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 88;
-static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    600;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    608;
-static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
-static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    680;
-static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_end_offset = 104;
-static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
-static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1432;
-static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 616;
-static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 240;
-static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 232;
-static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 704;
-static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 696;
-static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    688;
-static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 712;
-static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1408;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 248;
-static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1464;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1496;
-static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    128;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 160;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 584;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 592;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 264;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    Thread_allocate_object_slow_stub_offset = 384;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
+    1480;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    Thread_call_to_runtime_stub_offset = 264;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1496;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    Thread_dispatch_table_array_offset = 96;
+static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    616;
+static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
+    448;
+static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
+    688;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 192;
-static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 656;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1416;
-static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1424;
-static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
+    Thread_enter_safepoint_stub_offset = 488;
+static constexpr dart::compiler::target::word Thread_execution_state_offset =
     1440;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 624;
-static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
-static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    112;
+    Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 120;
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    Thread_fix_allocation_stub_code_offset = 248;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_fix_callers_target_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
-static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    152;
+    Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word Thread_float_not_address_offset =
+    696;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word Thread_top_offset = 96;
-static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
+    Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
+    1416;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    216;
+    Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
+    1472;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset =
+    1504;
+static constexpr dart::compiler::target::word Thread_field_table_values_offset =
+    136;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 504;
-static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
-    72;
-static constexpr dart::compiler::target::word Thread_callback_code_offset =
+    Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    Thread_marking_stack_block_offset = 168;
+static constexpr dart::compiler::target::word
+    Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+static constexpr dart::compiler::target::word
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+static constexpr dart::compiler::target::word
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+static constexpr dart::compiler::target::word
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+static constexpr dart::compiler::target::word
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+static constexpr dart::compiler::target::word
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
+static constexpr dart::compiler::target::word
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1424;
+static constexpr dart::compiler::target::word
+    Thread_saved_shadow_call_stack_offset = 1432;
+static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1448;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1456;
+    Thread_slow_type_test_stub_offset = 472;
+static constexpr dart::compiler::target::word
+    Thread_slow_type_test_entry_point_offset = 632;
+static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
+static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
+    120;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_flags_offset = 128;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+static constexpr dart::compiler::target::word
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
+    160;
+static constexpr dart::compiler::target::word
+    Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word Thread_top_offset = 104;
+static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
+static constexpr dart::compiler::target::word
+    Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
+static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
+    224;
+static constexpr dart::compiler::target::word
+    Thread_write_barrier_entry_point_offset = 512;
+static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
+    72;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
+static constexpr dart::compiler::target::word Thread_callback_code_offset =
+    1456;
+static constexpr dart::compiler::target::word
+    Thread_callback_stack_return_offset = 1464;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -5789,8 +5794,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, -1,   -1,   1336, 1344,
-        1352, 1360, 1368, -1,   1376, 1384, -1,   -1};
+        1312, 1320, 1328, 1336, -1,   -1,   1344, 1352,
+        1360, 1368, 1376, -1,   1384, 1392, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -5905,8 +5910,7 @@
 static constexpr dart::compiler::target::word ObjectPool_elements_start_offset =
     16;
 static constexpr dart::compiler::target::word ObjectPool_element_size = 8;
-static constexpr dart::compiler::target::word Array_kMaxElements =
-    576460752303423487;
+static constexpr dart::compiler::target::word Array_kMaxElements = 134217727;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     32765;
 static constexpr dart::compiler::target::word
@@ -5924,8 +5928,7 @@
 static constexpr dart::compiler::target::word OldPage_kBytesPerCardLog2 = 10;
 static constexpr dart::compiler::target::word
     NativeEntry_kNumCallWrapperArguments = 2;
-static constexpr dart::compiler::target::word String_kMaxElements =
-    2305843009213693951;
+static constexpr dart::compiler::target::word String_kMaxElements = 536870911;
 static constexpr dart::compiler::target::word
     SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
@@ -5944,7 +5947,7 @@
     SubtypeTestCache_kTestEntryLength = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_kTestResult = 0;
 static constexpr dart::compiler::target::word TypeArguments_kMaxElements =
-    576460752303423487;
+    134217727;
 static constexpr dart::compiler::target::word
     AbstractType_type_test_stub_entry_point_offset = 8;
 static constexpr dart::compiler::target::word ArgumentsDescriptor_count_offset =
@@ -6097,171 +6100,172 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 720;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
     1464;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1472;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 224;
+    Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 512;
+    Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 544;
+    Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 360;
+    Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 552;
+    Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 368;
+    Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 560;
+    Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 376;
+    Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
     1544;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 648;
-static constexpr dart::compiler::target::word Thread_bool_false_offset = 208;
-static constexpr dart::compiler::target::word Thread_bool_true_offset = 200;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
+static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
+static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 632;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 520;
+    Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 256;
+    Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1560;
 static constexpr dart::compiler::target::word
-    Thread_dispatch_table_array_offset = 88;
+    Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    600;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
-static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
     608;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
+    616;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    440;
+    448;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    680;
+    688;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_end_offset = 104;
+    Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 480;
+    Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
     1504;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 488;
+    Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 496;
+    Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 616;
+    Thread_call_native_through_safepoint_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 240;
+    Thread_fix_allocation_stub_code_offset = 248;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 232;
+    Thread_fix_callers_target_code_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 704;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 696;
+    Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    688;
+    696;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 712;
+    Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
     1480;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 248;
+    Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
     1536;
-static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
     1568;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
-    128;
+    136;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 448;
+    Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 456;
+    Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 472;
+    Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_marking_stack_block_offset = 160;
+    Thread_marking_stack_block_offset = 168;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 584;
+    Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 592;
+    Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 400;
+    Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 264;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
-static constexpr dart::compiler::target::word Thread_object_null_offset = 192;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 656;
+    Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1488;
 static constexpr dart::compiler::target::word
     Thread_saved_shadow_call_stack_offset = 1496;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
     1512;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 464;
+    Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 624;
+    Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 64;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
-    112;
+    120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_flags_offset = 120;
+    Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
-    152;
+    160;
 static constexpr dart::compiler::target::word
-    Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word Thread_top_offset = 96;
+    Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word Thread_top_offset = 104;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 40;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
+    Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word Thread_vm_tag_offset = 184;
 static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    216;
+    224;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 504;
+    Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     72;
+static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
     1520;
 static constexpr dart::compiler::target::word
@@ -6323,9 +6327,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384,
-        1392, 1400, 1408, 1416, -1,   -1,   -1,   -1,   1424, 1432, -1,
-        -1,   1440, 1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
+        1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392,
+        1400, 1408, 1416, 1424, -1,   -1,   -1,   -1,   1432, 1440, -1,
+        -1,   -1,   1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -6702,7 +6706,7 @@
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
     740;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 44;
+    AOT_Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     308;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -6715,7 +6719,7 @@
     AOT_Thread_double_abs_address_offset = 348;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_negate_address_offset = 344;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 52;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 56;
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word
@@ -6744,11 +6748,11 @@
     AOT_Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_through_ffi_offset = 728;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 64;
+    AOT_Thread_field_table_values_offset = 68;
 static constexpr dart::compiler::target::word
     AOT_Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
@@ -6756,7 +6760,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 80;
+    AOT_Thread_marking_stack_block_offset = 84;
 static constexpr dart::compiler::target::word
     AOT_Thread_megamorphic_call_checked_entry_offset = 300;
 static constexpr dart::compiler::target::word
@@ -6802,9 +6806,9 @@
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 56;
+    AOT_Thread_saved_stack_limit_offset = 60;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 60;
+    AOT_Thread_stack_overflow_flags_offset = 64;
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
@@ -6814,21 +6818,22 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 76;
+    AOT_Thread_store_buffer_block_offset = 80;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 72;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 48;
+    AOT_Thread_top_exit_frame_info_offset = 76;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 52;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     20;
 static constexpr dart::compiler::target::word
     AOT_Thread_unboxed_int64_runtime_arg_offset = 96;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 88;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 92;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_code_offset = 116;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 260;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 36;
+static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
     720;
 static constexpr dart::compiler::target::word
@@ -7251,183 +7256,184 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 720;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1392;
+    AOT_Thread_active_exception_offset = 1400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1400;
+    AOT_Thread_active_stacktrace_offset = 1408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 224;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 512;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 544;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 360;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1472;
+    1480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    208;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 200;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 632;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 520;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 256;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 88;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    600;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
-static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
-static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 680;
-static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
-static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
-static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1432;
-static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 240;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 232;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 696;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 688;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 712;
-static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1408;
-static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 248;
-static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1464;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 128;
+    AOT_Thread_dispatch_table_array_offset = 96;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
+    440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_deoptimize_entry_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_deoptimize_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 160;
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
+    AOT_Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 592;
+    AOT_Thread_execution_state_offset = 1440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_not_address_offset = 696;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word
+    AOT_Thread_global_object_pool_offset = 1416;
+static constexpr dart::compiler::target::word
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_through_ffi_offset = 1472;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
+    1504;
+static constexpr dart::compiler::target::word
+    AOT_Thread_field_table_values_offset = 136;
+static constexpr dart::compiler::target::word
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    AOT_Thread_marking_stack_block_offset = 168;
+static constexpr dart::compiler::target::word
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        264;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    192;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 656;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1416;
+    1424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1424;
+    AOT_Thread_saved_shadow_call_stack_offset = 1432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1440;
+    AOT_Thread_safepoint_state_offset = 1448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 624;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 112;
+    AOT_Thread_saved_stack_limit_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 120;
+    AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 152;
+    AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
+    AOT_Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     40;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 216;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 504;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 72;
+static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1448;
+    1456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1456;
+    AOT_Thread_callback_stack_return_offset = 1464;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -7501,8 +7507,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, -1,   -1,   1336, 1344,
-        1352, 1360, 1368, -1,   1376, 1384, -1,   -1};
+        1312, 1320, 1328, 1336, -1,   -1,   1344, 1352,
+        1360, 1368, 1376, -1,   1384, 1392, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -7851,139 +7857,139 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 720;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
     AOT_Thread_active_exception_offset = 1464;
 static constexpr dart::compiler::target::word
     AOT_Thread_active_stacktrace_offset = 1472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 224;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 512;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 544;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 360;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
     1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    208;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 200;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 632;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 520;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 256;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
     1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 88;
+    AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    600;
+    608;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
+    440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 608;
+    AOT_Thread_deoptimize_entry_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
+    AOT_Thread_deoptimize_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 680;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
+    AOT_Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
     AOT_Thread_execution_state_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
+    AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 240;
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 232;
+    AOT_Thread_fix_callers_target_code_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 704;
+    AOT_Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 696;
+    AOT_Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 688;
+    AOT_Thread_float_not_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 712;
+    AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
     AOT_Thread_global_object_pool_offset = 1480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 248;
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_through_ffi_offset = 1536;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 128;
+    AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 160;
+    AOT_Thread_marking_stack_block_offset = 168;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 592;
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        264;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    192;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 656;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
     1488;
 static constexpr dart::compiler::target::word
@@ -7991,39 +7997,40 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_safepoint_state_offset = 1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 624;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 112;
+    AOT_Thread_saved_stack_limit_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 120;
+    AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 152;
+    AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
+    AOT_Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     40;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 216;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 504;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 72;
+static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
     1520;
 static constexpr dart::compiler::target::word
@@ -8101,9 +8108,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384,
-        1392, 1400, 1408, 1416, -1,   -1,   -1,   -1,   1424, 1432, -1,
-        -1,   1440, 1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
+        1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392,
+        1400, 1408, 1416, 1424, -1,   -1,   -1,   -1,   1432, 1440, -1,
+        -1,   -1,   1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -8233,7 +8240,7 @@
     AOT_ObjectPool_elements_start_offset = 16;
 static constexpr dart::compiler::target::word AOT_ObjectPool_element_size = 8;
 static constexpr dart::compiler::target::word AOT_Array_kMaxElements =
-    576460752303423487;
+    134217727;
 static constexpr dart::compiler::target::word AOT_Array_kMaxNewSpaceElements =
     32765;
 static constexpr dart::compiler::target::word
@@ -8253,7 +8260,7 @@
 static constexpr dart::compiler::target::word
     AOT_NativeEntry_kNumCallWrapperArguments = 2;
 static constexpr dart::compiler::target::word AOT_String_kMaxElements =
-    2305843009213693951;
+    536870911;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
@@ -8273,7 +8280,7 @@
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
-    576460752303423487;
+    134217727;
 static constexpr dart::compiler::target::word
     AOT_AbstractType_type_test_stub_entry_point_offset = 8;
 static constexpr dart::compiler::target::word
@@ -8449,183 +8456,184 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 720;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1392;
+    AOT_Thread_active_exception_offset = 1400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1400;
+    AOT_Thread_active_stacktrace_offset = 1408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 224;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 512;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 544;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 360;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1472;
+    1480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    208;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 200;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 632;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 520;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 256;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 88;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    600;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
-static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
-static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 680;
-static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
-static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
-static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1432;
-static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 240;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 232;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 696;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 688;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 712;
-static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1408;
-static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 248;
-static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1464;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 128;
+    AOT_Thread_dispatch_table_array_offset = 96;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
+    440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_deoptimize_entry_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_deoptimize_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 160;
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
+    AOT_Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 592;
+    AOT_Thread_execution_state_offset = 1440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_not_address_offset = 696;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word
+    AOT_Thread_global_object_pool_offset = 1416;
+static constexpr dart::compiler::target::word
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_through_ffi_offset = 1472;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
+    1504;
+static constexpr dart::compiler::target::word
+    AOT_Thread_field_table_values_offset = 136;
+static constexpr dart::compiler::target::word
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    AOT_Thread_marking_stack_block_offset = 168;
+static constexpr dart::compiler::target::word
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        264;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    192;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 656;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1416;
+    1424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1424;
+    AOT_Thread_saved_shadow_call_stack_offset = 1432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1440;
+    AOT_Thread_safepoint_state_offset = 1448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 624;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 112;
+    AOT_Thread_saved_stack_limit_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 120;
+    AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 152;
+    AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
+    AOT_Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     40;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 216;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 504;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 72;
+static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1448;
+    1456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1456;
+    AOT_Thread_callback_stack_return_offset = 1464;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -8699,8 +8707,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, -1,   -1,   1336, 1344,
-        1352, 1360, 1368, -1,   1376, 1384, -1,   -1};
+        1312, 1320, 1328, 1336, -1,   -1,   1344, 1352,
+        1360, 1368, 1376, -1,   1384, 1392, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -8830,7 +8838,7 @@
     AOT_ObjectPool_elements_start_offset = 16;
 static constexpr dart::compiler::target::word AOT_ObjectPool_element_size = 8;
 static constexpr dart::compiler::target::word AOT_Array_kMaxElements =
-    576460752303423487;
+    134217727;
 static constexpr dart::compiler::target::word AOT_Array_kMaxNewSpaceElements =
     32765;
 static constexpr dart::compiler::target::word
@@ -8850,7 +8858,7 @@
 static constexpr dart::compiler::target::word
     AOT_NativeEntry_kNumCallWrapperArguments = 2;
 static constexpr dart::compiler::target::word AOT_String_kMaxElements =
-    2305843009213693951;
+    536870911;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
@@ -8870,7 +8878,7 @@
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
-    576460752303423487;
+    134217727;
 static constexpr dart::compiler::target::word
     AOT_AbstractType_type_test_stub_entry_point_offset = 8;
 static constexpr dart::compiler::target::word
@@ -9046,139 +9054,139 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 720;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
     AOT_Thread_active_exception_offset = 1464;
 static constexpr dart::compiler::target::word
     AOT_Thread_active_stacktrace_offset = 1472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 224;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 512;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 544;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 360;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
     1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    208;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 200;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 632;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 520;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 256;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
     1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 88;
+    AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    600;
+    608;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
+    440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 608;
+    AOT_Thread_deoptimize_entry_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
+    AOT_Thread_deoptimize_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 680;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
+    AOT_Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
     AOT_Thread_execution_state_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
+    AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 240;
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 232;
+    AOT_Thread_fix_callers_target_code_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 704;
+    AOT_Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 696;
+    AOT_Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 688;
+    AOT_Thread_float_not_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 712;
+    AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
     AOT_Thread_global_object_pool_offset = 1480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 248;
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_through_ffi_offset = 1536;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 128;
+    AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 160;
+    AOT_Thread_marking_stack_block_offset = 168;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 592;
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        264;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    192;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 656;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
     1488;
 static constexpr dart::compiler::target::word
@@ -9186,39 +9194,40 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_safepoint_state_offset = 1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 624;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 112;
+    AOT_Thread_saved_stack_limit_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 120;
+    AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 152;
+    AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
+    AOT_Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     40;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 216;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 504;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 72;
+static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
     1520;
 static constexpr dart::compiler::target::word
@@ -9296,9 +9305,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384,
-        1392, 1400, 1408, 1416, -1,   -1,   -1,   -1,   1424, 1432, -1,
-        -1,   1440, 1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
+        1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392,
+        1400, 1408, 1416, 1424, -1,   -1,   -1,   -1,   1432, 1440, -1,
+        -1,   -1,   1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -9686,7 +9695,7 @@
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
     740;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 44;
+    AOT_Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     308;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -9699,7 +9708,7 @@
     AOT_Thread_double_abs_address_offset = 348;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_negate_address_offset = 344;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 52;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 56;
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word
@@ -9728,11 +9737,11 @@
     AOT_Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_through_ffi_offset = 728;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     744;
 static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 64;
+    AOT_Thread_field_table_values_offset = 68;
 static constexpr dart::compiler::target::word
     AOT_Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
@@ -9740,7 +9749,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 80;
+    AOT_Thread_marking_stack_block_offset = 84;
 static constexpr dart::compiler::target::word
     AOT_Thread_megamorphic_call_checked_entry_offset = 300;
 static constexpr dart::compiler::target::word
@@ -9786,9 +9795,9 @@
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     32;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 56;
+    AOT_Thread_saved_stack_limit_offset = 60;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 60;
+    AOT_Thread_stack_overflow_flags_offset = 64;
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
@@ -9798,21 +9807,22 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 76;
+    AOT_Thread_store_buffer_block_offset = 80;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 72;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 48;
+    AOT_Thread_top_exit_frame_info_offset = 76;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 52;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     20;
 static constexpr dart::compiler::target::word
     AOT_Thread_unboxed_int64_runtime_arg_offset = 96;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 88;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 92;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_code_offset = 116;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 260;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 36;
+static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
     720;
 static constexpr dart::compiler::target::word
@@ -10228,183 +10238,184 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 720;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1392;
+    AOT_Thread_active_exception_offset = 1400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1400;
+    AOT_Thread_active_stacktrace_offset = 1408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 224;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 512;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 544;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 360;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1472;
+    1480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    208;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 200;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 632;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 520;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 256;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 88;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    600;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
-static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
-static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 680;
-static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
-static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
-static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1432;
-static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 240;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 232;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 696;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 688;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 712;
-static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1408;
-static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 248;
-static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1464;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 128;
+    AOT_Thread_dispatch_table_array_offset = 96;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
+    440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_deoptimize_entry_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_deoptimize_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 160;
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
+    AOT_Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 592;
+    AOT_Thread_execution_state_offset = 1440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_not_address_offset = 696;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word
+    AOT_Thread_global_object_pool_offset = 1416;
+static constexpr dart::compiler::target::word
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_through_ffi_offset = 1472;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
+    1504;
+static constexpr dart::compiler::target::word
+    AOT_Thread_field_table_values_offset = 136;
+static constexpr dart::compiler::target::word
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    AOT_Thread_marking_stack_block_offset = 168;
+static constexpr dart::compiler::target::word
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        264;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    192;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 656;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1416;
+    1424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1424;
+    AOT_Thread_saved_shadow_call_stack_offset = 1432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1440;
+    AOT_Thread_safepoint_state_offset = 1448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 624;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 112;
+    AOT_Thread_saved_stack_limit_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 120;
+    AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 152;
+    AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
+    AOT_Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     40;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 216;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 504;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 72;
+static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1448;
+    1456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1456;
+    AOT_Thread_callback_stack_return_offset = 1464;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -10475,8 +10486,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, -1,   -1,   1336, 1344,
-        1352, 1360, 1368, -1,   1376, 1384, -1,   -1};
+        1312, 1320, 1328, 1336, -1,   -1,   1344, 1352,
+        1360, 1368, 1376, -1,   1384, 1392, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -10821,139 +10832,139 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 720;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
     AOT_Thread_active_exception_offset = 1464;
 static constexpr dart::compiler::target::word
     AOT_Thread_active_stacktrace_offset = 1472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 224;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 512;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 544;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 360;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
     1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    208;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 200;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 632;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 520;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 256;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
     1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 88;
+    AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    600;
+    608;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
+    440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 608;
+    AOT_Thread_deoptimize_entry_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
+    AOT_Thread_deoptimize_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 680;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
+    AOT_Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
     AOT_Thread_execution_state_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
+    AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 240;
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 232;
+    AOT_Thread_fix_callers_target_code_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 704;
+    AOT_Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 696;
+    AOT_Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 688;
+    AOT_Thread_float_not_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 712;
+    AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
     AOT_Thread_global_object_pool_offset = 1480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 248;
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_through_ffi_offset = 1536;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 128;
+    AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 160;
+    AOT_Thread_marking_stack_block_offset = 168;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 592;
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        264;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    192;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 656;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
     1488;
 static constexpr dart::compiler::target::word
@@ -10961,39 +10972,40 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_safepoint_state_offset = 1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 624;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 112;
+    AOT_Thread_saved_stack_limit_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 120;
+    AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 152;
+    AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
+    AOT_Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     40;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 216;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 504;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 72;
+static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
     1520;
 static constexpr dart::compiler::target::word
@@ -11068,9 +11080,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384,
-        1392, 1400, 1408, 1416, -1,   -1,   -1,   -1,   1424, 1432, -1,
-        -1,   1440, 1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
+        1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392,
+        1400, 1408, 1416, 1424, -1,   -1,   -1,   -1,   1432, 1440, -1,
+        -1,   -1,   1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -11200,7 +11212,7 @@
     AOT_ObjectPool_elements_start_offset = 16;
 static constexpr dart::compiler::target::word AOT_ObjectPool_element_size = 8;
 static constexpr dart::compiler::target::word AOT_Array_kMaxElements =
-    576460752303423487;
+    134217727;
 static constexpr dart::compiler::target::word AOT_Array_kMaxNewSpaceElements =
     32765;
 static constexpr dart::compiler::target::word
@@ -11220,7 +11232,7 @@
 static constexpr dart::compiler::target::word
     AOT_NativeEntry_kNumCallWrapperArguments = 2;
 static constexpr dart::compiler::target::word AOT_String_kMaxElements =
-    2305843009213693951;
+    536870911;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
@@ -11240,7 +11252,7 @@
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
-    576460752303423487;
+    134217727;
 static constexpr dart::compiler::target::word
     AOT_AbstractType_type_test_stub_entry_point_offset = 8;
 static constexpr dart::compiler::target::word
@@ -11412,183 +11424,184 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 720;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1392;
+    AOT_Thread_active_exception_offset = 1400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1400;
+    AOT_Thread_active_stacktrace_offset = 1408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 224;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 512;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 544;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 360;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1472;
+    1480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    208;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 200;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 632;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 520;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 256;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 88;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    600;
-static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
-static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 608;
-static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
-static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 680;
-static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
-static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
-static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1432;
-static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
-static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 240;
-static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 232;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 704;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 696;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 688;
-static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 712;
-static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1408;
-static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 248;
-static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1464;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 128;
+    AOT_Thread_dispatch_table_array_offset = 96;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
+    608;
+static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
+    440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_deoptimize_entry_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_deoptimize_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 160;
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
+    AOT_Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 592;
+    AOT_Thread_execution_state_offset = 1440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
+static constexpr dart::compiler::target::word
+    AOT_Thread_fix_callers_target_code_offset = 240;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_absolute_address_offset = 712;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_negate_address_offset = 704;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_not_address_offset = 696;
+static constexpr dart::compiler::target::word
+    AOT_Thread_float_zerow_address_offset = 720;
+static constexpr dart::compiler::target::word
+    AOT_Thread_global_object_pool_offset = 1416;
+static constexpr dart::compiler::target::word
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
+static constexpr dart::compiler::target::word
+    AOT_Thread_exit_through_ffi_offset = 1472;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
+    1504;
+static constexpr dart::compiler::target::word
+    AOT_Thread_field_table_values_offset = 136;
+static constexpr dart::compiler::target::word
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
+static constexpr dart::compiler::target::word
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+static constexpr dart::compiler::target::word
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+static constexpr dart::compiler::target::word
+    AOT_Thread_marking_stack_block_offset = 168;
+static constexpr dart::compiler::target::word
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+static constexpr dart::compiler::target::word
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
+static constexpr dart::compiler::target::word
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
+static constexpr dart::compiler::target::word
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
+static constexpr dart::compiler::target::word
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        264;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    192;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 656;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1416;
+    1424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1424;
+    AOT_Thread_saved_shadow_call_stack_offset = 1432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1440;
+    AOT_Thread_safepoint_state_offset = 1448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 624;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 112;
+    AOT_Thread_saved_stack_limit_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 120;
+    AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 152;
+    AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
+    AOT_Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     40;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 216;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 504;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 72;
+static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1448;
+    1456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1456;
+    AOT_Thread_callback_stack_return_offset = 1464;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -11659,8 +11672,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, -1,   -1,   1336, 1344,
-        1352, 1360, 1368, -1,   1376, 1384, -1,   -1};
+        1312, 1320, 1328, 1336, -1,   -1,   1344, 1352,
+        1360, 1368, 1376, -1,   1384, 1392, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -11790,7 +11803,7 @@
     AOT_ObjectPool_elements_start_offset = 16;
 static constexpr dart::compiler::target::word AOT_ObjectPool_element_size = 8;
 static constexpr dart::compiler::target::word AOT_Array_kMaxElements =
-    576460752303423487;
+    134217727;
 static constexpr dart::compiler::target::word AOT_Array_kMaxNewSpaceElements =
     32765;
 static constexpr dart::compiler::target::word
@@ -11810,7 +11823,7 @@
 static constexpr dart::compiler::target::word
     AOT_NativeEntry_kNumCallWrapperArguments = 2;
 static constexpr dart::compiler::target::word AOT_String_kMaxElements =
-    2305843009213693951;
+    536870911;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_kFunctionTypeArguments = 5;
 static constexpr dart::compiler::target::word
@@ -11830,7 +11843,7 @@
 static constexpr dart::compiler::target::word AOT_SubtypeTestCache_kTestResult =
     0;
 static constexpr dart::compiler::target::word AOT_TypeArguments_kMaxElements =
-    576460752303423487;
+    134217727;
 static constexpr dart::compiler::target::word
     AOT_AbstractType_type_test_stub_entry_point_offset = 8;
 static constexpr dart::compiler::target::word
@@ -12002,139 +12015,139 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 720;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
     AOT_Thread_active_exception_offset = 1464;
 static constexpr dart::compiler::target::word
     AOT_Thread_active_stacktrace_offset = 1472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 224;
+    AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 512;
+    AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 544;
+    AOT_Thread_allocate_object_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 360;
+    AOT_Thread_allocate_object_stub_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
     1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 648;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
-    208;
-static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 200;
+    216;
+static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 632;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 520;
+    AOT_Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 256;
+    AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
     1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_dispatch_table_array_offset = 88;
+    AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    600;
+    608;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    432;
+    440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 608;
+    AOT_Thread_deoptimize_entry_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 440;
+    AOT_Thread_deoptimize_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 680;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 672;
-static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
+    AOT_Thread_double_negate_address_offset = 680;
+static constexpr dart::compiler::target::word AOT_Thread_end_offset = 112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 480;
+    AOT_Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
     AOT_Thread_execution_state_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 488;
+    AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 240;
+    AOT_Thread_fix_allocation_stub_code_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 232;
+    AOT_Thread_fix_callers_target_code_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 704;
+    AOT_Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 696;
+    AOT_Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 688;
+    AOT_Thread_float_not_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 712;
+    AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
     AOT_Thread_global_object_pool_offset = 1480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 248;
+    AOT_Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_through_ffi_offset = 1536;
-static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
+static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_field_table_values_offset = 128;
+    AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 448;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 472;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_marking_stack_block_offset = 160;
+    AOT_Thread_marking_stack_block_offset = 168;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 592;
+    AOT_Thread_switchable_call_miss_entry_offset = 600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 400;
+    AOT_Thread_switchable_call_miss_stub_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 640;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 272;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        264;
+        272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 280;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 328;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
-    192;
+    200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 656;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
     1488;
 static constexpr dart::compiler::target::word
@@ -12142,39 +12155,40 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_safepoint_state_offset = 1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 464;
+    AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 624;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_stack_limit_offset = 112;
+    AOT_Thread_saved_stack_limit_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_flags_offset = 120;
+    AOT_Thread_stack_overflow_flags_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 384;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_store_buffer_block_offset = 152;
+    AOT_Thread_store_buffer_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_top_exit_frame_info_offset = 144;
-static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
+    AOT_Thread_top_exit_frame_info_offset = 152;
+static constexpr dart::compiler::target::word AOT_Thread_top_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     40;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_int64_runtime_arg_offset = 184;
-static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
+    AOT_Thread_unboxed_int64_runtime_arg_offset = 192;
+static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 216;
+    AOT_Thread_write_barrier_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 504;
+    AOT_Thread_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 72;
+static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
     1520;
 static constexpr dart::compiler::target::word
@@ -12249,9 +12263,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384,
-        1392, 1400, 1408, 1416, -1,   -1,   -1,   -1,   1424, 1432, -1,
-        -1,   1440, 1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
+        1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392,
+        1400, 1408, 1416, 1424, -1,   -1,   -1,   -1,   1432, 1440, -1,
+        -1,   -1,   1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
diff --git a/runtime/vm/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h
index 2008f3f..e249228 100644
--- a/runtime/vm/compiler/runtime_offsets_list.h
+++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -258,6 +258,7 @@
   FIELD(Thread, write_barrier_code_offset)                                     \
   FIELD(Thread, write_barrier_entry_point_offset)                              \
   FIELD(Thread, write_barrier_mask_offset)                                     \
+  FIELD(Thread, heap_base_offset)                                              \
   FIELD(Thread, callback_code_offset)                                          \
   FIELD(Thread, callback_stack_return_offset)                                  \
   FIELD(TimelineStream, enabled_offset)                                        \
diff --git a/runtime/vm/compiler/stub_code_compiler.cc b/runtime/vm/compiler/stub_code_compiler.cc
index c4ed124..e08b548 100644
--- a/runtime/vm/compiler/stub_code_compiler.cc
+++ b/runtime/vm/compiler/stub_code_compiler.cc
@@ -796,19 +796,6 @@
   GenerateRangeError(assembler, /*with_fpu_regs=*/true);
 }
 
-void StubCodeCompiler::GenerateFrameAwaitingMaterializationStub(
-    Assembler* assembler) {
-  __ Breakpoint();  // Marker stub.
-}
-
-void StubCodeCompiler::GenerateAsynchronousGapMarkerStub(Assembler* assembler) {
-  __ Breakpoint();  // Marker stub.
-}
-
-void StubCodeCompiler::GenerateUnknownDartCodeStub(Assembler* assembler) {
-  __ Breakpoint();  // Marker stub.
-}
-
 }  // namespace compiler
 
 }  // namespace dart
diff --git a/runtime/vm/compiler/stub_code_compiler_arm.cc b/runtime/vm/compiler/stub_code_compiler_arm.cc
index db3bb60..0dfaa61 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm.cc
@@ -3291,6 +3291,15 @@
       CODE_REG, target::Code::entry_point_offset(CodeEntryKind::kMonomorphic)));
 }
 
+void StubCodeCompiler::GenerateFrameAwaitingMaterializationStub(
+    Assembler* assembler) {
+  __ bkpt(0);
+}
+
+void StubCodeCompiler::GenerateAsynchronousGapMarkerStub(Assembler* assembler) {
+  __ bkpt(0);
+}
+
 void StubCodeCompiler::GenerateNotLoadedStub(Assembler* assembler) {
   __ EnterStubFrame();
   __ CallRuntime(kNotLoadedRuntimeEntry, 0);
diff --git a/runtime/vm/compiler/stub_code_compiler_arm64.cc b/runtime/vm/compiler/stub_code_compiler_arm64.cc
index e5f2d4e..01b54d7 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm64.cc
@@ -559,9 +559,18 @@
       Label length, smi_case;
 
       // The user-controlled index might not fit into a Smi.
+#if !defined(DART_COMPRESSED_POINTERS)
       __ adds(RangeErrorABI::kIndexReg, RangeErrorABI::kIndexReg,
               compiler::Operand(RangeErrorABI::kIndexReg));
       __ BranchIf(NO_OVERFLOW, &length);
+#else
+      __ mov(TMP, RangeErrorABI::kIndexReg);
+      __ SmiTag(RangeErrorABI::kIndexReg);
+      __ sxtw(RangeErrorABI::kIndexReg, RangeErrorABI::kIndexReg);
+      __ cmp(TMP,
+             compiler::Operand(RangeErrorABI::kIndexReg, ASR, kSmiTagSize));
+      __ BranchIf(EQ, &length);
+#endif
       {
         // Allocate a mint, reload the two registers and popualte the mint.
         __ PushRegister(NULL_REG);
@@ -2172,8 +2181,14 @@
   __ BranchIfNotSmi(TMP, not_smi_or_overflow);
   switch (kind) {
     case Token::kADD: {
-      __ adds(R0, R1, Operand(R0));   // Adds.
+#if !defined(DART_COMPRESSED_POINTERS)
+      __ adds(R0, R1, Operand(R0));   // Add.
       __ b(not_smi_or_overflow, VS);  // Branch if overflow.
+#else
+      __ addsw(R0, R1, Operand(R0));  // Add (32-bit).
+      __ b(not_smi_or_overflow, VS);  // Branch if overflow.
+      __ sxtw(R0, R0);                // Sign extend.
+#endif
       break;
     }
     case Token::kLT: {
@@ -3435,6 +3450,15 @@
   __ br(R1);
 }
 
+void StubCodeCompiler::GenerateFrameAwaitingMaterializationStub(
+    Assembler* assembler) {
+  __ brk(0);
+}
+
+void StubCodeCompiler::GenerateAsynchronousGapMarkerStub(Assembler* assembler) {
+  __ brk(0);
+}
+
 void StubCodeCompiler::GenerateNotLoadedStub(Assembler* assembler) {
   __ EnterStubFrame();
   __ CallRuntime(kNotLoadedRuntimeEntry, 0);
diff --git a/runtime/vm/compiler/stub_code_compiler_ia32.cc b/runtime/vm/compiler/stub_code_compiler_ia32.cc
index d96a18b..229be66 100644
--- a/runtime/vm/compiler/stub_code_compiler_ia32.cc
+++ b/runtime/vm/compiler/stub_code_compiler_ia32.cc
@@ -2788,6 +2788,15 @@
   __ int3();  // AOT only.
 }
 
+void StubCodeCompiler::GenerateFrameAwaitingMaterializationStub(
+    Assembler* assembler) {
+  __ int3();  // Marker stub.
+}
+
+void StubCodeCompiler::GenerateAsynchronousGapMarkerStub(Assembler* assembler) {
+  __ int3();  // Marker stub.
+}
+
 void StubCodeCompiler::GenerateNotLoadedStub(Assembler* assembler) {
   __ EnterStubFrame();
   __ CallRuntime(kNotLoadedRuntimeEntry, 0);
diff --git a/runtime/vm/compiler/stub_code_compiler_x64.cc b/runtime/vm/compiler/stub_code_compiler_x64.cc
index 8c4bb23..e852d5a 100644
--- a/runtime/vm/compiler/stub_code_compiler_x64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_x64.cc
@@ -502,8 +502,17 @@
       Label length, smi_case;
 
       // The user-controlled index might not fit into a Smi.
+#if !defined(DART_COMPRESSED_POINTERS)
       __ addq(RangeErrorABI::kIndexReg, RangeErrorABI::kIndexReg);
       __ BranchIf(NO_OVERFLOW, &length);
+#else
+      __ movq(TMP, RangeErrorABI::kIndexReg);
+      __ SmiTag(RangeErrorABI::kIndexReg);
+      __ sarq(TMP, Immediate(30));
+      __ addq(TMP, Immediate(1));
+      __ cmpq(TMP, Immediate(2));
+      __ j(BELOW, &length);
+#endif
       {
         // Allocate a mint, reload the two registers and popualte the mint.
         __ PushImmediate(Immediate(0));
@@ -2099,8 +2108,14 @@
   __ j(NOT_ZERO, not_smi_or_overflow);
   switch (kind) {
     case Token::kADD: {
+#if !defined(DART_COMPRESSED_POINTERS)
       __ addq(RAX, RCX);
       __ j(OVERFLOW, not_smi_or_overflow);
+#else
+      __ addl(RAX, RCX);
+      __ j(OVERFLOW, not_smi_or_overflow);
+      __ movsxd(RAX, RAX);
+#endif
       break;
     }
     case Token::kLT: {
@@ -3365,6 +3380,15 @@
   __ jmp(RCX);
 }
 
+void StubCodeCompiler::GenerateFrameAwaitingMaterializationStub(
+    Assembler* assembler) {
+  __ int3();
+}
+
+void StubCodeCompiler::GenerateAsynchronousGapMarkerStub(Assembler* assembler) {
+  __ int3();
+}
+
 void StubCodeCompiler::GenerateNotLoadedStub(Assembler* assembler) {
   __ EnterStubFrame();
   __ CallRuntime(kNotLoadedRuntimeEntry, 0);
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index 8227d64..16af371 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -52,9 +52,9 @@
   R18 = 18,  // reserved on iOS, shadow call stack on Fuchsia.
   R19 = 19,
   R20 = 20,
-  R21 = 21,
+  R21 = 21,  // DISPATCH_TABLE_REG
   R22 = 22,  // NULL_REG
-  R23 = 23,
+  R23 = 23,  // HEAP_BASE
   R24 = 24,
   R25 = 25,
   R26 = 26,  // THR
@@ -143,6 +143,7 @@
 const Register CALLEE_SAVED_TEMP2 = R20;
 const Register BARRIER_MASK = R28;
 const Register NULL_REG = R22;  // Caches NullObject() value.
+const Register HEAP_BASE = R23;
 
 // ABI for catch-clause entry point.
 const Register kExceptionObjectReg = R0;
@@ -345,12 +346,12 @@
 const VRegister kAbiLastPreservedFpuReg = V15;
 const int kAbiPreservedFpuRegCount = 8;
 
-const intptr_t kReservedCpuRegisters = R(SPREG) |  // Dart SP
-                                       R(FPREG) | R(TMP) | R(TMP2) | R(PP) |
-                                       R(THR) | R(LR) | R(BARRIER_MASK) |
-                                       R(NULL_REG) | R(R31) |  // C++ SP
-                                       R(R18) | R(DISPATCH_TABLE_REG);
-constexpr intptr_t kNumberOfReservedCpuRegisters = 12;
+const intptr_t kReservedCpuRegisters =
+    R(SPREG) |  // Dart SP
+    R(FPREG) | R(TMP) | R(TMP2) | R(PP) | R(THR) | R(LR) | R(BARRIER_MASK) |
+    R(NULL_REG) | R(HEAP_BASE) | R(R31) |  // C++ SP
+    R(R18) | R(DISPATCH_TABLE_REG);
+constexpr intptr_t kNumberOfReservedCpuRegisters = 13;
 // CPU registers available to Dart allocator.
 const RegList kDartAvailableCpuRegs =
     kAllCpuRegistersList & ~kReservedCpuRegisters;
@@ -365,7 +366,7 @@
 const int kDartVolatileFpuRegCount = 24;
 
 // Two callee save scratch registers used by leaf runtime call sequence.
-const Register kCallLeafRuntimeCalleeSaveScratch1 = R23;
+const Register kCallLeafRuntimeCalleeSaveScratch1 = R20;
 const Register kCallLeafRuntimeCalleeSaveScratch2 = R25;
 static_assert((R(kCallLeafRuntimeCalleeSaveScratch1) & kAbiPreservedCpuRegs) !=
                   0,
@@ -940,14 +941,14 @@
 
 enum Extend {
   kNoExtend = -1,
-  UXTB = 0,
-  UXTH = 1,
-  UXTW = 2,
-  UXTX = 3,
-  SXTB = 4,
-  SXTH = 5,
-  SXTW = 6,
-  SXTX = 7,
+  UXTB = 0,  // Zero extend byte.
+  UXTH = 1,  // Zero extend halfword (16 bits).
+  UXTW = 2,  // Zero extend word (32 bits).
+  UXTX = 3,  // Zero extend doubleword (64 bits).
+  SXTB = 4,  // Sign extend byte.
+  SXTH = 5,  // Sign extend halfword (16 bits).
+  SXTW = 6,  // Sign extend word (32 bits).
+  SXTX = 7,  // Sign extend doubleword (64 bits).
   kMaxExtend = 8,
 };
 
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 16cc361..acf1abd 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -1846,6 +1846,7 @@
   Code& code = Code::Handle(zone);
   Code& inlined_code = Code::Handle(zone);
   Array& deopt_frame = Array::Handle(zone);
+  Smi& offset = Smi::Handle(zone);
   Function& function = Function::Handle(zone);
 
   constexpr intptr_t kDefaultStackAllocation = 8;
@@ -1853,7 +1854,8 @@
 
   const auto& code_array = GrowableObjectArray::ZoneHandle(
       zone, GrowableObjectArray::New(kDefaultStackAllocation));
-  GrowableArray<uword> pc_offset_array(kDefaultStackAllocation);
+  const auto& pc_offset_array = GrowableObjectArray::ZoneHandle(
+      zone, GrowableObjectArray::New(kDefaultStackAllocation));
   bool has_async = false;
 
   std::function<void(StackFrame*)> on_sync_frame = [&](StackFrame* frame) {
@@ -1862,7 +1864,7 @@
                      &inlined_code, &deopt_frame);
   };
 
-  StackTraceUtils::CollectFramesLazy(thread, code_array, &pc_offset_array,
+  StackTraceUtils::CollectFramesLazy(thread, code_array, pc_offset_array,
                                      /*skip_frames=*/0, &on_sync_frame,
                                      &has_async);
 
@@ -1898,8 +1900,8 @@
       continue;
     }
 
-    const uword pc_offset = pc_offset_array[i];
-    const uword absolute_pc = code.PayloadStart() + pc_offset;
+    offset ^= pc_offset_array.At(i);
+    const uword absolute_pc = code.PayloadStart() + offset.Value();
     stack_trace->AddAsyncCausalFrame(absolute_pc, code);
   }
 
@@ -2134,7 +2136,8 @@
       function = code.function();
       if (function.is_visible()) {
         ASSERT(function.ptr() == code.function());
-        uword pc = code.PayloadStart() + ex_trace.PcOffsetAtFrame(i);
+        uword pc =
+            code.PayloadStart() + Smi::Value(ex_trace.PcOffsetAtFrame(i));
         if (code.is_optimized() && ex_trace.expand_inlined()) {
           // Traverse inlined frames.
           for (InlinedFunctionsIterator it(code, pc); !it.Done();
diff --git a/runtime/vm/dwarf.cc b/runtime/vm/dwarf.cc
index 35df763..a818df9 100644
--- a/runtime/vm/dwarf.cc
+++ b/runtime/vm/dwarf.cc
@@ -146,7 +146,7 @@
   // Dwarf object (which is currently true).  Otherwise, need to copy.
   code_to_name_.Insert({&code, name});
 
-  if (code.IsFunctionCode() && !code.IsUnknownDartCode()) {
+  if (code.IsFunctionCode()) {
     const Function& function = Function::Handle(zone_, code.function());
     AddFunction(function);
   }
@@ -364,7 +364,7 @@
   for (intptr_t i = 0; i < codes_.length(); i++) {
     const Code& code = *(codes_[i]);
     RELEASE_ASSERT(!code.IsNull());
-    if (!code.IsFunctionCode() || code.IsUnknownDartCode()) {
+    if (!code.IsFunctionCode()) {
       continue;
     }
 
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index 1d76750..e9464e3 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -35,7 +35,7 @@
   StackTraceBuilder() {}
   virtual ~StackTraceBuilder() {}
 
-  virtual void AddFrame(const Object& code, uword pc_offset) = 0;
+  virtual void AddFrame(const Object& code, const Smi& offset) = 0;
 };
 
 class PreallocatedStackTraceBuilder : public StackTraceBuilder {
@@ -50,7 +50,7 @@
   }
   ~PreallocatedStackTraceBuilder() {}
 
-  void AddFrame(const Object& code, uword pc_offset) override;
+  virtual void AddFrame(const Object& code, const Smi& offset);
 
  private:
   static const int kNumTopframes = StackTrace::kPreallocatedStackdepth / 2;
@@ -63,10 +63,11 @@
 };
 
 void PreallocatedStackTraceBuilder::AddFrame(const Object& code,
-                                             uword pc_offset) {
+                                             const Smi& offset) {
   if (cur_index_ >= StackTrace::kPreallocatedStackdepth) {
     // The number of frames is overflowing the preallocated stack trace object.
     Object& frame_code = Object::Handle();
+    Smi& frame_offset = Smi::Handle();
     intptr_t start = StackTrace::kPreallocatedStackdepth - (kNumTopframes - 1);
     intptr_t null_slot = start - 2;
     // We are going to drop one frame.
@@ -79,19 +80,20 @@
       dropped_frames_++;
     }
     // Encode the number of dropped frames into the pc offset.
-    stacktrace_.SetPcOffsetAtFrame(null_slot, dropped_frames_);
+    frame_offset = Smi::New(dropped_frames_);
+    stacktrace_.SetPcOffsetAtFrame(null_slot, frame_offset);
     // Move frames one slot down so that we can accommodate the new frame.
     for (intptr_t i = start; i < StackTrace::kPreallocatedStackdepth; i++) {
       intptr_t prev = (i - 1);
       frame_code = stacktrace_.CodeAtFrame(i);
-      const uword frame_offset = stacktrace_.PcOffsetAtFrame(i);
+      frame_offset = stacktrace_.PcOffsetAtFrame(i);
       stacktrace_.SetCodeAtFrame(prev, frame_code);
       stacktrace_.SetPcOffsetAtFrame(prev, frame_offset);
     }
     cur_index_ = (StackTrace::kPreallocatedStackdepth - 1);
   }
   stacktrace_.SetCodeAtFrame(cur_index_, code);
-  stacktrace_.SetPcOffsetAtFrame(cur_index_, pc_offset);
+  stacktrace_.SetPcOffsetAtFrame(cur_index_, offset);
   cur_index_ += 1;
 }
 
@@ -102,14 +104,15 @@
   StackFrame* frame = frames.NextFrame();
   ASSERT(frame != NULL);  // We expect to find a dart invocation frame.
   Code& code = Code::Handle();
+  Smi& offset = Smi::Handle();
   for (; frame != NULL; frame = frames.NextFrame()) {
     if (!frame->IsDartFrame()) {
       continue;
     }
     code = frame->LookupDartCode();
     ASSERT(code.ContainsInstructionAt(frame->pc()));
-    const uword pc_offset = frame->pc() - code.PayloadStart();
-    builder->AddFrame(code, pc_offset);
+    offset = Smi::New(frame->pc() - code.PayloadStart());
+    builder->AddFrame(code, offset);
   }
 }
 
diff --git a/runtime/vm/globals.h b/runtime/vm/globals.h
index 3ac014d..be0584f 100644
--- a/runtime/vm/globals.h
+++ b/runtime/vm/globals.h
@@ -20,7 +20,11 @@
 namespace dart {
 // Smi value range is from -(2^N) to (2^N)-1.
 // N=30 (32-bit build) or N=62 (64-bit build).
+#if !defined(DART_COMPRESSED_POINTERS)
 const intptr_t kSmiBits = kBitsPerWord - 2;
+#else
+const intptr_t kSmiBits = 30;
+#endif
 const intptr_t kSmiMax = (static_cast<intptr_t>(1) << kSmiBits) - 1;
 const intptr_t kSmiMin = -(static_cast<intptr_t>(1) << kSmiBits);
 
diff --git a/runtime/vm/instructions_arm.cc b/runtime/vm/instructions_arm.cc
index 1c45ff9..c2b7014 100644
--- a/runtime/vm/instructions_arm.cc
+++ b/runtime/vm/instructions_arm.cc
@@ -263,9 +263,10 @@
   object_pool_.SetObjectAt(target_pool_index_, target_code);
 }
 
-SwitchableCallPatternBase::SwitchableCallPatternBase(
-    const ObjectPool& object_pool)
-    : object_pool_(object_pool), data_pool_index_(-1), target_pool_index_(-1) {}
+SwitchableCallPatternBase::SwitchableCallPatternBase(const Code& code)
+    : object_pool_(ObjectPool::Handle(code.GetObjectPool())),
+      data_pool_index_(-1),
+      target_pool_index_(-1) {}
 
 ObjectPtr SwitchableCallPatternBase::data() const {
   return object_pool_.ObjectAt(data_pool_index_);
@@ -277,7 +278,7 @@
 }
 
 SwitchableCallPattern::SwitchableCallPattern(uword pc, const Code& code)
-    : SwitchableCallPatternBase(ObjectPool::Handle(code.GetObjectPool())) {
+    : SwitchableCallPatternBase(code) {
   ASSERT(code.ContainsInstructionAt(pc));
   // Last instruction: blx lr.
   ASSERT(*(reinterpret_cast<uint32_t*>(pc) - 1) == 0xe12fff3e);
@@ -301,9 +302,9 @@
   object_pool_.SetObjectAt(target_pool_index_, target);
 }
 
-BareSwitchableCallPattern::BareSwitchableCallPattern(uword pc)
-    : SwitchableCallPatternBase(ObjectPool::Handle(
-          IsolateGroup::Current()->object_store()->global_object_pool())) {
+BareSwitchableCallPattern::BareSwitchableCallPattern(uword pc, const Code& code)
+    : SwitchableCallPatternBase(code) {
+  ASSERT(code.ContainsInstructionAt(pc));
   // Last instruction: blx lr.
   ASSERT(*(reinterpret_cast<uint32_t*>(pc) - 1) == 0xe12fff3e);
 
diff --git a/runtime/vm/instructions_arm.h b/runtime/vm/instructions_arm.h
index a1e1f9b..7b7b43b 100644
--- a/runtime/vm/instructions_arm.h
+++ b/runtime/vm/instructions_arm.h
@@ -131,7 +131,7 @@
 //   call target.entry           call stub.entry         call stub.entry
 class SwitchableCallPatternBase : public ValueObject {
  public:
-  explicit SwitchableCallPatternBase(const ObjectPool& object_pool);
+  explicit SwitchableCallPatternBase(const Code& code);
 
   ObjectPtr data() const;
   void SetData(const Object& data) const;
@@ -166,7 +166,7 @@
 // of the monomorphic function or a stub entry point.
 class BareSwitchableCallPattern : public SwitchableCallPatternBase {
  public:
-  explicit BareSwitchableCallPattern(uword pc);
+  BareSwitchableCallPattern(uword pc, const Code& code);
 
   uword target_entry() const;
   void SetTarget(const Code& target) const;
diff --git a/runtime/vm/instructions_arm64.cc b/runtime/vm/instructions_arm64.cc
index d193510..a38a07e 100644
--- a/runtime/vm/instructions_arm64.cc
+++ b/runtime/vm/instructions_arm64.cc
@@ -397,9 +397,10 @@
   // No need to flush the instruction cache, since the code is not modified.
 }
 
-SwitchableCallPatternBase::SwitchableCallPatternBase(
-    const ObjectPool& object_pool)
-    : object_pool_(object_pool), data_pool_index_(-1), target_pool_index_(-1) {}
+SwitchableCallPatternBase::SwitchableCallPatternBase(const Code& code)
+    : object_pool_(ObjectPool::Handle(code.GetObjectPool())),
+      data_pool_index_(-1),
+      target_pool_index_(-1) {}
 
 ObjectPtr SwitchableCallPatternBase::data() const {
   return object_pool_.ObjectAt(data_pool_index_);
@@ -411,7 +412,7 @@
 }
 
 SwitchableCallPattern::SwitchableCallPattern(uword pc, const Code& code)
-    : SwitchableCallPatternBase(ObjectPool::Handle(code.GetObjectPool())) {
+    : SwitchableCallPatternBase(code) {
   ASSERT(code.ContainsInstructionAt(pc));
   // Last instruction: blr lr.
   ASSERT(*(reinterpret_cast<uint32_t*>(pc) - 1) == 0xd63f03c0);
@@ -437,9 +438,9 @@
   object_pool_.SetObjectAt(target_pool_index_, target);
 }
 
-BareSwitchableCallPattern::BareSwitchableCallPattern(uword pc)
-    : SwitchableCallPatternBase(ObjectPool::Handle(
-          IsolateGroup::Current()->object_store()->global_object_pool())) {
+BareSwitchableCallPattern::BareSwitchableCallPattern(uword pc, const Code& code)
+    : SwitchableCallPatternBase(code) {
+  ASSERT(code.ContainsInstructionAt(pc));
   // Last instruction: blr lr.
   ASSERT(*(reinterpret_cast<uint32_t*>(pc) - 1) == 0xd63f03c0);
 
diff --git a/runtime/vm/instructions_arm64.h b/runtime/vm/instructions_arm64.h
index b450522..ae75539 100644
--- a/runtime/vm/instructions_arm64.h
+++ b/runtime/vm/instructions_arm64.h
@@ -141,7 +141,7 @@
 //   call target.entry           call stub.entry         call stub.entry
 class SwitchableCallPatternBase : public ValueObject {
  public:
-  explicit SwitchableCallPatternBase(const ObjectPool& object_pool);
+  explicit SwitchableCallPatternBase(const Code& code);
 
   ObjectPtr data() const;
   void SetData(const Object& data) const;
@@ -176,7 +176,7 @@
 // of the monomorphic function or a stub entry point.
 class BareSwitchableCallPattern : public SwitchableCallPatternBase {
  public:
-  explicit BareSwitchableCallPattern(uword pc);
+  BareSwitchableCallPattern(uword pc, const Code& code);
 
   uword target_entry() const;
   void SetTarget(const Code& target) const;
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 286f4f1..1186974 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -75,7 +75,7 @@
 
 namespace dart {
 
-DEFINE_FLAG(uint64_t,
+DEFINE_FLAG(int,
             huge_method_cutoff_in_code_size,
             200000,
             "Huge method cutoff in unoptimized code size (in bytes).");
@@ -1059,11 +1059,6 @@
   cls.set_is_declaration_loaded();
   cls.set_is_type_finalized();
 
-  cls = Class::New<FunctionType, RTN::FunctionType>(isolate_group);
-  cls.set_is_allocate_finalized();
-  cls.set_is_declaration_loaded();
-  cls.set_is_type_finalized();
-
   cls = dynamic_class_;
   *dynamic_type_ =
       Type::New(cls, Object::null_type_arguments(), Nullability::kNullable);
@@ -1370,12 +1365,6 @@
   cls = isolate_group->class_table()->At(kForwardingCorpse);
   cls.set_name(Symbols::ForwardingCorpse());
 
-#if defined(DART_PRECOMPILER)
-  const auto& function =
-      Function::Handle(StubCode::UnknownDartCode().function());
-  function.set_name(Symbols::OptimizedOut());
-#endif  // defined(DART_PRECOMPILER)
-
   {
     ASSERT(isolate_group == Dart::vm_isolate_group());
     Thread* thread = Thread::Current();
@@ -16784,8 +16773,7 @@
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
 
 bool Code::SlowFindRawCodeVisitor::FindObject(ObjectPtr raw_obj) const {
-  return UntaggedCode::ContainsPC(raw_obj, pc_) &&
-         !Code::IsUnknownDartCode(Code::RawCast(raw_obj));
+  return UntaggedCode::ContainsPC(raw_obj, pc_);
 }
 
 CodePtr Code::LookupCodeInIsolateGroup(IsolateGroup* isolate_group, uword pc) {
@@ -16940,10 +16928,6 @@
   return OwnerClassId() == kFunctionCid;
 }
 
-bool Code::IsUnknownDartCode(CodePtr code) {
-  return code == StubCode::UnknownDartCode().ptr();
-}
-
 void Code::DisableDartCode() const {
   SafepointOperationScope safepoint(Thread::Current());
   ASSERT(IsFunctionCode());
@@ -17060,41 +17044,6 @@
   reader.DumpSourcePositions(relative_addresses ? 0 : PayloadStart());
 }
 
-bool Code::CanBeOmittedFromAOTSnapshot() const {
-  NoSafepointScope no_safepoint;
-
-  // Code objects are stored in stack frames if not use_bare_instructions.
-  // Code objects are used by stack traces if not dwarf_stack_traces.
-  if (!FLAG_precompiled_mode || !FLAG_use_bare_instructions ||
-      !FLAG_dwarf_stack_traces_mode) {
-    return false;
-  }
-  // Only omit Code objects corresponding to Dart functions.
-  if (!IsFunctionCode()) {
-    return false;
-  }
-  // Retain Code object if it has exception handlers or PC descriptors.
-  if ((exception_handlers() != Object::empty_exception_handlers().ptr()) ||
-      (pc_descriptors() != Object::empty_descriptors().ptr())) {
-    return false;
-  }
-  if (!owner()->IsHeapObject()) {
-    // Can drop Code if precompiler dropped the Function and only left Smi
-    // classId.
-    return true;
-  }
-  // Retain Code objects corresponding to:
-  // * invisible functions (to filter them from stack traces);
-  // * async/async* closures (to construct async stacks).
-  // * native functions (to find native implementation).
-  const auto& func = Function::Handle(function());
-  if (!func.is_visible() || func.is_native() || func.IsAsyncClosure() ||
-      func.IsAsyncGenClosure()) {
-    return false;
-  }
-  return true;
-}
-
 intptr_t Context::GetLevel() const {
   intptr_t level = 0;
   Context& parent_ctx = Context::Handle(parent());
@@ -24717,17 +24666,15 @@
   code_array.SetAt(frame_index, code);
 }
 
-uword StackTrace::PcOffsetAtFrame(intptr_t frame_index) const {
-  const TypedData& pc_offset_array =
-      TypedData::Handle(untag()->pc_offset_array());
-  return pc_offset_array.GetUintPtr(frame_index * kWordSize);
+SmiPtr StackTrace::PcOffsetAtFrame(intptr_t frame_index) const {
+  const Array& pc_offset_array = Array::Handle(untag()->pc_offset_array());
+  return static_cast<SmiPtr>(pc_offset_array.At(frame_index));
 }
 
 void StackTrace::SetPcOffsetAtFrame(intptr_t frame_index,
-                                    uword pc_offset) const {
-  const TypedData& pc_offset_array =
-      TypedData::Handle(untag()->pc_offset_array());
-  pc_offset_array.SetUintPtr(frame_index * kWordSize, pc_offset);
+                                    const Smi& pc_offset) const {
+  const Array& pc_offset_array = Array::Handle(untag()->pc_offset_array());
+  pc_offset_array.SetAt(frame_index, pc_offset);
 }
 
 void StackTrace::set_async_link(const StackTrace& async_link) const {
@@ -24738,7 +24685,7 @@
   untag()->set_code_array(code_array.ptr());
 }
 
-void StackTrace::set_pc_offset_array(const TypedData& pc_offset_array) const {
+void StackTrace::set_pc_offset_array(const Array& pc_offset_array) const {
   untag()->set_pc_offset_array(pc_offset_array.ptr());
 }
 
@@ -24751,7 +24698,7 @@
 }
 
 StackTracePtr StackTrace::New(const Array& code_array,
-                              const TypedData& pc_offset_array,
+                              const Array& pc_offset_array,
                               Heap::Space space) {
   StackTrace& result = StackTrace::Handle();
   {
@@ -24768,7 +24715,7 @@
 }
 
 StackTracePtr StackTrace::New(const Array& code_array,
-                              const TypedData& pc_offset_array,
+                              const Array& pc_offset_array,
                               const StackTrace& async_link,
                               bool skip_sync_start_in_parent_stack,
                               Heap::Space space) {
@@ -24955,8 +24902,9 @@
         if ((i < (stack_trace.Length() - 1)) &&
             (stack_trace.CodeAtFrame(i + 1) != Code::null())) {
           buffer.AddString("...\n...\n");
+          ASSERT(stack_trace.PcOffsetAtFrame(i) != Smi::null());
           // To account for gap frames.
-          frame_index += stack_trace.PcOffsetAtFrame(i);
+          frame_index += Smi::Value(stack_trace.PcOffsetAtFrame(i));
         }
         continue;
       }
@@ -24969,7 +24917,7 @@
         continue;
       }
 
-      const uword pc_offset = stack_trace.PcOffsetAtFrame(i);
+      intptr_t pc_offset = Smi::Value(stack_trace.PcOffsetAtFrame(i));
       ASSERT(code_object.IsCode());
       code ^= code_object.ptr();
       ASSERT(code.IsFunctionCode());
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 33d8942..5cf9f6c 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -5970,7 +5970,6 @@
   uword PayloadStart() const { return PayloadStartOf(ptr()); }
   static uword PayloadStartOf(const CodePtr code) {
 #if defined(DART_PRECOMPILED_RUNTIME)
-    if (IsUnknownDartCode(code)) return 0;
     const uword entry_offset = HasMonomorphicEntry(code)
                                    ? Instructions::kPolymorphicEntryOffsetAOT
                                    : 0;
@@ -6016,10 +6015,9 @@
   }
 
   // Returns the size of [instructions()].
-  uword Size() const { return PayloadSizeOf(ptr()); }
-  static uword PayloadSizeOf(const CodePtr code) {
+  intptr_t Size() const { return PayloadSizeOf(ptr()); }
+  static intptr_t PayloadSizeOf(const CodePtr code) {
 #if defined(DART_PRECOMPILED_RUNTIME)
-    if (IsUnknownDartCode(code)) return kUwordMax;
     return code->untag()->instructions_length_;
 #else
     return Instructions::Size(InstructionsOf(code));
@@ -6349,11 +6347,6 @@
   bool IsTypeTestStubCode() const;
   bool IsFunctionCode() const;
 
-  // Returns true if this Code object represents
-  // Dart function code without any additional information.
-  bool IsUnknownDartCode() const { return IsUnknownDartCode(ptr()); }
-  static bool IsUnknownDartCode(CodePtr code);
-
   void DisableDartCode() const;
 
   void DisableStubCode() const;
@@ -6378,11 +6371,6 @@
     untag()->set_object_pool(object_pool);
   }
 
-  // Returns true if given Code object can be omitted from
-  // the AOT snapshot (when corresponding instructions are
-  // included).
-  bool CanBeOmittedFromAOTSnapshot() const;
-
  private:
   void set_state_bits(intptr_t bits) const;
 
@@ -10815,9 +10803,9 @@
   ObjectPtr CodeAtFrame(intptr_t frame_index) const;
   void SetCodeAtFrame(intptr_t frame_index, const Object& code) const;
 
-  TypedDataPtr pc_offset_array() const { return untag()->pc_offset_array(); }
-  uword PcOffsetAtFrame(intptr_t frame_index) const;
-  void SetPcOffsetAtFrame(intptr_t frame_index, uword pc_offset) const;
+  ArrayPtr pc_offset_array() const { return untag()->pc_offset_array(); }
+  SmiPtr PcOffsetAtFrame(intptr_t frame_index) const;
+  void SetPcOffsetAtFrame(intptr_t frame_index, const Smi& pc_offset) const;
 
   bool skip_sync_start_in_parent_stack() const;
   void set_skip_sync_start_in_parent_stack(bool value) const;
@@ -10840,18 +10828,18 @@
     return RoundedAllocationSize(sizeof(UntaggedStackTrace));
   }
   static StackTracePtr New(const Array& code_array,
-                           const TypedData& pc_offset_array,
+                           const Array& pc_offset_array,
                            Heap::Space space = Heap::kNew);
 
   static StackTracePtr New(const Array& code_array,
-                           const TypedData& pc_offset_array,
+                           const Array& pc_offset_array,
                            const StackTrace& async_link,
                            bool skip_sync_start_in_parent_stack,
                            Heap::Space space = Heap::kNew);
 
  private:
   void set_code_array(const Array& code_array) const;
-  void set_pc_offset_array(const TypedData& pc_offset_array) const;
+  void set_pc_offset_array(const Array& pc_offset_array) const;
   bool expand_inlined() const;
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(StackTrace, Instance);
diff --git a/runtime/vm/object_graph.cc b/runtime/vm/object_graph.cc
index 0b7cd00..8fc322a 100644
--- a/runtime/vm/object_graph.cc
+++ b/runtime/vm/object_graph.cc
@@ -963,11 +963,7 @@
       ScrubAndWriteUtf8(static_cast<FunctionPtr>(obj)->untag()->name_);
     } else if (cid == kCodeCid) {
       ObjectPtr owner = static_cast<CodePtr>(obj)->untag()->owner_;
-      if (!owner->IsHeapObject()) {
-        // Precompiler removed owner object from the snapshot,
-        // only leaving Smi classId.
-        writer_->WriteUnsigned(kNoData);
-      } else if (owner->IsFunction()) {
+      if (owner->IsFunction()) {
         writer_->WriteUnsigned(kNameData);
         ScrubAndWriteUtf8(static_cast<FunctionPtr>(owner)->untag()->name_);
       } else if (owner->IsClass()) {
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc
index 57343da..feb4803 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -53,9 +53,8 @@
 static StackTracePtr CreatePreallocatedStackTrace(Zone* zone) {
   const Array& code_array = Array::Handle(
       zone, Array::New(StackTrace::kPreallocatedStackdepth, Heap::kOld));
-  const TypedData& pc_offset_array = TypedData::Handle(
-      zone, TypedData::New(kUintPtrCid, StackTrace::kPreallocatedStackdepth,
-                           Heap::kOld));
+  const Array& pc_offset_array = Array::Handle(
+      zone, Array::New(StackTrace::kPreallocatedStackdepth, Heap::kOld));
   const StackTrace& stack_trace =
       StackTrace::Handle(zone, StackTrace::New(code_array, pc_offset_array));
   // Expansion of inlined functions requires additional memory at run time,
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index cad9d62..f09faae 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -374,7 +374,7 @@
   EXPECT(Smi::IsValid(-15));
   EXPECT(Smi::IsValid(0xFFu));
 // Upper two bits must be either 00 or 11.
-#if defined(ARCH_IS_64_BIT)
+#if defined(ARCH_IS_64_BIT) && !defined(DART_COMPRESSED_POINTERS)
   EXPECT(!Smi::IsValid(kMaxInt64));
   EXPECT(Smi::IsValid(0x3FFFFFFFFFFFFFFF));
   EXPECT(Smi::IsValid(-1));
@@ -502,7 +502,7 @@
 ISOLATE_UNIT_TEST_CASE(Mint) {
 // On 64-bit architectures a Smi is stored in a 64 bit word. A Midint cannot
 // be allocated if it does fit into a Smi.
-#if !defined(ARCH_IS_64_BIT)
+#if !defined(ARCH_IS_64_BIT) || defined(DART_COMPRESSED_POINTERS)
   {
     Mint& med = Mint::Handle();
     EXPECT(med.IsNull());
diff --git a/runtime/vm/pointer_tagging.h b/runtime/vm/pointer_tagging.h
index 587bffa..a26c158 100644
--- a/runtime/vm/pointer_tagging.h
+++ b/runtime/vm/pointer_tagging.h
@@ -84,6 +84,12 @@
   kSmiTagShift = 1,
 };
 
+#if !defined(DART_COMPRESSED_POINTERS)
+static constexpr uintptr_t kHeapBaseMask = 0;
+#else
+static constexpr uintptr_t kHeapBaseMask = ~(4LL * GB - 1);
+#endif
+
 }  // namespace dart
 
 #endif  // RUNTIME_VM_POINTER_TAGGING_H_
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index 684d7f3..f0d9d2c 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -1410,7 +1410,7 @@
   ~CodeLookupTableBuilder() {}
 
   void VisitObject(ObjectPtr raw_obj) {
-    if (raw_obj->IsCode() && !Code::IsUnknownDartCode(Code::RawCast(raw_obj))) {
+    if (raw_obj->IsCode()) {
       table_->Add(Code::Handle(Code::RawCast(raw_obj)));
     }
   }
diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc
index 0ba5912..599885b 100644
--- a/runtime/vm/profiler_service.cc
+++ b/runtime/vm/profiler_service.cc
@@ -70,9 +70,6 @@
     return NULL;
   }
   const Script& script = Script::Handle(function_.script());
-  if (script.IsNull()) {
-    return NULL;
-  }
   const String& uri = String::Handle(script.resolved_url());
   if (uri.IsNull()) {
     return NULL;
diff --git a/runtime/vm/profiler_test.cc b/runtime/vm/profiler_test.cc
index 40f1a09..d4e62d2 100644
--- a/runtime/vm/profiler_test.cc
+++ b/runtime/vm/profiler_test.cc
@@ -2288,7 +2288,7 @@
 static uword FindPCForTokenPosition(const Code& code, TokenPosition tp) {
   GrowableArray<const Function*> functions;
   GrowableArray<TokenPosition> token_positions;
-  for (uword pc_offset = 0; pc_offset < code.Size(); pc_offset++) {
+  for (intptr_t pc_offset = 0; pc_offset < code.Size(); pc_offset++) {
     code.GetInlinedFunctionsAtInstruction(pc_offset, &functions,
                                           &token_positions);
     if (token_positions[0] == tp) {
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 160185c..1ac32d0 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -2835,18 +2835,10 @@
 // Define an aliases for intptr_t.
 #if defined(ARCH_IS_32_BIT)
 #define kIntPtrCid kTypedDataInt32ArrayCid
-#define GetIntPtr GetInt32
 #define SetIntPtr SetInt32
-#define kUintPtrCid kTypedDataUint32ArrayCid
-#define GetUintPtr GetUint32
-#define SetUintPtr SetUint32
 #elif defined(ARCH_IS_64_BIT)
 #define kIntPtrCid kTypedDataInt64ArrayCid
-#define GetIntPtr GetInt64
 #define SetIntPtr SetInt64
-#define kUintPtrCid kTypedDataUint64ArrayCid
-#define GetUintPtr GetUint64
-#define SetUintPtr SetUint64
 #else
 #error Architecture is not 32-bit or 64-bit.
 #endif  // ARCH_IS_32_BIT
@@ -2925,8 +2917,7 @@
                 async_link);  // Link to parent async stack trace.
   POINTER_FIELD(ArrayPtr,
                 code_array);  // Code object for each frame in the stack trace.
-  POINTER_FIELD(TypedDataPtr, pc_offset_array);  // Offset of PC for each frame.
-
+  POINTER_FIELD(ArrayPtr, pc_offset_array);  // Offset of PC for each frame.
   VISIT_TO(ObjectPtr, pc_offset_array)
   ObjectPtr* to_snapshot(Snapshot::Kind kind) { return to(); }
 
diff --git a/runtime/vm/regexp.cc b/runtime/vm/regexp.cc
index 9b880c8..782ecd1 100644
--- a/runtime/vm/regexp.cc
+++ b/runtime/vm/regexp.cc
@@ -2683,18 +2683,28 @@
                                                 intptr_t eats_at_least) {
   intptr_t preload_characters =
       Utils::Minimum(static_cast<intptr_t>(4), eats_at_least);
-  if (compiler->macro_assembler()->CanReadUnaligned()) {
-    bool one_byte = compiler->one_byte();
-    if (one_byte) {
-      if (preload_characters > 4) preload_characters = 4;
-      // We can't preload 3 characters because there is no machine instruction
-      // to do that.  We can't just load 4 because we could be reading
-      // beyond the end of the string, which could cause a memory fault.
-      if (preload_characters == 3) preload_characters = 2;
-    } else {
-      if (preload_characters > 2) preload_characters = 2;
-    }
+  if (compiler->one_byte()) {
+#if !defined(DART_COMPRESSED_POINTERS)
+    if (preload_characters > 4) preload_characters = 4;
+    // We can't preload 3 characters because there is no machine instruction
+    // to do that.  We can't just load 4 because we could be reading
+    // beyond the end of the string, which could cause a memory fault.
+    if (preload_characters == 3) preload_characters = 2;
+#else
+    // Ensure LoadCodeUnitsInstr can always produce a Smi. See
+    // https://github.com/dart-lang/sdk/issues/29951
+    if (preload_characters > 2) preload_characters = 2;
+#endif
   } else {
+#if !defined(DART_COMPRESSED_POINTERS)
+    if (preload_characters > 2) preload_characters = 2;
+#else
+    // Ensure LoadCodeUnitsInstr can always produce a Smi. See
+    // https://github.com/dart-lang/sdk/issues/29951
+    if (preload_characters > 1) preload_characters = 1;
+#endif
+  }
+  if (!compiler->macro_assembler()->CanReadUnaligned()) {
     if (preload_characters > 1) preload_characters = 1;
   }
   return preload_characters;
diff --git a/runtime/vm/reverse_pc_lookup_cache.cc b/runtime/vm/reverse_pc_lookup_cache.cc
index 70f06df..dad8849 100644
--- a/runtime/vm/reverse_pc_lookup_cache.cc
+++ b/runtime/vm/reverse_pc_lookup_cache.cc
@@ -10,9 +10,9 @@
 
 namespace dart {
 
-CodePtr ReversePc::LookupInGroup(IsolateGroup* group,
-                                 uword pc,
-                                 bool is_return_address) {
+CodePtr ReversePc::Lookup(IsolateGroup* group,
+                          uword pc,
+                          bool is_return_address) {
 #if defined(DART_PRECOMPILED_RUNTIME)
   // This can run in the middle of GC and must not allocate handles.
   NoSafepointScope no_safepoint;
@@ -67,35 +67,4 @@
   return Code::null();
 }
 
-CodePtr ReversePc::Lookup(IsolateGroup* group,
-                          uword pc,
-                          bool is_return_address) {
-  ASSERT(FLAG_precompiled_mode && FLAG_use_bare_instructions);
-  NoSafepointScope no_safepoint;
-
-  CodePtr code = LookupInGroup(group, pc, is_return_address);
-  if (code == Code::null()) {
-    code = LookupInGroup(Dart::vm_isolate_group(), pc, is_return_address);
-  }
-  return code;
-}
-
-CompressedStackMapsPtr ReversePc::FindCompressedStackMaps(
-    IsolateGroup* group,
-    uword pc,
-    bool is_return_address,
-    uword* code_start) {
-  ASSERT(FLAG_precompiled_mode && FLAG_use_bare_instructions);
-  NoSafepointScope no_safepoint;
-
-  CodePtr code = Lookup(group, pc, is_return_address);
-  if (code != Code::null()) {
-    *code_start = Code::PayloadStartOf(code);
-    return code->untag()->compressed_stackmaps();
-  }
-
-  *code_start = 0;
-  return CompressedStackMaps::null();
-}
-
 }  // namespace dart
diff --git a/runtime/vm/reverse_pc_lookup_cache.h b/runtime/vm/reverse_pc_lookup_cache.h
index 9eb0558..8c45bb1 100644
--- a/runtime/vm/reverse_pc_lookup_cache.h
+++ b/runtime/vm/reverse_pc_lookup_cache.h
@@ -13,28 +13,11 @@
 
 class IsolateGroup;
 
-// This class provides mechanism to find Code and CompressedStackMaps
-// objects corresponding to the given PC.
-// Can only be used in AOT runtime with bare instructions.
 class ReversePc : public AllStatic {
  public:
-  // Looks for Code object corresponding to |pc| in the
-  // given isolate |group| and vm isolate group.
-  static CodePtr Lookup(IsolateGroup* group, uword pc, bool is_return_address);
-
-  // Looks for CompressedStackMaps corresponding to |pc| in the
-  // given isolate |group| and vm isolate group.
-  // Sets |code_start| to the beginning of the instructions corresponding
-  // to |pc| (like Code::PayloadStart()).
-  static CompressedStackMapsPtr FindCompressedStackMaps(IsolateGroup* group,
-                                                        uword pc,
-                                                        bool is_return_address,
-                                                        uword* code_start);
-
- private:
-  static CodePtr LookupInGroup(IsolateGroup* group,
-                               uword pc,
-                               bool is_return_address);
+  static CodePtr Lookup(IsolateGroup* group,
+                        uword pc,
+                        bool is_return_address = false);
 };
 
 }  // namespace dart
diff --git a/runtime/vm/runtime_entry_arm64.cc b/runtime/vm/runtime_entry_arm64.cc
index 93a80fd..9e48050 100644
--- a/runtime/vm/runtime_entry_arm64.cc
+++ b/runtime/vm/runtime_entry_arm64.cc
@@ -75,6 +75,12 @@
     __ mov(CSP, kCallLeafRuntimeCalleeSaveScratch1);
     COMPILE_ASSERT(IsAbiPreservedRegister(THR));
     COMPILE_ASSERT(IsAbiPreservedRegister(PP));
+    COMPILE_ASSERT(IsAbiPreservedRegister(NULL_REG));
+    COMPILE_ASSERT(IsAbiPreservedRegister(BARRIER_MASK));
+    COMPILE_ASSERT(IsAbiPreservedRegister(HEAP_BASE));
+    COMPILE_ASSERT(IsAbiPreservedRegister(DISPATCH_TABLE_REG));
+    // These registers must be preserved by the runtime functions, otherwise
+    // we'd need to restore them here.
   } else {
     // Argument count is not checked here, but in the runtime entry for a more
     // informative error message.
diff --git a/runtime/vm/service_test.cc b/runtime/vm/service_test.cc
index 7dec0a8..c078398 100644
--- a/runtime/vm/service_test.cc
+++ b/runtime/vm/service_test.cc
@@ -259,7 +259,7 @@
   // Use the entry of the code object as it's reference.
   uword entry = code_c.PayloadStart();
   int64_t compile_timestamp = code_c.compile_timestamp();
-  EXPECT_GT(code_c.Size(), 16u);
+  EXPECT_GT(code_c.Size(), 16);
   uword last = entry + code_c.Size();
 
   // Build a mock message handler and wrap it in a dart port.
diff --git a/runtime/vm/simulator_arm64.cc b/runtime/vm/simulator_arm64.cc
index e5eb2d0..fe2911c 100644
--- a/runtime/vm/simulator_arm64.cc
+++ b/runtime/vm/simulator_arm64.cc
@@ -3745,6 +3745,9 @@
   set_register(NULL, PP, pp);
   set_register(NULL, BARRIER_MASK, thread->write_barrier_mask());
   set_register(NULL, NULL_REG, static_cast<int64_t>(Object::null()));
+#if defined(DART_COMPRESSED_POINTERS)
+  set_register(NULL, HEAP_BASE, thread->heap_base());
+#endif
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
     set_register(NULL, DISPATCH_TABLE_REG,
                  reinterpret_cast<int64_t>(thread->dispatch_table_array()));
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index 16bce51..7ee9e11 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -232,7 +232,7 @@
 // here covers most of the 64-bit range. On 32-bit platforms the smi
 // range covers most of the 32-bit range and values outside that
 // range are also represented as mints.
-#if defined(ARCH_IS_64_BIT)
+#if defined(ARCH_IS_64_BIT) && !defined(DART_COMPRESSED_POINTERS)
   EXPECT_EQ(Dart_CObject_kInt64, mint_cobject->type);
   EXPECT_EQ(value, mint_cobject->value.as_int64);
 #else
diff --git a/runtime/vm/stack_frame.cc b/runtime/vm/stack_frame.cc
index 037e70d..51c1722 100644
--- a/runtime/vm/stack_frame.cc
+++ b/runtime/vm/stack_frame.cc
@@ -105,9 +105,6 @@
 }
 
 bool StackFrame::IsBareInstructionsDartFrame() const {
-  if (!(FLAG_precompiled_mode && FLAG_use_bare_instructions)) {
-    return false;
-  }
   NoSafepointScope no_safepoint;
 
   Code code;
@@ -118,14 +115,18 @@
     ASSERT(cid == kNullCid || cid == kClassCid || cid == kFunctionCid);
     return cid == kFunctionCid;
   }
+  code = ReversePc::Lookup(Dart::vm_isolate_group(), pc(),
+                           /*is_return_address=*/true);
+  if (!code.IsNull()) {
+    auto const cid = code.OwnerClassId();
+    ASSERT(cid == kNullCid || cid == kClassCid || cid == kFunctionCid);
+    return cid == kFunctionCid;
+  }
 
   return false;
 }
 
 bool StackFrame::IsBareInstructionsStubFrame() const {
-  if (!(FLAG_precompiled_mode && FLAG_use_bare_instructions)) {
-    return false;
-  }
   NoSafepointScope no_safepoint;
 
   Code code;
@@ -136,6 +137,13 @@
     ASSERT(cid == kNullCid || cid == kClassCid || cid == kFunctionCid);
     return cid == kNullCid || cid == kClassCid;
   }
+  code = ReversePc::Lookup(Dart::vm_isolate_group(), pc(),
+                           /*is_return_address=*/true);
+  if (!code.IsNull()) {
+    auto const cid = code.OwnerClassId();
+    ASSERT(cid == kNullCid || cid == kClassCid || cid == kFunctionCid);
+    return cid == kNullCid || cid == kClassCid;
+  }
 
   return false;
 }
@@ -217,13 +225,9 @@
   // helper functions to the raw object interface.
   NoSafepointScope no_safepoint;
   Code code;
-  CompressedStackMaps maps;
-  uword code_start;
 
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
-    maps = ReversePc::FindCompressedStackMaps(isolate_group(), pc(),
-                                              /*is_return_address=*/true,
-                                              &code_start);
+    code = GetCodeObject();
   } else {
     ObjectPtr pc_marker = *(reinterpret_cast<ObjectPtr*>(
         fp() + (runtime_frame_layout.code_from_fp * kWordSize)));
@@ -232,23 +236,23 @@
     visitor->VisitPointer(&pc_marker);
     if (pc_marker->IsHeapObject() && (pc_marker->GetClassId() == kCodeCid)) {
       code ^= pc_marker;
-      code_start = code.PayloadStart();
-      maps = code.compressed_stackmaps();
-      ASSERT(!maps.IsNull());
     } else {
       ASSERT(pc_marker == Object::null());
     }
   }
 
-  if (!maps.IsNull()) {
+  if (!code.IsNull()) {
     // Optimized frames have a stack map. We need to visit the frame based
     // on the stack map.
+    CompressedStackMaps maps;
+    maps = code.compressed_stackmaps();
     CompressedStackMaps global_table;
 
     global_table =
         isolate_group()->object_store()->canonicalized_stack_map_entries();
     CompressedStackMaps::Iterator it(maps, global_table);
-    const uint32_t pc_offset = pc() - code_start;
+    const uword start = code.PayloadStart();
+    const uint32_t pc_offset = pc() - start;
     if (it.Find(pc_offset)) {
       ObjectPtr* first = reinterpret_cast<ObjectPtr*>(sp());
       ObjectPtr* last = reinterpret_cast<ObjectPtr*>(
@@ -301,14 +305,8 @@
     // unoptimized code, code with no stack map information at all, or the entry
     // to an osr function. In each of these cases, all stack slots contain
     // tagged pointers, so fall through.
-#if defined(DEBUG)
-    if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
-      ASSERT(IsStubFrame());
-    } else {
-      ASSERT(!code.is_optimized() ||
-             (pc_offset == code.EntryPoint() - code.PayloadStart()));
-    }
-#endif  // defined(DEBUG)
+    ASSERT(!code.is_optimized() || maps.IsNull() ||
+           (pc_offset == code.EntryPoint() - code.PayloadStart()));
   }
 
   // For normal unoptimized Dart frames and Stub frames each slot
@@ -350,23 +348,15 @@
 CodePtr StackFrame::GetCodeObject() const {
 #if defined(DART_PRECOMPILED_RUNTIME)
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
-    NoSafepointScope no_safepoint;
-    Code code;
-    code = ReversePc::Lookup(isolate_group(), pc(),
+    CodePtr code = ReversePc::Lookup(isolate_group(), pc(),
+                                     /*is_return_address=*/true);
+    if (code != Code::null()) {
+      return code;
+    }
+    code = ReversePc::Lookup(Dart::vm_isolate_group(), pc(),
                              /*is_return_address=*/true);
-    if (!code.IsNull()) {
-      // This is needed in order to test stack traces with the future
-      // behavior of ReversePc::Lookup which will return
-      // StubCode::UnknownDartCode() if code object is omitted from
-      // the snapshot.
-      if (FLAG_dwarf_stack_traces_mode && code.CanBeOmittedFromAOTSnapshot()) {
-        ASSERT(StubCode::UnknownDartCode().PayloadStart() == 0);
-        ASSERT(StubCode::UnknownDartCode().Size() == kUwordMax);
-        ASSERT(StubCode::UnknownDartCode().IsFunctionCode());
-        ASSERT(StubCode::UnknownDartCode().IsUnknownDartCode());
-        return StubCode::UnknownDartCode().ptr();
-      }
-      return code.ptr();
+    if (code != Code::null()) {
+      return code;
     }
     UNREACHABLE();
   }
diff --git a/runtime/vm/stack_trace.cc b/runtime/vm/stack_trace.cc
index f200269..e392260 100644
--- a/runtime/vm/stack_trace.cc
+++ b/runtime/vm/stack_trace.cc
@@ -429,17 +429,19 @@
 void StackTraceUtils::UnwindAwaiterChain(
     Zone* zone,
     const GrowableObjectArray& code_array,
-    GrowableArray<uword>* pc_offset_array,
+    const GrowableObjectArray& pc_offset_array,
     CallerClosureFinder* caller_closure_finder,
     const Closure& leaf_closure) {
   auto& code = Code::Handle(zone);
   auto& function = Function::Handle(zone);
   auto& closure = Closure::Handle(zone, leaf_closure.ptr());
   auto& pc_descs = PcDescriptors::Handle(zone);
+  auto& offset = Smi::Handle(zone);
 
   // Inject async suspension marker.
   code_array.Add(StubCode::AsynchronousGapMarker());
-  pc_offset_array->Add(0);
+  offset = Smi::New(0);
+  pc_offset_array.Add(offset);
 
   // Traverse the trail of async futures all the way up.
   for (; !closure.IsNull();
@@ -453,22 +455,23 @@
     RELEASE_ASSERT(!code.IsNull());
     code_array.Add(code);
     pc_descs = code.pc_descriptors();
-    const intptr_t pc_offset = FindPcOffset(pc_descs, GetYieldIndex(closure));
+    offset = Smi::New(FindPcOffset(pc_descs, GetYieldIndex(closure)));
     // Unlike other sources of PC offsets, the offset may be 0 here if we
     // reach a non-async closure receiving the yielded value.
-    ASSERT(pc_offset >= 0);
-    pc_offset_array->Add(pc_offset);
+    ASSERT(offset.Value() >= 0);
+    pc_offset_array.Add(offset);
 
     // Inject async suspension marker.
     code_array.Add(StubCode::AsynchronousGapMarker());
-    pc_offset_array->Add(0);
+    offset = Smi::New(0);
+    pc_offset_array.Add(offset);
   }
 }
 
 void StackTraceUtils::CollectFramesLazy(
     Thread* thread,
     const GrowableObjectArray& code_array,
-    GrowableArray<uword>* pc_offset_array,
+    const GrowableObjectArray& pc_offset_array,
     int skip_frames,
     std::function<void(StackFrame*)>* on_sync_frames,
     bool* has_async) {
@@ -486,6 +489,7 @@
   }
 
   auto& code = Code::Handle(zone);
+  auto& offset = Smi::Handle(zone);
   auto& closure = Closure::Handle(zone);
 
   CallerClosureFinder caller_closure_finder(zone);
@@ -509,9 +513,10 @@
       // Add the current synchronous frame.
       code = frame->LookupDartCode();
       code_array.Add(code);
-      const uword pc_offset = frame->pc() - code.PayloadStart();
+      const intptr_t pc_offset = frame->pc() - code.PayloadStart();
       ASSERT(pc_offset > 0 && pc_offset <= code.Size());
-      pc_offset_array->Add(pc_offset);
+      offset = Smi::New(pc_offset);
+      pc_offset_array.Add(offset);
       // Callback for sync frame.
       if (on_sync_frames != nullptr) {
         (*on_sync_frames)(frame);
@@ -588,7 +593,7 @@
 
 intptr_t StackTraceUtils::CollectFrames(Thread* thread,
                                         const Array& code_array,
-                                        const TypedData& pc_offset_array,
+                                        const Array& pc_offset_array,
                                         intptr_t array_offset,
                                         intptr_t count,
                                         int skip_frames) {
@@ -597,6 +602,7 @@
   StackFrame* frame = frames.NextFrame();
   ASSERT(frame != NULL);  // We expect to find a dart invocation frame.
   Code& code = Code::Handle(zone);
+  Smi& offset = Smi::Handle(zone);
   intptr_t collected_frames_count = 0;
   for (; (frame != NULL) && (collected_frames_count < count);
        frame = frames.NextFrame()) {
@@ -605,9 +611,9 @@
       continue;
     }
     code = frame->LookupDartCode();
-    const intptr_t pc_offset = frame->pc() - code.PayloadStart();
+    offset = Smi::New(frame->pc() - code.PayloadStart());
     code_array.SetAt(array_offset, code);
-    pc_offset_array.SetUintPtr(array_offset * kWordSize, pc_offset);
+    pc_offset_array.SetAt(array_offset, offset);
     array_offset++;
     collected_frames_count++;
   }
diff --git a/runtime/vm/stack_trace.h b/runtime/vm/stack_trace.h
index c2eb02a..a08221f 100644
--- a/runtime/vm/stack_trace.h
+++ b/runtime/vm/stack_trace.h
@@ -107,7 +107,7 @@
 
   static void UnwindAwaiterChain(Zone* zone,
                                  const GrowableObjectArray& code_array,
-                                 GrowableArray<uword>* pc_offset_array,
+                                 const GrowableObjectArray& pc_offset_array,
                                  CallerClosureFinder* caller_closure_finder,
                                  const Closure& leaf_closure);
 
@@ -130,7 +130,7 @@
   static void CollectFramesLazy(
       Thread* thread,
       const GrowableObjectArray& code_array,
-      GrowableArray<uword>* pc_offset_array,
+      const GrowableObjectArray& pc_offset_array,
       int skip_frames,
       std::function<void(StackFrame*)>* on_sync_frames = nullptr,
       bool* has_async = nullptr);
@@ -151,7 +151,7 @@
   /// Returns the number of frames collected.
   static intptr_t CollectFrames(Thread* thread,
                                 const Array& code_array,
-                                const TypedData& pc_offset_array,
+                                const Array& pc_offset_array,
                                 intptr_t array_offset,
                                 intptr_t count,
                                 int skip_frames);
diff --git a/runtime/vm/stub_code.cc b/runtime/vm/stub_code.cc
index a78d1b0..e41c642 100644
--- a/runtime/vm/stub_code.cc
+++ b/runtime/vm/stub_code.cc
@@ -60,30 +60,6 @@
   for (size_t i = 0; i < ARRAY_SIZE(entries_); i++) {
     entries_[i].code->set_object_pool(object_pool.ptr());
   }
-
-#if defined(DART_PRECOMPILER)
-  {
-    // Set Function owner for UnknownDartCode stub so it pretends to
-    // be a Dart code.
-    Zone* zone = Thread::Current()->zone();
-    const auto& signature = FunctionType::Handle(zone, FunctionType::New());
-    auto& owner = Object::Handle(zone);
-    owner = Object::void_class();
-    ASSERT(!owner.IsNull());
-    owner = Function::New(signature, Object::null_string(),
-                          UntaggedFunction::kRegularFunction,
-                          /*is_static=*/true,
-                          /*is_const=*/false,
-                          /*is_abstract=*/false,
-                          /*is_external=*/false,
-                          /*is_native=*/false, owner, TokenPosition::kNoSource);
-    StubCode::UnknownDartCode().set_owner(owner);
-    StubCode::UnknownDartCode().set_exception_handlers(
-        Object::empty_exception_handlers());
-    StubCode::UnknownDartCode().set_pc_descriptors(Object::empty_descriptors());
-    ASSERT(StubCode::UnknownDartCode().IsFunctionCode());
-  }
-#endif  // defined(DART_PRECOMPILER)
 }
 
 #undef STUB_CODE_GENERATE
diff --git a/runtime/vm/stub_code_list.h b/runtime/vm/stub_code_list.h
index d99a661..c08bfd6 100644
--- a/runtime/vm/stub_code_list.h
+++ b/runtime/vm/stub_code_list.h
@@ -128,8 +128,7 @@
   V(InstantiateTypeArguments)                                                  \
   V(InstantiateTypeArgumentsMayShareInstantiatorTA)                            \
   V(InstantiateTypeArgumentsMayShareFunctionTA)                                \
-  V(NoSuchMethodDispatcher)                                                    \
-  V(UnknownDartCode)
+  V(NoSuchMethodDispatcher)
 
 }  // namespace dart
 
diff --git a/runtime/vm/tagged_pointer.h b/runtime/vm/tagged_pointer.h
index c191404..63b446f 100644
--- a/runtime/vm/tagged_pointer.h
+++ b/runtime/vm/tagged_pointer.h
@@ -193,7 +193,7 @@
     ASSERT(IsHeapObject());
     ASSERT(!IsInstructions());
     ASSERT(!IsInstructionsSection());
-    return tagged_pointer_ & ~(4ULL * GB - 1);
+    return tagged_pointer_ & kHeapBaseMask;
   }
 
  protected:
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 3308788..15f07a5 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -62,6 +62,7 @@
     : ThreadState(false),
       stack_limit_(0),
       write_barrier_mask_(UntaggedObject::kGenerationalBarrierMask),
+      heap_base_(0),
       isolate_(NULL),
       dispatch_table_array_(NULL),
       saved_stack_limit_(0),
@@ -176,6 +177,8 @@
 } float_zerow_constant = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000};
 
 void Thread::InitVMConstants() {
+  heap_base_ = Object::null()->heap_base();
+
 #define ASSERT_VM_HEAP(type_name, member_name, init_expr, default_init_value)  \
   ASSERT((init_expr)->IsOldObject());
   CACHED_VM_OBJECTS_LIST(ASSERT_VM_HEAP)
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 43372a6..816ec27 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -325,10 +325,12 @@
   };
 
   uword write_barrier_mask() const { return write_barrier_mask_; }
+  uword heap_base() const { return heap_base_; }
 
   static intptr_t write_barrier_mask_offset() {
     return OFFSET_OF(Thread, write_barrier_mask_);
   }
+  static intptr_t heap_base_offset() { return OFFSET_OF(Thread, heap_base_); }
   static intptr_t stack_overflow_flags_offset() {
     return OFFSET_OF(Thread, stack_overflow_flags_);
   }
@@ -930,6 +932,7 @@
   // different architectures. See also CheckOffsets in dart.cc.
   RelaxedAtomic<uword> stack_limit_;
   uword write_barrier_mask_;
+  uword heap_base_;
   Isolate* isolate_;
   const uword* dispatch_table_array_;
   uword top_ = 0;
diff --git a/tools/VERSION b/tools/VERSION
index f0413ea..d193f51 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 51
+PRERELEASE 52
 PRERELEASE_PATCH 0
\ No newline at end of file