diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 435f11f..a446cae 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -84,7 +84,7 @@
 /// TODO(scheglov) Clean up the list of implicitly analyzed files.
 class AnalysisDriver implements AnalysisDriverGeneric {
   /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 216;
+  static const int DATA_VERSION = 217;
 
   /// The number of exception contexts allowed to write. Once this field is
   /// zero, we stop writing any new exception contexts in this process.
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index c203686..cf1c0fb 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -2343,6 +2343,14 @@
     setModifier(Modifier.SYNTHETIC, isSynthetic);
   }
 
+  bool get isTempAugmentation {
+    return hasModifier(Modifier.TEMP_AUGMENTATION);
+  }
+
+  set isTempAugmentation(bool value) {
+    setModifier(Modifier.TEMP_AUGMENTATION, value);
+  }
+
   @override
   LibraryElementImpl? get library => thisOrAncestorOfType();
 
@@ -4373,6 +4381,10 @@
   /// will be marked as being synthetic.
   static const Modifier SYNTHETIC = Modifier('SYNTHETIC', 24);
 
+  /// Indicates that the element was appended to this enclosing element to
+  /// simulate temporary the effect of applying augmentation.
+  static const Modifier TEMP_AUGMENTATION = Modifier('TEMP_AUGMENTATION', 25);
+
   static const List<Modifier> values = [
     ABSTRACT,
     ASYNCHRONOUS,
@@ -4396,7 +4408,8 @@
     SETTER,
     STATIC,
     SIMPLY_BOUNDED,
-    SYNTHETIC
+    SYNTHETIC,
+    TEMP_AUGMENTATION,
   ];
 
   /// The name of this modifier.
diff --git a/pkg/analyzer/lib/src/summary2/element_flags.dart b/pkg/analyzer/lib/src/summary2/element_flags.dart
index b489c33..9481899 100644
--- a/pkg/analyzer/lib/src/summary2/element_flags.dart
+++ b/pkg/analyzer/lib/src/summary2/element_flags.dart
@@ -35,6 +35,7 @@
   static const int _isExternal = 1 << 1;
   static const int _isFactory = 1 << 2;
   static const int _isSynthetic = 1 << 3;
+  static const int _isTempAugmentation = 1 << 4;
 
   static void read(SummaryDataReader reader, ConstructorElementImpl element) {
     var byte = reader.readByte();
@@ -42,6 +43,7 @@
     element.isExternal = (byte & _isExternal) != 0;
     element.isFactory = (byte & _isFactory) != 0;
     element.isSynthetic = (byte & _isSynthetic) != 0;
+    element.isTempAugmentation = (byte & _isTempAugmentation) != 0;
   }
 
   static void write(BufferedSink sink, ConstructorElementImpl element) {
@@ -50,6 +52,7 @@
     result |= element.isExternal ? _isExternal : 0;
     result |= element.isFactory ? _isFactory : 0;
     result |= element.isSynthetic ? _isSynthetic : 0;
+    result |= element.isTempAugmentation ? _isTempAugmentation : 0;
     sink.writeByte(result);
   }
 }
@@ -82,6 +85,7 @@
   static const int _isLate = 1 << 9;
   static const int _isStatic = 1 << 10;
   static const int _isSynthetic = 1 << 11;
+  static const int _isTempAugmentation = 1 << 12;
 
   static void read(SummaryDataReader reader, FieldElementImpl element) {
     var byte = reader.readUInt30();
@@ -97,6 +101,7 @@
     element.isLate = (byte & _isLate) != 0;
     element.isStatic = (byte & _isStatic) != 0;
     element.isSynthetic = (byte & _isSynthetic) != 0;
+    element.isTempAugmentation = (byte & _isTempAugmentation) != 0;
   }
 
   static void write(BufferedSink sink, FieldElementImpl element) {
@@ -113,6 +118,7 @@
     result |= element.isLate ? _isLate : 0;
     result |= element.isStatic ? _isStatic : 0;
     result |= element.isSynthetic ? _isSynthetic : 0;
+    result |= element.isTempAugmentation ? _isTempAugmentation : 0;
     sink.writeUInt30(result);
   }
 }
@@ -265,6 +271,7 @@
   static const int _isExternal = 1 << 6;
   static const int _isGenerator = 1 << 7;
   static const int _isStatic = 1 << 8;
+  static const int _isTempAugmentation = 1 << 9;
 
   static void read(
     SummaryDataReader reader,
@@ -280,6 +287,7 @@
     element.isExternal = (byte & _isExternal) != 0;
     element.isGenerator = (byte & _isGenerator) != 0;
     element.isStatic = (byte & _isStatic) != 0;
+    element.isTempAugmentation = (byte & _isTempAugmentation) != 0;
   }
 
   static void write(BufferedSink sink, PropertyAccessorElementImpl element) {
@@ -293,6 +301,7 @@
     result |= element.isExternal ? _isExternal : 0;
     result |= element.isGenerator ? _isGenerator : 0;
     result |= element.isStatic ? _isStatic : 0;
+    result |= element.isTempAugmentation ? _isTempAugmentation : 0;
     sink.writeUInt30(result);
   }
 }
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index 8864dac..7fcbfcc 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -6,6 +6,7 @@
 import 'package:analyzer/dart/analysis/utilities.dart';
 import 'package:analyzer/dart/ast/ast.dart' as ast;
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/visitor.dart';
 import 'package:analyzer/src/dart/ast/ast.dart' as ast;
 import 'package:analyzer/src/dart/ast/mixin_super_invoked_names.dart';
 import 'package:analyzer/src/dart/element/element.dart';
@@ -53,6 +54,19 @@
 
   final List<Export> exporters = [];
 
+  late final LibraryMacroApplier? _macroApplier = () {
+    if (!element.featureSet.isEnabled(Feature.macros)) {
+      return null;
+    }
+
+    final macroExecutor = linker.macroExecutor;
+    if (macroExecutor == null) {
+      return null;
+    }
+
+    return LibraryMacroApplier(macroExecutor, this);
+  }();
+
   LibraryBuilder._({
     required this.linker,
     required this.uri,
@@ -177,19 +191,85 @@
     }
   }
 
+  Future<void> executeMacroDeclarationsPhase() async {
+    final macroApplier = _macroApplier;
+    if (macroApplier == null) {
+      return;
+    }
+
+    final augmentationLibrary = await macroApplier.executeDeclarationsPhase();
+    if (augmentationLibrary == null) {
+      return;
+    }
+
+    final parseResult = parseString(
+      content: augmentationLibrary,
+      featureSet: element.featureSet,
+      throwIfDiagnostics: false,
+    );
+    final unitNode = parseResult.unit as ast.CompilationUnitImpl;
+
+    // We don't actually keep this unit, but we need it for now as a container.
+    // Eventually we will use actual augmentation libraries.
+    final unitUri = uri.resolve('_macro_declarations.dart');
+    final unitReference = reference.getChild('@unit').getChild('$unitUri');
+    final unitElement = CompilationUnitElementImpl(
+      source: _sourceFactory.forUri2(unitUri)!,
+      librarySource: element.source,
+      lineInfo: parseResult.lineInfo,
+    )
+      ..enclosingElement = element
+      ..isSynthetic = true
+      ..uri = unitUri.toString();
+
+    final elementBuilder = ElementBuilder(
+      libraryBuilder: this,
+      unitReference: unitReference,
+      unitElement: unitElement,
+    );
+    elementBuilder.buildDeclarationElements(unitNode);
+
+    // We move elements, so they don't have real offsets.
+    unitElement.accept(_FlushElementOffsets());
+
+    final nodesToBuildType = NodesToBuildType();
+    final resolver = ReferenceResolver(linker, nodesToBuildType, element);
+    unitNode.accept(resolver);
+    TypesBuilder(linker).build(nodesToBuildType);
+
+    // Transplant built elements as if the augmentation was applied.
+    for (final augmentation in unitElement.classes) {
+      // TODO(scheglov) if augmentation
+      final augmented = element.getType(augmentation.name);
+      if (augmented is ClassElementImpl) {
+        augmented.accessors = [
+          ...augmented.accessors,
+          ...augmentation.accessors,
+        ];
+        augmented.constructors = [
+          ...augmented.constructors,
+          ...augmentation.constructors.where((e) => !e.isSynthetic),
+        ];
+        augmented.fields = [
+          ...augmented.fields,
+          ...augmentation.fields,
+        ];
+        augmented.methods = [
+          ...augmented.methods,
+          ...augmentation.methods,
+        ];
+      }
+    }
+  }
+
   Future<void> executeMacroTypesPhase() async {
-    if (!element.featureSet.isEnabled(Feature.macros)) {
+    final macroApplier = _macroApplier;
+    if (macroApplier == null) {
       return;
     }
 
-    final macroExecutor = linker.macroExecutor;
-    if (macroExecutor == null) {
-      return;
-    }
-
-    var applier = LibraryMacroApplier(macroExecutor, this);
-    await applier.buildApplications();
-    var augmentationLibrary = await applier.executeTypesPhase();
+    await macroApplier.buildApplications();
+    var augmentationLibrary = await macroApplier.executeTypesPhase();
     if (augmentationLibrary == null) {
       return;
     }
@@ -395,3 +475,16 @@
     required this.element,
   });
 }
+
+class _FlushElementOffsets extends GeneralizingElementVisitor<void> {
+  @override
+  void visitElement(covariant ElementImpl element) {
+    element.isTempAugmentation = true;
+    element.nameOffset = -1;
+    if (element is ConstructorElementImpl) {
+      element.periodOffset = null;
+      element.nameEnd = null;
+    }
+    super.visitElement(element);
+  }
+}
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index b68a8cf..7c4a048 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -98,6 +98,7 @@
     _createTypeSystem();
     _resolveTypes();
     _buildEnumChildren();
+    await _executeMacroDeclarationsPhase();
     SuperConstructorResolver(this).perform();
     _performTopLevelInference();
     _resolveConstructors();
@@ -195,6 +196,12 @@
     }
   }
 
+  Future<void> _executeMacroDeclarationsPhase() async {
+    for (final library in builders.values) {
+      await library.executeMacroDeclarationsPhase();
+    }
+  }
+
   void _performTopLevelInference() {
     TopLevelInference(this).infer();
   }
diff --git a/pkg/analyzer/lib/src/summary2/macro.dart b/pkg/analyzer/lib/src/summary2/macro.dart
index c9931b4..a87f832 100644
--- a/pkg/analyzer/lib/src/summary2/macro.dart
+++ b/pkg/analyzer/lib/src/summary2/macro.dart
@@ -94,6 +94,15 @@
     this._declaration,
   );
 
+  Future<macro.MacroExecutionResult> executeDeclarationsPhase({
+    required macro.TypeResolver typeResolver,
+    required macro.ClassIntrospector classIntrospector,
+  }) async {
+    macro.MacroExecutor executor = _bundleExecutor.macroExecutor;
+    return await executor.executeDeclarationsPhase(_instanceIdentifier,
+        _declaration, _identifierResolver, typeResolver, classIntrospector);
+  }
+
   Future<macro.MacroExecutionResult> executeTypesPhase() async {
     macro.MacroExecutor executor = _bundleExecutor.macroExecutor;
     return await executor.executeTypesPhase(
diff --git a/pkg/analyzer/lib/src/summary2/macro_application.dart b/pkg/analyzer/lib/src/summary2/macro_application.dart
index 15da245..d18910f 100644
--- a/pkg/analyzer/lib/src/summary2/macro_application.dart
+++ b/pkg/analyzer/lib/src/summary2/macro_application.dart
@@ -27,6 +27,10 @@
 
   final Map<ClassDeclaration, macro.ClassDeclaration> _classDeclarations = {};
 
+  final macro.TypeResolver _typeResolver = _TypeResolver();
+
+  final macro.ClassIntrospector _classIntrospector = _ClassIntrospector();
+
   LibraryMacroApplier(this.macroExecutor, this.libraryBuilder);
 
   Linker get _linker => libraryBuilder.linker;
@@ -49,8 +53,51 @@
     }
   }
 
+  Future<String?> executeDeclarationsPhase() async {
+    final results = <macro.MacroExecutionResult>[];
+    for (final unitElement in libraryBuilder.element.units) {
+      for (final classElement in unitElement.classes) {
+        classElement as ClassElementImpl;
+        final applications = _applications[classElement];
+        if (applications != null) {
+          for (final application in applications) {
+            if (application.shouldExecute(macro.Phase.declarations)) {
+              await _runWithCatchingExceptions(
+                () async {
+                  final result =
+                      await application.instance.executeDeclarationsPhase(
+                    typeResolver: _typeResolver,
+                    classIntrospector: _classIntrospector,
+                  );
+                  if (result.isNotEmpty) {
+                    results.add(result);
+                  }
+                },
+                annotationIndex: application.annotationIndex,
+                onError: (error) {
+                  classElement.macroApplicationErrors.add(error);
+                },
+              );
+            }
+          }
+        }
+      }
+    }
+
+    if (results.isNotEmpty) {
+      final code = macroExecutor.buildAugmentationLibrary(
+        results,
+        _resolveIdentifier,
+        _inferOmittedType,
+      );
+      return code.trim();
+    }
+    return null;
+  }
+
   Future<String?> executeTypesPhase() async {
     final results = <macro.MacroExecutionResult>[];
+    // TODO(scheglov) Share the elements iteration logic.
     for (final unitElement in libraryBuilder.element.units) {
       for (final classElement in unitElement.classes) {
         classElement as ClassElementImpl;
@@ -121,7 +168,7 @@
                 className: macroElement.name,
                 constructorName: '', // TODO
                 arguments: arguments,
-                identifierResolver: _FakeIdentifierResolver(),
+                identifierResolver: _IdentifierResolver(),
                 declarationKind: macro.DeclarationKind.clazz,
                 declaration: declaration,
               );
@@ -448,10 +495,45 @@
   }
 }
 
-class _FakeIdentifierResolver extends macro.IdentifierResolver {
+class _ClassIntrospector implements macro.ClassIntrospector {
   @override
-  Future<macro.Identifier> resolveIdentifier(Uri library, String name) {
-    // TODO: implement resolveIdentifier
+  Future<List<macro.ConstructorDeclaration>> constructorsOf(
+      covariant macro.ClassDeclaration clazz) {
+    // TODO: implement constructorsOf
+    throw UnimplementedError();
+  }
+
+  @override
+  Future<List<macro.FieldDeclaration>> fieldsOf(macro.ClassDeclaration clazz) {
+    // TODO: implement fieldsOf
+    throw UnimplementedError();
+  }
+
+  @override
+  Future<List<macro.ClassDeclaration>> interfacesOf(
+      covariant macro.ClassDeclaration clazz) {
+    // TODO: implement interfacesOf
+    throw UnimplementedError();
+  }
+
+  @override
+  Future<List<macro.MethodDeclaration>> methodsOf(
+      covariant macro.ClassDeclaration clazz) {
+    // TODO: implement methodsOf
+    throw UnimplementedError();
+  }
+
+  @override
+  Future<List<macro.ClassDeclaration>> mixinsOf(
+      covariant macro.ClassDeclaration clazz) {
+    // TODO: implement mixinsOf
+    throw UnimplementedError();
+  }
+
+  @override
+  Future<macro.ClassDeclaration?> superclassOf(
+      covariant macro.ClassDeclaration clazz) {
+    // TODO: implement superclassOf
     throw UnimplementedError();
   }
 }
@@ -461,6 +543,22 @@
       : super(id: id, name: name);
 }
 
+class _IdentifierResolver extends macro.IdentifierResolver {
+  @override
+  Future<macro.Identifier> resolveIdentifier(Uri library, String name) {
+    // TODO: implement resolveIdentifier
+    throw UnimplementedError();
+  }
+}
+
+class _TypeResolver implements macro.TypeResolver {
+  @override
+  Future<macro.StaticType> resolve(macro.TypeAnnotationCode type) {
+    // TODO: implement resolve
+    throw UnimplementedError();
+  }
+}
+
 extension on macro.MacroExecutionResult {
   bool get isNotEmpty =>
       libraryAugmentations.isNotEmpty || classAugmentations.isNotEmpty;
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index cfe45a8..e162fb4 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -415,7 +415,9 @@
       expect(e.nameOffset, -1);
       expect(e.nonSynthetic, same(e.enclosingElement));
     } else {
-      expect(e.nameOffset, isPositive);
+      if (!e.isTempAugmentation) {
+        expect(e.nameOffset, isPositive);
+      }
     }
   }
 
@@ -689,6 +691,8 @@
   }
 
   void _writePropertyAccessorElement(PropertyAccessorElement e) {
+    e as PropertyAccessorElementImpl;
+
     PropertyInducingElement variable = e.variable;
     expect(variable, isNotNull);
 
@@ -714,7 +718,9 @@
     if (e.isSynthetic) {
       expect(e.nameOffset, -1);
     } else {
-      expect(e.nameOffset, isPositive);
+      if (!e.isTempAugmentation) {
+        expect(e.nameOffset, isPositive);
+      }
       _assertNonSyntheticElementSelf(e);
     }
 
@@ -747,6 +753,8 @@
   }
 
   void _writePropertyInducingElement(PropertyInducingElement e) {
+    e as PropertyInducingElementImpl;
+
     DartType type = e.type;
     expect(type, isNotNull);
 
@@ -760,7 +768,9 @@
         _assertSyntheticAccessorEnclosing(e, e.setter!);
       }
 
-      expect(e.nameOffset, isPositive);
+      if (!e.isTempAugmentation) {
+        expect(e.nameOffset, isPositive);
+      }
       _assertNonSyntheticElementSelf(e);
     }
 
diff --git a/pkg/analyzer/test/src/summary/macro_test.dart b/pkg/analyzer/test/src/summary/macro_test.dart
index e073d88..1fdc7e6 100644
--- a/pkg/analyzer/test/src/summary/macro_test.dart
+++ b/pkg/analyzer/test/src/summary/macro_test.dart
@@ -384,6 +384,279 @@
     );
   }
 
+  /// TODO(scheglov) Not quite correct - we should not add a synthetic one.
+  /// Fix it when adding actual augmentation libraries.
+  test_declarationsPhase_class_constructor() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+
+macro class MyMacro implements ClassDeclarationsMacro {
+  const MyMacro();
+
+  buildDeclarationsForClass(clazz, builder) async {
+    builder.declareInClass(
+      DeclarationCode.fromString('A.named(int a);'),
+    );
+  }
+}
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+
+@MyMacro()
+class A {}
+''', preBuildSequence: [
+      {'package:test/a.dart'}
+    ]);
+
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class A @35
+        metadata
+          Annotation
+            atSign: @ @18
+            name: SimpleIdentifier
+              token: MyMacro @19
+              staticElement: package:test/a.dart::@class::MyMacro
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @26
+              rightParenthesis: ) @27
+            element: package:test/a.dart::@class::MyMacro::@constructor::•
+        constructors
+          synthetic @-1
+          named @-1
+            parameters
+              requiredPositional a @-1
+                type: int
+''');
+  }
+
+  test_declarationsPhase_class_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+
+macro class MyMacro implements ClassDeclarationsMacro {
+  const MyMacro();
+
+  buildDeclarationsForClass(clazz, builder) async {
+    builder.declareInClass(
+      DeclarationCode.fromString('int foo = 0;'),
+    );
+  }
+}
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+
+@MyMacro()
+class A {}
+''', preBuildSequence: [
+      {'package:test/a.dart'}
+    ]);
+
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class A @35
+        metadata
+          Annotation
+            atSign: @ @18
+            name: SimpleIdentifier
+              token: MyMacro @19
+              staticElement: package:test/a.dart::@class::MyMacro
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @26
+              rightParenthesis: ) @27
+            element: package:test/a.dart::@class::MyMacro::@constructor::•
+        fields
+          foo @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get foo @-1
+            returnType: int
+          synthetic set foo @-1
+            parameters
+              requiredPositional _foo @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_declarationsPhase_class_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+
+macro class MyMacro implements ClassDeclarationsMacro {
+  const MyMacro();
+
+  buildDeclarationsForClass(clazz, builder) async {
+    builder.declareInClass(
+      DeclarationCode.fromString('int get foo => 0;'),
+    );
+  }
+}
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+
+@MyMacro()
+class A {}
+''', preBuildSequence: [
+      {'package:test/a.dart'}
+    ]);
+
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class A @35
+        metadata
+          Annotation
+            atSign: @ @18
+            name: SimpleIdentifier
+              token: MyMacro @19
+              staticElement: package:test/a.dart::@class::MyMacro
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @26
+              rightParenthesis: ) @27
+            element: package:test/a.dart::@class::MyMacro::@constructor::•
+        fields
+          synthetic foo @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          get foo @-1
+            returnType: int
+''');
+  }
+
+  test_declarationsPhase_class_method() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+
+macro class MyMacro implements ClassDeclarationsMacro {
+  const MyMacro();
+
+  buildDeclarationsForClass(clazz, builder) async {
+    builder.declareInClass(
+      DeclarationCode.fromString('int foo(double a) => 0;'),
+    );
+  }
+}
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+
+@MyMacro()
+class A {}
+''', preBuildSequence: [
+      {'package:test/a.dart'}
+    ]);
+
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class A @35
+        metadata
+          Annotation
+            atSign: @ @18
+            name: SimpleIdentifier
+              token: MyMacro @19
+              staticElement: package:test/a.dart::@class::MyMacro
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @26
+              rightParenthesis: ) @27
+            element: package:test/a.dart::@class::MyMacro::@constructor::•
+        constructors
+          synthetic @-1
+        methods
+          foo @-1
+            parameters
+              requiredPositional a @-1
+                type: double
+            returnType: int
+''');
+  }
+
+  test_declarationsPhase_class_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+
+macro class MyMacro implements ClassDeclarationsMacro {
+  const MyMacro();
+
+  buildDeclarationsForClass(clazz, builder) async {
+    builder.declareInClass(
+      DeclarationCode.fromString('set foo(int a) {}'),
+    );
+  }
+}
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+
+@MyMacro()
+class A {}
+''', preBuildSequence: [
+      {'package:test/a.dart'}
+    ]);
+
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class A @35
+        metadata
+          Annotation
+            atSign: @ @18
+            name: SimpleIdentifier
+              token: MyMacro @19
+              staticElement: package:test/a.dart::@class::MyMacro
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @26
+              rightParenthesis: ) @27
+            element: package:test/a.dart::@class::MyMacro::@constructor::•
+        fields
+          synthetic foo @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          set foo @-1
+            parameters
+              requiredPositional a @-1
+                type: int
+            returnType: void
+''');
+  }
+
   test_introspect_types_ClassDeclaration_interfaces() async {
     await _assertTypesPhaseIntrospectionText(r'''
 class A implements B, C<int, String> {}
@@ -535,7 +808,38 @@
 ''');
   }
 
-  test_macroApplicationErrors_compileTimeError() async {
+  test_macroApplicationErrors_declarationsPhase_throwsException() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+
+macro class MyMacro implements ClassDeclarationsMacro {
+  const MyMacro();
+
+  buildDeclarationsForClass(clazz, builder) async {
+    throw 'foo bar';
+  }
+}
+''');
+
+    final library = await buildLibrary(r'''
+import 'a.dart';
+
+@MyMacro()
+class A {}
+''', preBuildSequence: [
+      {'package:test/a.dart'}
+    ]);
+
+    final A = library.getType('A') as ClassElementImpl;
+    final error = A.macroApplicationErrors.single;
+    error as UnknownMacroApplicationError;
+
+    expect(error.annotationIndex, 0);
+    expect(error.message, 'foo bar');
+    expect(error.stackTrace, contains('MyMacro.buildDeclarationsForClass'));
+  }
+
+  test_macroApplicationErrors_typedPhase_compileTimeError() async {
     newFile('$testPackageLibPath/a.dart', r'''
 import 'package:_fe_analyzer_shared/src/macros/api.dart';
 
@@ -564,7 +868,7 @@
     expect(error.stackTrace, contains('executeTypesMacro'));
   }
 
-  test_macroApplicationErrors_throwsException() async {
+  test_macroApplicationErrors_typesPhase_throwsException() async {
     newFile('$testPackageLibPath/a.dart', r'''
 import 'package:_fe_analyzer_shared/src/macros/api.dart';
 
diff --git a/pkg/compiler/lib/src/elements/entities.dart b/pkg/compiler/lib/src/elements/entities.dart
index 5a4ac84..e55bd41 100644
--- a/pkg/compiler/lib/src/elements/entities.dart
+++ b/pkg/compiler/lib/src/elements/entities.dart
@@ -8,9 +8,11 @@
 
 // TODO(48820): Spannable was imported from `../common.dart`.
 import '../diagnostics/spannable.dart' show Spannable;
+import '../serialization/serialization_interfaces.dart';
 import '../universe/call_structure.dart' show CallStructure;
 import '../util/util.dart';
 import 'names.dart';
+import 'types.dart' show FunctionType;
 
 /// Abstract interface for entities.
 ///
@@ -352,6 +354,46 @@
     );
   }
 
+  static ParameterStructure fromType(FunctionType type) {
+    return ParameterStructure(
+        type.parameterTypes.length,
+        type.parameterTypes.length + type.optionalParameterTypes.length,
+        type.namedParameters,
+        type.requiredNamedParameters,
+        type.typeVariables.length);
+  }
+
+  /// Deserializes a [ParameterStructure] object from [source].
+  static readFromDataSource(DataSourceReader source) {
+    final tag = ParameterStructure.tag;
+    source.begin(tag);
+    int requiredPositionalParameters = source.readInt();
+    int positionalParameters = source.readInt();
+    List<String> namedParameters = source.readStrings()!;
+    Set<String> requiredNamedParameters =
+        source.readStrings(emptyAsNull: true)?.toSet() ?? const <String>{};
+    int typeParameters = source.readInt();
+    source.end(tag);
+    return ParameterStructure(
+        requiredPositionalParameters,
+        positionalParameters,
+        namedParameters,
+        requiredNamedParameters,
+        typeParameters);
+  }
+
+  /// Serializes this [ParameterStructure] to [sink].
+  void writeToDataSink(DataSinkWriter sink) {
+    final tag = ParameterStructure.tag;
+    sink.begin(tag);
+    sink.writeInt(requiredPositionalParameters);
+    sink.writeInt(positionalParameters);
+    sink.writeStrings(namedParameters);
+    sink.writeStrings(requiredNamedParameters);
+    sink.writeInt(typeParameters);
+    sink.end(tag);
+  }
+
   /// The number of optional parameters (positional or named).
   int get optionalParameters =>
       (positionalParameters - requiredPositionalParameters) +
diff --git a/pkg/compiler/lib/src/elements/entities_parameter_structure_methods.dart b/pkg/compiler/lib/src/elements/entities_parameter_structure_methods.dart
deleted file mode 100644
index bf75cbe..0000000
--- a/pkg/compiler/lib/src/elements/entities_parameter_structure_methods.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// 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.10
-
-/// Methods for [ParameterStructure] that have not yet been migrated to null
-/// safety.
-// TODO(48820): Move these methods back to [ParameterStructure].
-library entities.parameter_structure_methods;
-
-import '../serialization/serialization.dart';
-import 'entities.dart';
-import 'types.dart' show FunctionType;
-
-extension UnmigratedParameterStructureInstanceMethods on ParameterStructure {
-  /// Serializes this [ParameterStructure] to [sink].
-  void writeToDataSink(DataSinkWriter sink) {
-    final tag = ParameterStructure.tag;
-    sink.begin(tag);
-    sink.writeInt(requiredPositionalParameters);
-    sink.writeInt(positionalParameters);
-    sink.writeStrings(namedParameters);
-    sink.writeStrings(requiredNamedParameters);
-    sink.writeInt(typeParameters);
-    sink.end(tag);
-  }
-}
-
-class ParameterStructureMethods {
-  static ParameterStructure fromType(FunctionType type) {
-    return ParameterStructure(
-        type.parameterTypes.length,
-        type.parameterTypes.length + type.optionalParameterTypes.length,
-        type.namedParameters,
-        type.requiredNamedParameters,
-        type.typeVariables.length);
-  }
-
-  /// Deserializes a [ParameterStructure] object from [source].
-  static readFromDataSource(DataSourceReader source) {
-    final tag = ParameterStructure.tag;
-    source.begin(tag);
-    int requiredPositionalParameters = source.readInt();
-    int positionalParameters = source.readInt();
-    List<String> namedParameters = source.readStrings() /*!*/;
-    Set<String> requiredNamedParameters =
-        source.readStrings(emptyAsNull: true)?.toSet() ?? const <String>{};
-    int typeParameters = source.readInt();
-    source.end(tag);
-    return ParameterStructure(
-        requiredPositionalParameters,
-        positionalParameters,
-        namedParameters,
-        requiredNamedParameters,
-        typeParameters);
-  }
-}
diff --git a/pkg/compiler/lib/src/ir/closure.dart b/pkg/compiler/lib/src/ir/closure.dart
index 20c6948..d409cb6 100644
--- a/pkg/compiler/lib/src/ir/closure.dart
+++ b/pkg/compiler/lib/src/ir/closure.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.10
-
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/src/printer.dart' as ir;
 import 'package:kernel/text/ast_to_text.dart' as ir show debugNodeToString;
@@ -11,7 +9,7 @@
 /// Collection of scope data collected for a single member.
 class ClosureScopeModel {
   /// Collection [ScopeInfo] data for the member.
-  KernelScopeInfo scopeInfo;
+  KernelScopeInfo? scopeInfo;
 
   /// Collected [CapturedScope] data for nodes.
   Map<ir.Node, KernelCapturedScope> capturedScopesMap =
@@ -33,7 +31,7 @@
   final Set<ir.VariableDeclaration> boxedVariables;
   // If boxedVariables is empty, this will be null, because no variables will
   // need to be boxed.
-  final NodeBox capturedVariablesAccessor;
+  final NodeBox? capturedVariablesAccessor;
 
   /// The set of variables that were defined in another scope, but are used in
   /// this scope. The items in this set are either of type VariableDeclaration
@@ -101,7 +99,7 @@
 class KernelCapturedScope extends KernelScopeInfo {
   KernelCapturedScope(
       Set<ir.VariableDeclaration> boxedVariables,
-      NodeBox capturedVariablesAccessor,
+      NodeBox? capturedVariablesAccessor,
       Set<ir.VariableDeclaration> localsUsedInTryOrSync,
       Set<ir.Node /* VariableDeclaration | TypeVariableTypeWithContext */ >
           freeVariables,
@@ -126,8 +124,8 @@
             _empty,
             null,
             _empty,
-            scope.freeVariables.where(
-                (ir.Node variable) => variable is TypeVariableTypeWithContext),
+            Set.of(scope.freeVariables.where(
+                (ir.Node variable) => variable is TypeVariableTypeWithContext)),
             scope.freeVariablesForRti,
             scope.thisUsedAsFreeVariable,
             scope.thisUsedAsFreeVariableIfNeedsRti,
@@ -144,7 +142,7 @@
 
   KernelCapturedLoopScope(
       Set<ir.VariableDeclaration> boxedVariables,
-      NodeBox capturedVariablesAccessor,
+      NodeBox? capturedVariablesAccessor,
       this.boxedLoopVariables,
       Set<ir.VariableDeclaration> localsUsedInTryOrSync,
       Set<ir.Node /* VariableDeclaration | TypeVariableTypeWithContext */ >
@@ -230,10 +228,10 @@
 
 class VariableUse {
   final VariableUseKind kind;
-  final ir.Member member;
-  final ir.LocalFunction localFunction;
-  final ir.Expression invocation;
-  final ir.Instantiation instantiation;
+  final ir.Member? member;
+  final ir.LocalFunction? localFunction;
+  final ir.Expression? invocation;
+  final ir.Instantiation? instantiation;
 
   const VariableUse._simple(this.kind)
       : this.member = null,
@@ -345,48 +343,51 @@
 /// A fake ir.Node that holds the TypeParameterType as well as the context in
 /// which it occurs.
 class TypeVariableTypeWithContext implements ir.Node {
-  final ir.TreeNode context;
+  final ir.TreeNode? context;
   final ir.TypeParameterType type;
   final TypeVariableKind kind;
-  final ir.TreeNode typeDeclaration;
+  final ir.TreeNode? typeDeclaration;
 
   /// [context] can be either an ir.Member or a ir.FunctionDeclaration or
   /// ir.FunctionExpression.
   factory TypeVariableTypeWithContext(
-      ir.TypeParameterType type, ir.TreeNode context) {
+      ir.TypeParameterType type, ir.TreeNode? context) {
     TypeVariableKind kind;
-    ir.TreeNode typeDeclaration = type.parameter.parent;
+    ir.TreeNode? typeDeclaration = type.parameter.parent;
     if (typeDeclaration == null) {
       // We have a function type variable, like `T` in `void Function<T>(int)`.
       kind = TypeVariableKind.function;
     } else if (typeDeclaration is ir.Class) {
       // We have a class type variable, like `T` in `class Class<T> { ... }`.
       kind = TypeVariableKind.cls;
-    } else if (typeDeclaration.parent is ir.Member) {
-      ir.Member member = typeDeclaration.parent;
-      if (member is ir.Constructor ||
-          (member is ir.Procedure && member.isFactory)) {
-        // We have a synthesized generic method type variable for a class type
-        // variable.
-        // TODO(johnniwinther): Handle constructor/factory type variables as
-        // method type variables.
-        kind = TypeVariableKind.cls;
-        typeDeclaration = member.enclosingClass;
+    } else {
+      final parent = typeDeclaration.parent;
+      if (parent is ir.Member) {
+        ir.Member member = parent;
+        if (member is ir.Constructor ||
+            (member is ir.Procedure && member.isFactory)) {
+          // We have a synthesized generic method type variable for a class type
+          // variable.
+          // TODO(johnniwinther): Handle constructor/factory type variables as
+          // method type variables.
+          kind = TypeVariableKind.cls;
+          typeDeclaration = member.enclosingClass;
+        } else {
+          // We have a generic method type variable, like `T` in
+          // `m<T>() { ... }`.
+          kind = TypeVariableKind.method;
+          typeDeclaration = parent;
+          context = typeDeclaration;
+        }
       } else {
-        // We have a generic method type variable, like `T` in
-        // `m<T>() { ... }`.
-        kind = TypeVariableKind.method;
-        typeDeclaration = typeDeclaration.parent;
+        // We have a generic local function type variable, like `T` in
+        // `m() { local<T>() { ... } ... }`.
+        assert(parent is ir.LocalFunction,
+            "Unexpected type declaration: $typeDeclaration");
+        kind = TypeVariableKind.local;
+        typeDeclaration = parent;
         context = typeDeclaration;
       }
-    } else {
-      // We have a generic local function type variable, like `T` in
-      // `m() { local<T>() { ... } ... }`.
-      assert(typeDeclaration.parent is ir.LocalFunction,
-          "Unexpected type declaration: $typeDeclaration");
-      kind = TypeVariableKind.local;
-      typeDeclaration = typeDeclaration.parent;
-      context = typeDeclaration;
     }
     return TypeVariableTypeWithContext.internal(
         type, context, kind, typeDeclaration);
@@ -424,8 +425,8 @@
 
   @override
   String toStringInternal() =>
-      'type=${type.toStringInternal()},context=${context.toStringInternal()},'
-      'kind=$kind,typeDeclaration=${typeDeclaration.toStringInternal()}';
+      'type=${type.toStringInternal()},context=${context!.toStringInternal()},'
+      'kind=$kind,typeDeclaration=${typeDeclaration!.toStringInternal()}';
 
   @override
   String toText(ir.AstTextStrategy strategy) => type.toText(strategy);
diff --git a/pkg/compiler/lib/src/ir/constants.dart b/pkg/compiler/lib/src/ir/constants.dart
index e799ea2..32c12a0 100644
--- a/pkg/compiler/lib/src/ir/constants.dart
+++ b/pkg/compiler/lib/src/ir/constants.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.10
-
 import 'package:front_end/src/api_prototype/constant_evaluator.dart' as ir;
 import 'package:front_end/src/api_unstable/dart2js.dart' as ir;
 import 'package:kernel/ast.dart' as ir;
@@ -14,20 +12,18 @@
 import '../kernel/dart2js_target.dart';
 
 typedef ReportErrorFunction = void Function(
-    ir.LocatedMessage message, List<ir.LocatedMessage> context);
+    ir.LocatedMessage message, List<ir.LocatedMessage>? context);
 
 class Dart2jsConstantEvaluator extends ir.ConstantEvaluator {
   final bool _supportReevaluationForTesting;
 
-  bool requiresConstant;
-
   Dart2jsConstantEvaluator(ir.Component component,
       ir.TypeEnvironment typeEnvironment, ReportErrorFunction reportError,
-      {Environment environment,
+      {Environment? environment,
       bool supportReevaluationForTesting = false,
-      ir.EvaluationMode evaluationMode})
+      required ir.EvaluationMode evaluationMode})
       : _supportReevaluationForTesting = supportReevaluationForTesting,
-        assert(evaluationMode != null),
+        assert((evaluationMode as dynamic) != null),
         super(
             const Dart2jsDartLibrarySupport(),
             const Dart2jsConstantsBackend(supportsUnevaluatedConstants: false),
@@ -39,7 +35,20 @@
             evaluationMode: evaluationMode);
 
   @override
-  ErrorReporter get errorReporter => super.errorReporter;
+  ErrorReporter get errorReporter => super.errorReporter as ErrorReporter;
+  // TODO(48820): ^Store another reference to the error reporter with the
+  // refined type and use that.
+
+  // We can't override [ir.ConstantEvaluator.evaluate] and have a nullable
+  // return type.
+  // TODO(48820): Consider using composition. We will need to ensure that
+  // [Dart2jsConstantEvaluator] is not referenced via [ir.ConstantEvaluator].
+  @override
+  ir.Constant evaluate(
+      ir.StaticTypeContext staticTypeContext, ir.Expression node,
+      {ir.TreeNode? contextNode}) {
+    return evaluateOrNull(staticTypeContext, node, contextNode: contextNode)!;
+  }
 
   /// Evaluates [node] to a constant in the given [staticTypeContext].
   ///
@@ -50,10 +59,9 @@
   /// expression but evaluates to a constant, [node] is replaced with an
   /// [ir.ConstantExpression] holding the constant. Otherwise the [node] is not
   /// replaced even when it evaluated to a constant.
-  @override
-  ir.Constant evaluate(
+  ir.Constant? evaluateOrNull(
       ir.StaticTypeContext staticTypeContext, ir.Expression node,
-      {ir.TreeNode contextNode,
+      {ir.TreeNode? contextNode,
       bool requireConstant = true,
       bool replaceImplicitConstant = true}) {
     errorReporter.requiresConstant = requireConstant;
@@ -84,7 +92,7 @@
             constant.expression is ir.InvalidExpression) {
           return null;
         }
-        if (constant != null && replaceImplicitConstant) {
+        if (replaceImplicitConstant) {
           // Note: Using [replaceWith] is slow and should be avoided.
           node.replaceWith(ir.ConstantExpression(
               constant, node.getStaticType(staticTypeContext))
@@ -100,12 +108,12 @@
 
 class ErrorReporter implements ir.ErrorReporter {
   final ReportErrorFunction _reportError;
-  bool requiresConstant;
+  late bool requiresConstant;
 
   ErrorReporter(this._reportError);
 
   @override
-  void report(ir.LocatedMessage message, [List<ir.LocatedMessage> context]) {
+  void report(ir.LocatedMessage message, [List<ir.LocatedMessage>? context]) {
     if (requiresConstant) {
       _reportError(message, context);
     }
diff --git a/pkg/compiler/lib/src/ir/scope.dart b/pkg/compiler/lib/src/ir/scope.dart
index cfd2ec9..6f2deb9 100644
--- a/pkg/compiler/lib/src/ir/scope.dart
+++ b/pkg/compiler/lib/src/ir/scope.dart
@@ -2,29 +2,28 @@
 // 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.10
-
 import 'package:kernel/ast.dart' as ir;
 import 'closure.dart';
+import 'constants.dart' show Dart2jsConstantEvaluator;
 import 'scope_visitor.dart';
 import 'package:front_end/src/api_prototype/constant_evaluator.dart' as ir;
 
 class ScopeModel {
-  final ClosureScopeModel closureScopeModel;
-  final VariableScopeModel variableScopeModel;
+  final ClosureScopeModel? closureScopeModel;
+  final VariableScopeModel? variableScopeModel;
   final EvaluationComplexity initializerComplexity;
 
   const ScopeModel(
       {this.closureScopeModel,
       this.variableScopeModel,
-      this.initializerComplexity})
-      : assert(initializerComplexity != null);
+      required this.initializerComplexity});
 
   /// Inspect members and mark if those members capture any state that needs to
   /// be marked as free variables.
   factory ScopeModel.from(
       ir.Member node, ir.ConstantEvaluator constantEvaluator) {
-    ScopeModelBuilder builder = ScopeModelBuilder(constantEvaluator);
+    ScopeModelBuilder builder =
+        ScopeModelBuilder(constantEvaluator as Dart2jsConstantEvaluator);
     return builder.computeModel(node);
   }
 }
@@ -36,21 +35,20 @@
 }
 
 class VariableScopeModelImpl implements VariableScopeModel {
-  final Map<ir.TreeNode, VariableScope> _scopeMap = {};
-  Set<ir.VariableDeclaration> _assignedVariables;
+  final Map<ir.TreeNode, VariableScopeImpl> _scopeMap = {};
+  Set<ir.VariableDeclaration>? _assignedVariables;
 
-  VariableScope createScopeFor(ir.TreeNode node) {
+  VariableScopeImpl createScopeFor(ir.TreeNode node) {
     return _scopeMap[node] ??= VariableScopeImpl();
   }
 
   void registerAssignedVariable(ir.VariableDeclaration node) {
-    _assignedVariables ??= Set<ir.VariableDeclaration>();
-    _assignedVariables.add(node);
+    (_assignedVariables ??= {}).add(node);
   }
 
   @override
   VariableScope getScopeFor(ir.TreeNode node) {
-    return _scopeMap[node];
+    return _scopeMap[node]!;
   }
 
   @override
@@ -59,7 +57,7 @@
 
   @override
   bool isEffectivelyFinal(ir.VariableDeclaration node) {
-    return _assignedVariables == null || !_assignedVariables.contains(node);
+    return _assignedVariables == null || !_assignedVariables!.contains(node);
   }
 }
 
@@ -74,28 +72,28 @@
 }
 
 class VariableScopeImpl implements VariableScope {
-  List<VariableScope> _subScopes;
-  Set<ir.VariableDeclaration> _assignedVariables;
+  List<VariableScope>? _subScopes;
+  Set<ir.VariableDeclaration>? _assignedVariables;
   @override
   bool hasContinueSwitch = false;
 
   void addSubScope(VariableScope scope) {
     _subScopes ??= <VariableScope>[];
-    _subScopes.add(scope);
+    _subScopes!.add(scope);
   }
 
   void registerAssignedVariable(ir.VariableDeclaration variable) {
     _assignedVariables ??= Set<ir.VariableDeclaration>();
-    _assignedVariables.add(variable);
+    _assignedVariables!.add(variable);
   }
 
   @override
   Iterable<ir.VariableDeclaration> get assignedVariables sync* {
     if (_assignedVariables != null) {
-      yield* _assignedVariables;
+      yield* _assignedVariables!;
     }
     if (_subScopes != null) {
-      for (VariableScope subScope in _subScopes) {
+      for (VariableScope subScope in _subScopes!) {
         yield* subScope.assignedVariables;
       }
     }
@@ -103,13 +101,14 @@
 }
 
 abstract class VariableCollectorMixin {
-  VariableScopeImpl currentVariableScope;
+  VariableScopeImpl? currentVariableScope;
   VariableScopeModelImpl variableScopeModel = VariableScopeModelImpl();
 
   void visitInVariableScope(ir.TreeNode root, void f()) {
-    VariableScopeImpl oldScope = currentVariableScope;
-    currentVariableScope = variableScopeModel.createScopeFor(root);
-    oldScope?.addSubScope(currentVariableScope);
+    VariableScopeImpl? oldScope = currentVariableScope;
+    final newScope =
+        currentVariableScope = variableScopeModel.createScopeFor(root);
+    oldScope?.addSubScope(newScope);
     f();
     currentVariableScope = oldScope;
   }
diff --git a/pkg/compiler/lib/src/ir/scope_visitor.dart b/pkg/compiler/lib/src/ir/scope_visitor.dart
index 4d1e7f4..7a3863f 100644
--- a/pkg/compiler/lib/src/ir/scope_visitor.dart
+++ b/pkg/compiler/lib/src/ir/scope_visitor.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.10
-
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/core_types.dart' as ir;
 import 'package:kernel/type_environment.dart' as ir;
@@ -17,9 +15,9 @@
 /// a [VariableScopeModel] that can respond to queries about how a particular
 /// variable is being used at any point in the code.
 class ScopeModelBuilder extends ir.Visitor<EvaluationComplexity>
-    with VariableCollectorMixin, ir.VisitorNullMixin<EvaluationComplexity> {
+    with VariableCollectorMixin, ir.VisitorThrowingMixin<EvaluationComplexity> {
   final Dart2jsConstantEvaluator _constantEvaluator;
-  ir.StaticTypeContext _staticTypeContext;
+  late final ir.StaticTypeContext _staticTypeContext;
 
   ir.TypeEnvironment get _typeEnvironment => _constantEvaluator.typeEnvironment;
   ir.CoreTypes get _coreTypes => _typeEnvironment.coreTypes;
@@ -40,25 +38,26 @@
       _model.closuresToGenerate;
 
   /// The local variables that have been declared in the current scope.
+  // Initialized to a const value since it should be assigned in `enterNewScope`
+  // before collecting variables.
   List<ir.Node /* ir.VariableDeclaration | TypeParameterTypeWithContext */ >
-      _scopeVariables;
+      _scopeVariables = const [];
 
   /// Pointer to the context in which this closure is executed.
   /// For example, in the expression `var foo = () => 3 + i;`, the executable
   /// context as we walk the nodes in that expression is the ir.Field `foo`.
-  ir.TreeNode _executableContext;
+  ir.TreeNode? _executableContext;
 
   /// A flag to indicate if we are currently inside a closure.
   bool _isInsideClosure = false;
 
   /// Pointer to the original node where this closure builder started.
-  ir.Node _outermostNode;
+  ir.TreeNode? _outermostNode;
 
   /// Keep track of the mutated local variables so that we don't need to box
   /// non-mutated variables. We know these are only VariableDeclarations because
   /// type variable types and `this` types can't be mutated!
-  final Set<ir.VariableDeclaration> _mutatedVariables =
-      Set<ir.VariableDeclaration>();
+  final Set<ir.VariableDeclaration> _mutatedVariables = {};
 
   /// The set of variables that are accessed in some form, whether they are
   /// mutated or not.
@@ -71,9 +70,10 @@
   bool _inTry = false;
 
   /// The current scope we are in.
-  KernelScopeInfo _currentScopeInfo;
+  KernelScopeInfo? __currentScopeInfo;
+  KernelScopeInfo get _currentScopeInfo => __currentScopeInfo!;
 
-  bool _hasThisLocal;
+  bool _hasThisLocal = false;
 
   /// Keeps track of the number of boxes that we've created so that they each
   /// have unique names.
@@ -84,7 +84,7 @@
   /// This is updated in the visitor to distinguish between unconditional
   /// type variable usage, such as type literals and is tests, and conditional
   /// type variable usage, such as type argument in method invocations.
-  VariableUse _currentTypeUsage;
+  VariableUse? _currentTypeUsage;
 
   ScopeModelBuilder(this._constantEvaluator);
 
@@ -133,7 +133,7 @@
       throw UnsupportedError('Unhandled node $node (${node.runtimeType})');
 
   EvaluationComplexity visitNode(ir.Node node) {
-    return node?.accept(this);
+    return node.accept(this);
   }
 
   /// Tries to evaluate [node] as a constant expression.
@@ -158,7 +158,8 @@
   /// the children of the parent node, which lead to a O(n^2) complexity that
   /// is severe and observable for instance for large list literals.
   EvaluationComplexity _evaluateImplicitConstant(ir.Expression node) {
-    ir.Constant constant = _constantEvaluator.evaluate(_staticTypeContext, node,
+    ir.Constant? constant = _constantEvaluator.evaluateOrNull(
+        _staticTypeContext, node,
         requireConstant: false, replaceImplicitConstant: false);
     if (constant != null) {
       return EvaluationComplexity.constant(constant);
@@ -167,7 +168,13 @@
   }
 
   /// The evaluation complexity of the last visited expression.
-  EvaluationComplexity _lastExpressionComplexity;
+  // TODO(48820): Pre-NNBD we gained some benefit from the `null` default
+  // value. It is too painful to add `!` after every access so this is
+  // initialized to a 'harmless' value.  Should we add an invalid value
+  // 'ExpressionComplexity.invalid()` and check in the combiner and other
+  // use-sites that the value is not 'invalid'?
+  EvaluationComplexity _lastExpressionComplexity =
+      const EvaluationComplexity.constant();
 
   /// Visit [node] and returns the corresponding `ConstantExpression` if [node]
   /// evaluated to a constant.
@@ -182,7 +189,7 @@
   ir.Expression _handleExpression(ir.Expression node) {
     _lastExpressionComplexity = visitNode(node);
     if (_lastExpressionComplexity.isFreshConstant) {
-      return ir.ConstantExpression(_lastExpressionComplexity.constant,
+      return ir.ConstantExpression(_lastExpressionComplexity.constant!,
           node.getStaticType(_staticTypeContext))
         ..fileOffset = node.fileOffset
         ..parent = node.parent;
@@ -232,10 +239,10 @@
     }
     if (!capturedVariablesForScope.isEmpty) {
       assert(_model.scopeInfo != null);
-      KernelScopeInfo from = _model.scopeInfo;
+      KernelScopeInfo from = _model.scopeInfo!;
 
       KernelCapturedScope capturedScope;
-      var nodeBox = NodeBox(getBoxName(), _executableContext);
+      var nodeBox = NodeBox(getBoxName(), _executableContext!);
       if (node is ir.ForStatement ||
           node is ir.ForInStatement ||
           node is ir.WhileStatement ||
@@ -281,7 +288,7 @@
 
   /// Perform book-keeping with the current set of local variables that have
   /// been seen thus far before entering this new scope.
-  void enterNewScope(ir.Node node, void visitNewScope()) {
+  void enterNewScope(ir.TreeNode node, void visitNewScope()) {
     List<ir.Node> oldScopeVariables = _scopeVariables;
     _scopeVariables = <ir.Node>[];
     visitNewScope();
@@ -345,7 +352,7 @@
 
     visitInContext(node.type, usage);
     if (node.initializer != null) {
-      node.initializer = _handleExpression(node.initializer);
+      node.initializer = _handleExpression(node.initializer!);
     }
   }
 
@@ -365,7 +372,7 @@
       VariableUse usage) {
     assert(variable is ir.VariableDeclaration ||
         variable is TypeVariableTypeWithContext);
-    assert(usage != null);
+    assert((usage as dynamic) != null); // TODO(48820): Remove.
     if (_isInsideClosure && !_inCurrentContext(variable)) {
       // If the element is not declared in the current function and the element
       // is not the closure itself we need to mark the element as free variable.
@@ -377,7 +384,8 @@
         _currentScopeInfo.freeVariables.add(variable);
       } else {
         _currentScopeInfo.freeVariablesForRti
-            .putIfAbsent(variable, () => Set<VariableUse>())
+            .putIfAbsent(variable as TypeVariableTypeWithContext,
+                () => Set<VariableUse>())
             .add(usage);
       }
     }
@@ -405,13 +413,13 @@
             // context in that case.
             typeParameter.parent?.parent);
 
-    ir.TreeNode context = _executableContext;
+    ir.TreeNode? context = _executableContext;
     if (_isInsideClosure && context is ir.Procedure && context.isFactory) {
       // This is a closure in a factory constructor.  Since there is no
       // [:this:], we have to mark the type arguments as free variables to
       // capture them in the closure.
       _useTypeVariableAsLocal(
-          typeVariable(context.enclosingLibrary), _currentTypeUsage);
+          typeVariable(context.enclosingLibrary), _currentTypeUsage!);
     }
 
     if (context is ir.Member && context is! ir.Field) {
@@ -422,10 +430,10 @@
       // the type arguments are available in locals.
 
       if (_hasThisLocal) {
-        _registerNeedsThis(_currentTypeUsage);
+        _registerNeedsThis(_currentTypeUsage!);
       } else {
         _useTypeVariableAsLocal(
-            typeVariable(context.enclosingLibrary), _currentTypeUsage);
+            typeVariable(context.enclosingLibrary), _currentTypeUsage!);
       }
     }
 
@@ -517,7 +525,7 @@
       // condition or body are indeed flagged as mutated.
       visitInVariableScope(node, () {
         if (node.condition != null) {
-          node.condition = _handleExpression(node.condition);
+          node.condition = _handleExpression(node.condition!);
         }
         visitNode(node.body);
       });
@@ -532,7 +540,7 @@
         }
       }
     });
-    KernelCapturedScope scope = _scopesCapturedInClosureMap[node];
+    KernelCapturedScope? scope = _scopesCapturedInClosureMap[node];
     if (scope != null) {
       _scopesCapturedInClosureMap[node] = KernelCapturedLoopScope(
           scope.boxedVariables,
@@ -582,15 +590,15 @@
   void visitInvokable(ir.TreeNode node, void f()) {
     assert(node is ir.Member || node is ir.LocalFunction);
     bool oldIsInsideClosure = _isInsideClosure;
-    ir.TreeNode oldExecutableContext = _executableContext;
-    KernelScopeInfo oldScopeInfo = _currentScopeInfo;
+    ir.TreeNode? oldExecutableContext = _executableContext;
+    KernelScopeInfo? oldScopeInfo = __currentScopeInfo;
 
     // _outermostNode is only null the first time we enter the body of the
     // field, constructor, or method that is being analyzed.
     _isInsideClosure = _outermostNode != null;
     _executableContext = node;
 
-    _currentScopeInfo = KernelScopeInfo(_hasThisLocal);
+    __currentScopeInfo = KernelScopeInfo(_hasThisLocal);
 
     if (_isInsideClosure) {
       _closuresToGenerate[node] = _currentScopeInfo;
@@ -606,7 +614,7 @@
 
     // Restore old values.
     _isInsideClosure = oldIsInsideClosure;
-    _currentScopeInfo = oldScopeInfo;
+    __currentScopeInfo = oldScopeInfo;
     _executableContext = oldExecutableContext;
 
     // Mark all free variables as captured and expect to encounter them in the
@@ -641,9 +649,9 @@
     if (variable is TypeVariableTypeWithContext) {
       return variable.context == _executableContext;
     }
-    ir.TreeNode node = variable;
+    ir.TreeNode? node = variable as ir.TreeNode;
     while (node != _outermostNode && node != _executableContext) {
-      node = node.parent;
+      node = node!.parent;
     }
     return node == _executableContext;
   }
@@ -651,9 +659,10 @@
   @override
   EvaluationComplexity visitField(ir.Field node) {
     _currentTypeUsage = VariableUse.fieldType;
-    EvaluationComplexity complexity;
+    late final EvaluationComplexity complexity;
     visitInvokable(node, () {
-      node.initializer = _handleExpression(node.initializer);
+      assert(node.initializer != null);
+      node.initializer = _handleExpression(node.initializer!);
       complexity = _lastExpressionComplexity;
     });
     _currentTypeUsage = null;
@@ -742,12 +751,12 @@
 
   @override
   EvaluationComplexity visitTypeParameterType(ir.TypeParameterType node) {
-    _analyzeTypeVariable(node, _currentTypeUsage);
+    _analyzeTypeVariable(node, _currentTypeUsage!);
     return const EvaluationComplexity.lazy();
   }
 
   EvaluationComplexity visitInContext(ir.Node node, VariableUse use) {
-    VariableUse oldCurrentTypeUsage = _currentTypeUsage;
+    VariableUse? oldCurrentTypeUsage = _currentTypeUsage;
     _currentTypeUsage = use;
     EvaluationComplexity complexity = visitNode(node);
     _currentTypeUsage = oldCurrentTypeUsage;
@@ -756,7 +765,7 @@
 
   EvaluationComplexity visitNodesInContext(
       List<ir.Node> nodes, VariableUse use) {
-    VariableUse oldCurrentTypeUsage = _currentTypeUsage;
+    VariableUse? oldCurrentTypeUsage = _currentTypeUsage;
     _currentTypeUsage = use;
     EvaluationComplexity complexity = visitNodes(nodes);
     _currentTypeUsage = oldCurrentTypeUsage;
@@ -829,7 +838,7 @@
     final parent = node.parent;
     VariableUse parameterUsage = parent is ir.Member
         ? VariableUse.memberParameter(parent)
-        : VariableUse.localParameter(parent);
+        : VariableUse.localParameter(parent as ir.LocalFunction?);
     visitNodesInContext(node.typeParameters, parameterUsage);
     for (ir.VariableDeclaration declaration in node.positionalParameters) {
       _handleVariableDeclaration(declaration, parameterUsage);
@@ -841,9 +850,9 @@
         node.returnType,
         parent is ir.Member
             ? VariableUse.memberReturnType(parent)
-            : VariableUse.localReturnType(parent));
+            : VariableUse.localReturnType(parent as ir.LocalFunction));
     if (node.body != null) {
-      visitNode(node.body);
+      visitNode(node.body!);
     }
     return const EvaluationComplexity.lazy();
   }
@@ -1264,10 +1273,10 @@
   EvaluationComplexity visitCatch(ir.Catch node) {
     visitInContext(node.guard, VariableUse.explicit);
     if (node.exception != null) {
-      visitNode(node.exception);
+      visitNode(node.exception!);
     }
     if (node.stackTrace != null) {
-      visitNode(node.stackTrace);
+      visitNode(node.stackTrace!);
     }
     visitInVariableScope(node, () {
       visitNode(node.body);
@@ -1311,7 +1320,7 @@
     visitInVariableScope(node, () {
       node.condition = _handleExpression(node.condition);
       if (node.message != null) {
-        node.message = _handleExpression(node.message);
+        node.message = _handleExpression(node.message!);
       }
     });
     return const EvaluationComplexity.lazy();
@@ -1320,7 +1329,7 @@
   @override
   EvaluationComplexity visitReturnStatement(ir.ReturnStatement node) {
     if (node.expression != null) {
-      node.expression = _handleExpression(node.expression);
+      node.expression = _handleExpression(node.expression!);
     }
     return const EvaluationComplexity.lazy();
   }
@@ -1377,7 +1386,9 @@
 
   @override
   EvaluationComplexity visitLocalInitializer(ir.LocalInitializer node) {
-    node.variable.initializer = _handleExpression(node.variable.initializer);
+    if (node.variable.initializer != null) {
+      node.variable.initializer = _handleExpression(node.variable.initializer!);
+    }
     return const EvaluationComplexity.lazy();
   }
 
@@ -1414,7 +1425,7 @@
     if (conditionComplexity.isFreshConstant) {}
     visitNode(node.then);
     if (node.otherwise != null) {
-      visitNode(node.otherwise);
+      visitNode(node.otherwise!);
     }
     return const EvaluationComplexity.lazy();
   }
@@ -1435,13 +1446,14 @@
       (node is ir.Procedure && node.isFactory);
 
   void _analyzeTypeVariable(ir.TypeParameterType type, VariableUse usage) {
-    assert(usage != null);
-    if (_outermostNode is ir.Member) {
+    assert((usage as dynamic) != null); // TODO(48820): Remove.
+    final outermost = _outermostNode;
+    if (outermost is ir.Member) {
       TypeVariableTypeWithContext typeVariable =
-          TypeVariableTypeWithContext(type, _outermostNode);
+          TypeVariableTypeWithContext(type, outermost);
       switch (typeVariable.kind) {
         case TypeVariableKind.cls:
-          if (_isFieldOrConstructor(_outermostNode)) {
+          if (_isFieldOrConstructor(outermost)) {
             // Class type variable used in a field or constructor.
             _useTypeVariableAsLocal(typeVariable, usage);
           } else {
@@ -1479,8 +1491,8 @@
 
 class EvaluationComplexity {
   final ComplexityLevel level;
-  final Set<ir.Field> fields;
-  final ir.Constant constant;
+  final Set<ir.Field>? fields;
+  final ir.Constant? constant;
 
   const EvaluationComplexity.constant([this.constant])
       : level = ComplexityLevel.constant,
@@ -1504,7 +1516,7 @@
       return const EvaluationComplexity.lazy();
     } else if (isEager || other.isEager) {
       if (fields != null && other.fields != null) {
-        fields.addAll(other.fields);
+        fields!.addAll(other.fields!);
         return this;
       } else if (fields != null) {
         return this;
@@ -1550,7 +1562,7 @@
         sb.write('eager');
         if (fields != null) {
           sb.write('&fields=[');
-          List<String> names = fields.map((f) => f.name.text).toList()..sort();
+          List<String> names = fields!.map((f) => f.name.text).toList()..sort();
           sb.write(names.join(','));
           sb.write(']');
         }
diff --git a/pkg/compiler/lib/src/js/size_estimator.dart b/pkg/compiler/lib/src/js/size_estimator.dart
index 7dc9fdf..e7faf76 100644
--- a/pkg/compiler/lib/src/js/size_estimator.dart
+++ b/pkg/compiler/lib/src/js/size_estimator.dart
@@ -678,6 +678,11 @@
         // We cannot remove parenthesis for "*" because of precision issues.
         rightPrecedenceRequirement = UNARY;
         break;
+      case "**":
+        leftPrecedenceRequirement = EXPONENTIATION;
+        // We cannot remove parenthesis for "**" because of precision issues.
+        rightPrecedenceRequirement = UNARY;
+        break;
       default:
         throw UnsupportedError("Forgot operator: $op");
     }
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
index 96d0951..9791f4a 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
@@ -10,7 +10,6 @@
 import '../common/elements.dart' show CommonElements, ElementEnvironment;
 import '../common/names.dart' show Identifiers;
 import '../elements/entities.dart';
-import '../elements/entities_parameter_structure_methods.dart';
 import '../elements/names.dart';
 import '../elements/types.dart';
 import '../ir/runtime_type_analysis.dart';
@@ -142,8 +141,7 @@
     if (property.memberName != selector.memberName) return false;
     if (type is FunctionType &&
         !selector.callStructure
-            .signatureApplies(ParameterStructureMethods.fromType(type)))
-      return false;
+            .signatureApplies(ParameterStructure.fromType(type))) return false;
     return true;
   }
 
@@ -290,9 +288,8 @@
             instanceName: instanceName,
             isNoSuchMethod: isNoSuchMethod);
       } else {
-        ParameterStructure parameterStructure =
-            ParameterStructureMethods.fromType(
-                _elementEnvironment.getLocalFunctionType(function));
+        ParameterStructure parameterStructure = ParameterStructure.fromType(
+            _elementEnvironment.getLocalFunctionType(function));
         node = MethodNode(function, parameterStructure, isCallTarget: true);
       }
       return node;
@@ -449,7 +446,7 @@
 
     for (GenericInstantiation instantiation in _genericInstantiations) {
       ParameterStructure instantiationParameterStructure =
-          ParameterStructureMethods.fromType(instantiation.functionType);
+          ParameterStructure.fromType(instantiation.functionType);
       ClassEntity implementationClass = _commonElements
           .getInstantiationClass(instantiation.typeArguments.length);
 
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index 6cbb34b..e4ae932 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -1492,7 +1492,8 @@
       // computation.
       ir.StaticTypeContext staticTypeContext =
           getStaticTypeContext(memberContext);
-      ir.Constant constant = constantEvaluator.evaluate(staticTypeContext, node,
+      ir.Constant constant = constantEvaluator.evaluateOrNull(
+          staticTypeContext, node,
           requireConstant: requireConstant);
       if (constant == null) {
         if (requireConstant) {
diff --git a/pkg/compiler/lib/src/js_model/elements.dart b/pkg/compiler/lib/src/js_model/elements.dart
index 9d3517e..915558b 100644
--- a/pkg/compiler/lib/src/js_model/elements.dart
+++ b/pkg/compiler/lib/src/js_model/elements.dart
@@ -10,7 +10,6 @@
 import '../elements/entities.dart';
 import '../elements/indexed.dart';
 import '../elements/names.dart';
-import '../elements/entities_parameter_structure_methods.dart';
 import '../elements/types.dart';
 import '../serialization/serialization.dart';
 import '../universe/class_set.dart' show ClassHierarchyNodesMapKey;
@@ -280,7 +279,7 @@
     JClass enclosingClass = source.readClass();
     String name = source.readString();
     ParameterStructure parameterStructure =
-        ParameterStructureMethods.readFromDataSource(source);
+        ParameterStructure.readFromDataSource(source);
     bool isExternal = source.readBool();
     bool isConst = source.readBool();
     source.end(tag);
@@ -329,7 +328,7 @@
     JClass enclosingClass = source.readClass();
     String name = source.readString();
     ParameterStructure parameterStructure =
-        ParameterStructureMethods.readFromDataSource(source);
+        ParameterStructure.readFromDataSource(source);
     bool isExternal = source.readBool();
     bool isConst = source.readBool();
     bool isFromEnvironmentConstructor = source.readBool();
@@ -378,7 +377,7 @@
     source.begin(tag);
     JConstructor constructor = source.readMember();
     ParameterStructure parameterStructure =
-        ParameterStructureMethods.readFromDataSource(source);
+        ParameterStructure.readFromDataSource(source);
     source.end(tag);
     return JConstructorBody(constructor, parameterStructure);
   }
@@ -426,7 +425,7 @@
     }
     String name = source.readString();
     ParameterStructure parameterStructure =
-        ParameterStructureMethods.readFromDataSource(source);
+        ParameterStructure.readFromDataSource(source);
     AsyncMarker asyncMarker = source.readEnum(AsyncMarker.values);
     bool isStatic = source.readBool();
     bool isExternal = source.readBool();
@@ -708,7 +707,7 @@
     source.begin(tag);
     JClass enclosingClass = source.readClass();
     ParameterStructure parameterStructure =
-        ParameterStructureMethods.readFromDataSource(source);
+        ParameterStructure.readFromDataSource(source);
     AsyncMarker asyncMarker = source.readEnum(AsyncMarker.values);
     source.end(tag);
     return JClosureCallMethod(enclosingClass, parameterStructure, asyncMarker);
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index a3a0c0c..476b906 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -1144,7 +1144,8 @@
       }
       return NullConstantValue();
     }
-    ir.Constant constant = constantEvaluator.evaluate(staticTypeContext, node,
+    ir.Constant constant = constantEvaluator.evaluateOrNull(
+        staticTypeContext, node,
         requireConstant: requireConstant);
     if (constant == null) {
       if (requireConstant) {
diff --git a/pkg/compiler/test/js/js_parser_test.dart b/pkg/compiler/test/js/js_parser_test.dart
index abbed83..6cc7a3f 100644
--- a/pkg/compiler/test/js/js_parser_test.dart
+++ b/pkg/compiler/test/js/js_parser_test.dart
@@ -258,4 +258,12 @@
   bar() {
   }
 }""");
+
+  // Exponentiation operator.
+  testExpression("a ** b");
+  //* Parsed with incorrect association:
+  testExpression("a ** b ** c", "(a ** b) ** c");
+  testExpression("(a ** b) ** c", "(a ** b) ** c");
+  testExpression("a ** (b ** c)", "a ** b ** c");
+  testExpression("a **= b");
 }
diff --git a/pkg/dev_compiler/lib/src/js_ast/builder.dart b/pkg/dev_compiler/lib/src/js_ast/builder.dart
index 98c70eb..0ee9e63 100644
--- a/pkg/dev_compiler/lib/src/js_ast/builder.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/builder.dart
@@ -609,6 +609,7 @@
     '<<=': 17,
     '>>=': 17,
     '>>>=': 17,
+    '**=': 17,
     '=': 17,
     '||': 14,
     '&&': 13,
@@ -632,7 +633,8 @@
     '-': 6,
     '*': 5,
     '/': 5,
-    '%': 5
+    '%': 5,
+    '**': 4,
   };
   static final UNARY_OPERATORS = {
     '++',
diff --git a/pkg/dev_compiler/lib/src/js_ast/nodes.dart b/pkg/dev_compiler/lib/src/js_ast/nodes.dart
index c64ff60..89f22da 100644
--- a/pkg/dev_compiler/lib/src/js_ast/nodes.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/nodes.dart
@@ -1291,6 +1291,8 @@
   int get precedenceLevel {
     // TODO(floitsch): switch to constant map.
     switch (op) {
+      case '**':
+        return EXPONENTIATION;
       case '*':
       case '/':
       case '%':
diff --git a/pkg/dev_compiler/lib/src/js_ast/precedence.dart b/pkg/dev_compiler/lib/src/js_ast/precedence.dart
index f149dc2..3f3ea76 100644
--- a/pkg/dev_compiler/lib/src/js_ast/precedence.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/precedence.dart
@@ -28,7 +28,8 @@
 const SHIFT = RELATIONAL + 1;
 const ADDITIVE = SHIFT + 1;
 const MULTIPLICATIVE = ADDITIVE + 1;
-const UNARY = MULTIPLICATIVE + 1;
+const EXPONENTIATION = MULTIPLICATIVE + 1;
+const UNARY = EXPONENTIATION + 1;
 const LEFT_HAND_SIDE = UNARY + 1;
 const CALL = LEFT_HAND_SIDE;
 // We always emit `new` with parenthesis, so it uses ACCESS as its precedence.
diff --git a/pkg/dev_compiler/lib/src/js_ast/printer.dart b/pkg/dev_compiler/lib/src/js_ast/printer.dart
index 88434f0..911327c 100644
--- a/pkg/dev_compiler/lib/src/js_ast/printer.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/printer.dart
@@ -856,6 +856,12 @@
         // We cannot remove parenthesis for "*" because of precision issues.
         rightPrecedenceRequirement = UNARY;
         break;
+      case '**':
+        // 'a ** b ** c' parses as 'a ** (b ** c)', so the left must have higher
+        // precedence.
+        leftPrecedenceRequirement = UNARY;
+        rightPrecedenceRequirement = EXPONENTIATION;
+        break;
       default:
         leftPrecedenceRequirement = EXPRESSION;
         rightPrecedenceRequirement = EXPRESSION;
diff --git a/pkg/frontend_server/lib/frontend_server.dart b/pkg/frontend_server/lib/frontend_server.dart
index 710ba19..ca5700a 100644
--- a/pkg/frontend_server/lib/frontend_server.dart
+++ b/pkg/frontend_server/lib/frontend_server.dart
@@ -540,7 +540,7 @@
       nullSafety: compilerOptions.nnbdMode == NnbdMode.Strong,
       supportMirrors: options['support-mirrors'] ??
           !(options['aot'] || options['minimal-kernel']),
-      compactAsync: options['compact-async'] ?? false /*options['aot']*/,
+      compactAsync: options['compact-async'] ?? options['aot'],
     );
     if (compilerOptions.target == null) {
       print('Failed to create front-end target ${options['target']}.');
diff --git a/pkg/js_ast/lib/src/builder.dart b/pkg/js_ast/lib/src/builder.dart
index fc04678..db39a15 100644
--- a/pkg/js_ast/lib/src/builder.dart
+++ b/pkg/js_ast/lib/src/builder.dart
@@ -535,6 +535,7 @@
     '<<=': 17,
     '>>=': 17,
     '>>>=': 17,
+    '**=': 17,
     '=': 17,
     '||': 14,
     '&&': 13,
@@ -558,7 +559,8 @@
     '-': 6,
     '*': 5,
     '/': 5,
-    '%': 5
+    '%': 5,
+    '**': 4,
   };
   static final UNARY_OPERATORS = {
     '++',
diff --git a/pkg/js_ast/lib/src/nodes.dart b/pkg/js_ast/lib/src/nodes.dart
index 661efd6..4e7acf0 100644
--- a/pkg/js_ast/lib/src/nodes.dart
+++ b/pkg/js_ast/lib/src/nodes.dart
@@ -1638,6 +1638,8 @@
   int get precedenceLevel {
     // TODO(floitsch): switch to constant map.
     switch (op) {
+      case '**':
+        return EXPONENTIATION;
       case '*':
       case '/':
       case '%':
diff --git a/pkg/js_ast/lib/src/precedence.dart b/pkg/js_ast/lib/src/precedence.dart
index 222f4a8..63bf3b3 100644
--- a/pkg/js_ast/lib/src/precedence.dart
+++ b/pkg/js_ast/lib/src/precedence.dart
@@ -16,7 +16,8 @@
 const SHIFT = RELATIONAL + 1;
 const ADDITIVE = SHIFT + 1;
 const MULTIPLICATIVE = ADDITIVE + 1;
-const UNARY = MULTIPLICATIVE + 1;
+const EXPONENTIATION = MULTIPLICATIVE + 1;
+const UNARY = EXPONENTIATION + 1;
 const CALL = UNARY + 1;
 const LEFT_HAND_SIDE = CALL + 1;
 const PRIMARY = LEFT_HAND_SIDE + 1;
diff --git a/pkg/js_ast/lib/src/printer.dart b/pkg/js_ast/lib/src/printer.dart
index 9f9a3ff..0226894 100644
--- a/pkg/js_ast/lib/src/printer.dart
+++ b/pkg/js_ast/lib/src/printer.dart
@@ -970,6 +970,12 @@
         // We cannot remove parenthesis for "*" because of precision issues.
         rightPrecedenceRequirement = UNARY;
         break;
+      case '**':
+        // 'a ** b ** c' parses as 'a ** (b ** c)', so the left must have higher
+        // precedence.
+        leftPrecedenceRequirement = UNARY;
+        rightPrecedenceRequirement = EXPONENTIATION;
+        break;
       default:
         leftPrecedenceRequirement = EXPRESSION;
         rightPrecedenceRequirement = EXPRESSION;
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index 9ced5db..22c471fb 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -202,7 +202,7 @@
   final String? manifestFilename = options['manifest'];
   final String? dataDir = options['component-name'] ?? options['data-dir'];
   final bool? supportMirrors = options['support-mirrors'];
-  final bool compactAsync = options['compact-async'] ?? false /*aot*/;
+  final bool compactAsync = options['compact-async'] ?? aot;
 
   final bool minimalKernel = options['minimal-kernel'];
   final bool treeShakeWriteOnlyFields = options['tree-shake-write-only-fields'];
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index 8e95dab..a8d862f 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -250,6 +250,7 @@
           MESSAGE_SNAPSHOT_ILLEGAL(Pointer);
           MESSAGE_SNAPSHOT_ILLEGAL(ReceivePort);
           MESSAGE_SNAPSHOT_ILLEGAL(UserTag);
+          MESSAGE_SNAPSHOT_ILLEGAL(SuspendState);
 
         default:
           if (cid >= kNumPredefinedCids) {
diff --git a/runtime/vm/app_snapshot.cc b/runtime/vm/app_snapshot.cc
index ccdda66..a6a4766 100644
--- a/runtime/vm/app_snapshot.cc
+++ b/runtime/vm/app_snapshot.cc
@@ -381,23 +381,22 @@
     stop_index_ = d->next_index();
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    ClassTable* table = d->isolate_group()->class_table();
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
 
     for (intptr_t id = predefined_start_index_; id < predefined_stop_index_;
          id++) {
-      ClassPtr cls = static_cast<ClassPtr>(d->Ref(id));
-      ReadFromTo(cls);
-      intptr_t class_id = d->ReadCid();
+      ClassPtr cls = static_cast<ClassPtr>(d.Ref(id));
+      d.ReadFromTo(cls);
+      intptr_t class_id = d.ReadCid();
       cls->untag()->id_ = class_id;
 #if !defined(DART_PRECOMPILED_RUNTIME)
-      if (d->kind() != Snapshot::kFullAOT) {
-        cls->untag()->kernel_offset_ = d->Read<uint32_t>();
-      }
+      ASSERT(d_->kind() != Snapshot::kFullAOT);
+      cls->untag()->kernel_offset_ = d.Read<uint32_t>();
 #endif
       if (!IsInternalVMdefinedClassId(class_id)) {
-        cls->untag()->host_instance_size_in_words_ = d->Read<int32_t>();
-        cls->untag()->host_next_field_offset_in_words_ = d->Read<int32_t>();
+        cls->untag()->host_instance_size_in_words_ = d.Read<int32_t>();
+        cls->untag()->host_next_field_offset_in_words_ = d.Read<int32_t>();
 #if defined(DART_PRECOMPILER)
         // Only one pair is serialized. The target field only exists when
         // DART_PRECOMPILER is defined
@@ -407,48 +406,50 @@
             cls->untag()->host_next_field_offset_in_words_;
 #endif  // defined(DART_PRECOMPILER)
       } else {
-        d->Read<int32_t>();  // Skip.
-        d->Read<int32_t>();  // Skip.
+        d.Read<int32_t>();  // Skip.
+        d.Read<int32_t>();  // Skip.
       }
       cls->untag()->host_type_arguments_field_offset_in_words_ =
-          d->Read<int32_t>();
+          d.Read<int32_t>();
 #if defined(DART_PRECOMPILER)
       cls->untag()->target_type_arguments_field_offset_in_words_ =
           cls->untag()->host_type_arguments_field_offset_in_words_;
 #endif  // defined(DART_PRECOMPILER)
-      cls->untag()->num_type_arguments_ = d->Read<int16_t>();
-      cls->untag()->num_native_fields_ = d->Read<uint16_t>();
+      cls->untag()->num_type_arguments_ = d.Read<int16_t>();
+      cls->untag()->num_native_fields_ = d.Read<uint16_t>();
 #if !defined(DART_PRECOMPILED_RUNTIME)
-      ASSERT(d->kind() != Snapshot::kFullAOT);
-      cls->untag()->token_pos_ = d->ReadTokenPosition();
-      cls->untag()->end_token_pos_ = d->ReadTokenPosition();
+      ASSERT(d_->kind() != Snapshot::kFullAOT);
+      cls->untag()->token_pos_ = d.ReadTokenPosition();
+      cls->untag()->end_token_pos_ = d.ReadTokenPosition();
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
-      cls->untag()->state_bits_ = d->Read<uint32_t>();
+      cls->untag()->state_bits_ = d.Read<uint32_t>();
 
-      if (FLAG_precompiled_mode) {
-        d->ReadUnsigned64();  // Skip unboxed fields bitmap.
-      }
+#if defined(DART_PRECOMPILED_RUNTIME)
+      d.ReadUnsigned64();  // Skip unboxed fields bitmap.
+#endif
     }
 
-    auto shared_class_table = d->isolate_group()->shared_class_table();
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      ClassPtr cls = static_cast<ClassPtr>(d->Ref(id));
+    ClassTable* table = d_->isolate_group()->class_table();
+#if defined(DART_PRECOMPILED_RUNTIME)
+    auto shared_class_table = d_->isolate_group()->shared_class_table();
+#endif
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      ClassPtr cls = static_cast<ClassPtr>(d.Ref(id));
       Deserializer::InitializeHeader(cls, kClassCid, Class::InstanceSize());
-      ReadFromTo(cls);
+      d.ReadFromTo(cls);
 
-      intptr_t class_id = d->ReadCid();
+      intptr_t class_id = d.ReadCid();
       ASSERT(class_id >= kNumPredefinedCids);
       cls->untag()->id_ = class_id;
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-      if (d->kind() != Snapshot::kFullAOT) {
-        cls->untag()->kernel_offset_ = d->Read<uint32_t>();
-      }
+      ASSERT(d_->kind() != Snapshot::kFullAOT);
+      cls->untag()->kernel_offset_ = d.Read<uint32_t>();
 #endif
-      cls->untag()->host_instance_size_in_words_ = d->Read<int32_t>();
-      cls->untag()->host_next_field_offset_in_words_ = d->Read<int32_t>();
+      cls->untag()->host_instance_size_in_words_ = d.Read<int32_t>();
+      cls->untag()->host_next_field_offset_in_words_ = d.Read<int32_t>();
       cls->untag()->host_type_arguments_field_offset_in_words_ =
-          d->Read<int32_t>();
+          d.Read<int32_t>();
 #if defined(DART_PRECOMPILER)
       cls->untag()->target_instance_size_in_words_ =
           cls->untag()->host_instance_size_in_words_;
@@ -457,22 +458,24 @@
       cls->untag()->target_type_arguments_field_offset_in_words_ =
           cls->untag()->host_type_arguments_field_offset_in_words_;
 #endif  // defined(DART_PRECOMPILER)
-      cls->untag()->num_type_arguments_ = d->Read<int16_t>();
-      cls->untag()->num_native_fields_ = d->Read<uint16_t>();
+      cls->untag()->num_type_arguments_ = d.Read<int16_t>();
+      cls->untag()->num_native_fields_ = d.Read<uint16_t>();
 #if !defined(DART_PRECOMPILED_RUNTIME)
-      ASSERT(d->kind() != Snapshot::kFullAOT);
-      cls->untag()->token_pos_ = d->ReadTokenPosition();
-      cls->untag()->end_token_pos_ = d->ReadTokenPosition();
+      ASSERT(d_->kind() != Snapshot::kFullAOT);
+      cls->untag()->token_pos_ = d.ReadTokenPosition();
+      cls->untag()->end_token_pos_ = d.ReadTokenPosition();
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
-      cls->untag()->state_bits_ = d->Read<uint32_t>();
+      cls->untag()->state_bits_ = d.Read<uint32_t>();
 
       table->AllocateIndex(class_id);
       table->SetAt(class_id, cls);
 
-      if (FLAG_precompiled_mode && !ClassTable::IsTopLevelCid(class_id)) {
-        const UnboxedFieldBitmap unboxed_fields_map(d->ReadUnsigned64());
+#if defined(DART_PRECOMPILED_RUNTIME)
+      if (!ClassTable::IsTopLevelCid(class_id)) {
+        const UnboxedFieldBitmap unboxed_fields_map(d.ReadUnsigned64());
         shared_class_table->SetUnboxedFieldsMapAt(class_id, unboxed_fields_map);
       }
+#endif
     }
   }
 
@@ -755,14 +758,15 @@
     ReadAllocFixedSize(d, TypeParameters::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      TypeParametersPtr type_params =
-          static_cast<TypeParametersPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      TypeParametersPtr type_params = static_cast<TypeParametersPtr>(d.Ref(id));
       Deserializer::InitializeHeader(type_params, kTypeParametersCid,
                                      TypeParameters::InstanceSize());
-      ReadFromTo(type_params);
+      d.ReadFromTo(type_params);
     }
   }
 };
@@ -852,20 +856,23 @@
     BuildCanonicalSetFromLayout(d);
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      TypeArgumentsPtr type_args = static_cast<TypeArgumentsPtr>(d->Ref(id));
-      const intptr_t length = d->ReadUnsigned();
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    const bool mark_canonical = primary && is_canonical();
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      TypeArgumentsPtr type_args = static_cast<TypeArgumentsPtr>(d.Ref(id));
+      const intptr_t length = d.ReadUnsigned();
       Deserializer::InitializeHeader(type_args, kTypeArgumentsCid,
                                      TypeArguments::InstanceSize(length),
-                                     primary && is_canonical());
+                                     mark_canonical);
       type_args->untag()->length_ = Smi::New(length);
-      type_args->untag()->hash_ = Smi::New(d->Read<int32_t>());
-      type_args->untag()->nullability_ = Smi::New(d->ReadUnsigned());
-      type_args->untag()->instantiations_ = static_cast<ArrayPtr>(d->ReadRef());
+      type_args->untag()->hash_ = Smi::New(d.Read<int32_t>());
+      type_args->untag()->nullability_ = Smi::New(d.ReadUnsigned());
+      type_args->untag()->instantiations_ = static_cast<ArrayPtr>(d.ReadRef());
       for (intptr_t j = 0; j < length; j++) {
         type_args->untag()->types()[j] =
-            static_cast<AbstractTypePtr>(d->ReadRef());
+            static_cast<AbstractTypePtr>(d.ReadRef());
       }
     }
   }
@@ -878,7 +885,7 @@
       object_store->set_canonical_type_arguments(table_);
     } else if (!primary && is_canonical()) {
       TypeArguments& type_arg = TypeArguments::Handle(d->zone());
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
+      for (intptr_t i = start_index_, n = stop_index_; i < n; i++) {
         type_arg ^= refs.At(i);
         type_arg = type_arg.Canonicalize(d->thread(), nullptr);
         refs.SetAt(i, type_arg);
@@ -937,17 +944,18 @@
     ReadAllocFixedSize(d, PatchClass::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      PatchClassPtr cls = static_cast<PatchClassPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      PatchClassPtr cls = static_cast<PatchClassPtr>(d.Ref(id));
       Deserializer::InitializeHeader(cls, kPatchClassCid,
                                      PatchClass::InstanceSize());
-      ReadFromTo(cls);
+      d.ReadFromTo(cls);
 #if !defined(DART_PRECOMPILED_RUNTIME)
-      if (d->kind() != Snapshot::kFullAOT) {
-        cls->untag()->library_kernel_offset_ = d->Read<int32_t>();
-      }
+      ASSERT(d_->kind() != Snapshot::kFullAOT);
+      cls->untag()->library_kernel_offset_ = d.Read<int32_t>();
 #endif
     }
   }
@@ -1135,68 +1143,68 @@
     ReadAllocFixedSize(d, Function::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    ASSERT(!is_canonical());  // Never canonical.
-    Snapshot::Kind kind = d->kind();
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
 
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      FunctionPtr func = static_cast<FunctionPtr>(d->Ref(id));
+    ASSERT(!is_canonical());  // Never canonical.
+    Snapshot::Kind kind = d_->kind();
+
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      FunctionPtr func = static_cast<FunctionPtr>(d.Ref(id));
       Deserializer::InitializeHeader(func, kFunctionCid,
                                      Function::InstanceSize());
-      ReadFromTo(func);
+      d.ReadFromTo(func);
 
 #if defined(DEBUG)
       func->untag()->entry_point_ = 0;
       func->untag()->unchecked_entry_point_ = 0;
 #endif
 
-      if (kind == Snapshot::kFullAOT) {
-        const intptr_t code_index = d->ReadUnsigned();
-        uword entry_point = 0;
-        CodePtr code = d->GetCodeByIndex(code_index, &entry_point);
-        func->untag()->code_ = code;
-        if (entry_point != 0) {
-          func->untag()->entry_point_ = entry_point;
-          func->untag()->unchecked_entry_point_ = entry_point;
-        }
-      } else if (kind == Snapshot::kFullJIT) {
-        NOT_IN_PRECOMPILED(func->untag()->unoptimized_code_ =
-                               static_cast<CodePtr>(d->ReadRef()));
-        func->untag()->code_ = static_cast<CodePtr>(d->ReadRef());
-        func->untag()->ic_data_array_ = static_cast<ArrayPtr>(d->ReadRef());
+#if defined(DART_PRECOMPILED_RUNTIME)
+      ASSERT(kind == Snapshot::kFullAOT);
+      const intptr_t code_index = d.ReadUnsigned();
+      uword entry_point = 0;
+      CodePtr code = d_->GetCodeByIndex(code_index, &entry_point);
+      func->untag()->code_ = code;
+      if (entry_point != 0) {
+        func->untag()->entry_point_ = entry_point;
+        func->untag()->unchecked_entry_point_ = entry_point;
       }
+#else
+      ASSERT(kind != Snapshot::kFullAOT);
+      if (kind == Snapshot::kFullJIT) {
+        func->untag()->unoptimized_code_ = static_cast<CodePtr>(d.ReadRef());
+        func->untag()->code_ = static_cast<CodePtr>(d.ReadRef());
+        func->untag()->ic_data_array_ = static_cast<ArrayPtr>(d.ReadRef());
+      }
+#endif
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-      if (kind != Snapshot::kFullAOT) {
-        func->untag()->positional_parameter_names_ =
-            static_cast<ArrayPtr>(d->ReadRef());
-        func->untag()->token_pos_ = d->ReadTokenPosition();
-        func->untag()->end_token_pos_ = d->ReadTokenPosition();
-        func->untag()->kernel_offset_ = d->Read<uint32_t>();
-      }
+      ASSERT(kind != Snapshot::kFullAOT);
+      func->untag()->positional_parameter_names_ =
+          static_cast<ArrayPtr>(d.ReadRef());
+      func->untag()->token_pos_ = d.ReadTokenPosition();
+      func->untag()->end_token_pos_ = d.ReadTokenPosition();
+      func->untag()->kernel_offset_ = d.Read<uint32_t>();
       func->untag()->unboxed_parameters_info_.Reset();
 #endif
-      func->untag()->packed_fields_ = d->Read<uint32_t>();
-      func->untag()->kind_tag_ = d->Read<uint32_t>();
-      if (kind == Snapshot::kFullAOT) {
-        // Omit fields used to support de/reoptimization.
-      } else {
+      func->untag()->packed_fields_ = d.Read<uint32_t>();
+      func->untag()->kind_tag_ = d.Read<uint32_t>();
 #if !defined(DART_PRECOMPILED_RUNTIME)
-        func->untag()->usage_counter_ = 0;
-        func->untag()->optimized_instruction_count_ = 0;
-        func->untag()->optimized_call_site_count_ = 0;
-        func->untag()->deoptimization_counter_ = 0;
-        func->untag()->state_bits_ = 0;
-        func->untag()->inlining_depth_ = 0;
+      func->untag()->usage_counter_ = 0;
+      func->untag()->optimized_instruction_count_ = 0;
+      func->untag()->optimized_call_site_count_ = 0;
+      func->untag()->deoptimization_counter_ = 0;
+      func->untag()->state_bits_ = 0;
+      func->untag()->inlining_depth_ = 0;
 #endif
-      }
     }
   }
 
   void PostLoad(Deserializer* d, const Array& refs, bool primary) {
     if (d->kind() == Snapshot::kFullAOT) {
       Function& func = Function::Handle(d->zone());
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
+      for (intptr_t i = start_index_, n = stop_index_; i < n; i++) {
         func ^= refs.At(i);
         auto const code = func.ptr()->untag()->code();
         ASSERT(code->IsCode());
@@ -1212,7 +1220,7 @@
     } else if (d->kind() == Snapshot::kFullJIT) {
       Function& func = Function::Handle(d->zone());
       Code& code = Code::Handle(d->zone());
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
+      for (intptr_t i = start_index_, n = stop_index_; i < n; i++) {
         func ^= refs.At(i);
         code = func.CurrentCode();
         if (func.HasCode() && !code.IsDisabled()) {
@@ -1224,7 +1232,7 @@
       }
     } else {
       Function& func = Function::Handle(d->zone());
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
+      for (intptr_t i = start_index_, n = stop_index_; i < n; i++) {
         func ^= refs.At(i);
         func.ClearCodeSafe();  // Set code and entrypoint to lazy compile stub.
       }
@@ -1290,22 +1298,24 @@
     ReadAllocFixedSize(d, ClosureData::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      ClosureDataPtr data = static_cast<ClosureDataPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      ClosureDataPtr data = static_cast<ClosureDataPtr>(d.Ref(id));
       Deserializer::InitializeHeader(data, kClosureDataCid,
                                      ClosureData::InstanceSize());
-      if (d->kind() == Snapshot::kFullAOT) {
+      if (d_->kind() == Snapshot::kFullAOT) {
         data->untag()->context_scope_ = ContextScope::null();
       } else {
         data->untag()->context_scope_ =
-            static_cast<ContextScopePtr>(d->ReadRef());
+            static_cast<ContextScopePtr>(d.ReadRef());
       }
-      data->untag()->parent_function_ = static_cast<FunctionPtr>(d->ReadRef());
-      data->untag()->closure_ = static_cast<ClosurePtr>(d->ReadRef());
+      data->untag()->parent_function_ = static_cast<FunctionPtr>(d.ReadRef());
+      data->untag()->closure_ = static_cast<ClosurePtr>(d.ReadRef());
       data->untag()->default_type_arguments_kind_ =
-          static_cast<ClosureData::DefaultTypeArgumentsKind>(d->ReadUnsigned());
+          static_cast<ClosureData::DefaultTypeArgumentsKind>(d.ReadUnsigned());
     }
   }
 };
@@ -1365,15 +1375,17 @@
     ReadAllocFixedSize(d, FfiTrampolineData::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      FfiTrampolineDataPtr data = static_cast<FfiTrampolineDataPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      FfiTrampolineDataPtr data = static_cast<FfiTrampolineDataPtr>(d.Ref(id));
       Deserializer::InitializeHeader(data, kFfiTrampolineDataCid,
                                      FfiTrampolineData::InstanceSize());
-      ReadFromTo(data);
+      d.ReadFromTo(data);
       data->untag()->callback_id_ =
-          d->kind() == Snapshot::kFullAOT ? d->ReadUnsigned() : 0;
+          d_->kind() == Snapshot::kFullAOT ? d.ReadUnsigned() : 0;
     }
   }
 };
@@ -1479,50 +1491,49 @@
     ReadAllocFixedSize(d, Field::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    Snapshot::Kind kind = d->kind();
-
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      FieldPtr field = static_cast<FieldPtr>(d->Ref(id));
-      Deserializer::InitializeHeader(field, kFieldCid, Field::InstanceSize());
-      ReadFromTo(field);
-      if (kind != Snapshot::kFullAOT) {
-        field->untag()->guarded_list_length_ =
-            static_cast<SmiPtr>(d->ReadRef());
-      }
-      if (kind == Snapshot::kFullJIT) {
-        field->untag()->dependent_code_ = static_cast<ArrayPtr>(d->ReadRef());
-      }
-      if (kind != Snapshot::kFullAOT) {
-        field->untag()->token_pos_ = d->ReadTokenPosition();
-        field->untag()->end_token_pos_ = d->ReadTokenPosition();
-        field->untag()->guarded_cid_ = d->ReadCid();
-        field->untag()->is_nullable_ = d->ReadCid();
-        const int8_t static_type_exactness_state = d->Read<int8_t>();
-#if defined(TARGET_ARCH_X64)
-        field->untag()->static_type_exactness_state_ =
-            static_type_exactness_state;
-#else
-        // We might produce core snapshots using X64 VM and then consume
-        // them in IA32 or ARM VM. In which case we need to simply ignore
-        // static type exactness state written into snapshot because non-X64
-        // builds don't have this feature enabled.
-        // TODO(dartbug.com/34170) Support other architectures.
-        USE(static_type_exactness_state);
-        field->untag()->static_type_exactness_state_ =
-            StaticTypeExactnessState::NotTracking().Encode();
-#endif  // defined(TARGET_ARCH_X64)
 #if !defined(DART_PRECOMPILED_RUNTIME)
-        field->untag()->kernel_offset_ = d->Read<uint32_t>();
+    Snapshot::Kind kind = d_->kind();
 #endif
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      FieldPtr field = static_cast<FieldPtr>(d.Ref(id));
+      Deserializer::InitializeHeader(field, kFieldCid, Field::InstanceSize());
+      d.ReadFromTo(field);
+#if !defined(DART_PRECOMPILED_RUNTIME)
+      ASSERT(d_->kind() != Snapshot::kFullAOT);
+      field->untag()->guarded_list_length_ = static_cast<SmiPtr>(d.ReadRef());
+      if (kind == Snapshot::kFullJIT) {
+        field->untag()->dependent_code_ = static_cast<ArrayPtr>(d.ReadRef());
       }
-      field->untag()->kind_bits_ = d->Read<uint16_t>();
+      field->untag()->token_pos_ = d.ReadTokenPosition();
+      field->untag()->end_token_pos_ = d.ReadTokenPosition();
+      field->untag()->guarded_cid_ = d.ReadCid();
+      field->untag()->is_nullable_ = d.ReadCid();
+      const int8_t static_type_exactness_state = d.Read<int8_t>();
+#if defined(TARGET_ARCH_X64)
+      field->untag()->static_type_exactness_state_ =
+          static_type_exactness_state;
+#else
+      // We might produce core snapshots using X64 VM and then consume
+      // them in IA32 or ARM VM. In which case we need to simply ignore
+      // static type exactness state written into snapshot because non-X64
+      // builds don't have this feature enabled.
+      // TODO(dartbug.com/34170) Support other architectures.
+      USE(static_type_exactness_state);
+      field->untag()->static_type_exactness_state_ =
+          StaticTypeExactnessState::NotTracking().Encode();
+#endif  // defined(TARGET_ARCH_X64)
+      field->untag()->kernel_offset_ = d.Read<uint32_t>();
+#endif
+      field->untag()->kind_bits_ = d.Read<uint16_t>();
 
-      ObjectPtr value_or_offset = d->ReadRef();
+      ObjectPtr value_or_offset = d.ReadRef();
       if (Field::StaticBit::decode(field->untag()->kind_bits_)) {
-        const intptr_t field_id = d->ReadUnsigned();
-        d->initial_field_table()->SetAt(
+        const intptr_t field_id = d.ReadUnsigned();
+        d_->initial_field_table()->SetAt(
             field_id, static_cast<InstancePtr>(value_or_offset));
         field->untag()->host_offset_or_field_id_ = Smi::New(field_id);
       } else {
@@ -1539,7 +1550,7 @@
   void PostLoad(Deserializer* d, const Array& refs, bool primary) {
     Field& field = Field::Handle(d->zone());
     if (!IsolateGroup::Current()->use_field_guards()) {
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
+      for (intptr_t i = start_index_, n = stop_index_; i < n; i++) {
         field ^= refs.At(i);
         field.set_guarded_cid_unsafe(kDynamicCid);
         field.set_is_nullable_unsafe(true);
@@ -1550,7 +1561,7 @@
             StaticTypeExactnessState::NotTracking());
       }
     } else {
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
+      for (intptr_t i = start_index_, n = stop_index_; i < n; i++) {
         field ^= refs.At(i);
         field.InitializeGuardedListLengthInObjectOffset(/*unsafe=*/true);
       }
@@ -1616,17 +1627,19 @@
     ReadAllocFixedSize(d, Script::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      ScriptPtr script = static_cast<ScriptPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      ScriptPtr script = static_cast<ScriptPtr>(d.Ref(id));
       Deserializer::InitializeHeader(script, kScriptCid,
                                      Script::InstanceSize());
-      ReadFromTo(script);
+      d.ReadFromTo(script);
 #if !defined(DART_PRECOMPILED_RUNTIME)
-      script->untag()->flags_and_max_position_ = d->Read<int32_t>();
+      script->untag()->flags_and_max_position_ = d.Read<int32_t>();
 #endif
-      script->untag()->kernel_script_index_ = d->Read<int32_t>();
+      script->untag()->kernel_script_index_ = d.Read<int32_t>();
       script->untag()->load_timestamp_ = 0;
     }
   }
@@ -1686,23 +1699,24 @@
     ReadAllocFixedSize(d, Library::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      LibraryPtr lib = static_cast<LibraryPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      LibraryPtr lib = static_cast<LibraryPtr>(d.Ref(id));
       Deserializer::InitializeHeader(lib, kLibraryCid, Library::InstanceSize());
-      ReadFromTo(lib);
+      d.ReadFromTo(lib);
       lib->untag()->native_entry_resolver_ = NULL;
       lib->untag()->native_entry_symbol_resolver_ = NULL;
-      lib->untag()->index_ = d->Read<int32_t>();
-      lib->untag()->num_imports_ = d->Read<uint16_t>();
-      lib->untag()->load_state_ = d->Read<int8_t>();
+      lib->untag()->index_ = d.Read<int32_t>();
+      lib->untag()->num_imports_ = d.Read<uint16_t>();
+      lib->untag()->load_state_ = d.Read<int8_t>();
       lib->untag()->flags_ =
-          UntaggedLibrary::InFullSnapshotBit::update(true, d->Read<uint8_t>());
+          UntaggedLibrary::InFullSnapshotBit::update(true, d.Read<uint8_t>());
 #if !defined(DART_PRECOMPILED_RUNTIME)
-      if (d->kind() != Snapshot::kFullAOT) {
-        lib->untag()->kernel_offset_ = d->Read<uint32_t>();
-      }
+      ASSERT(d_->kind() != Snapshot::kFullAOT);
+      lib->untag()->kernel_offset_ = d.Read<uint32_t>();
 #endif
     }
   }
@@ -1755,13 +1769,15 @@
     ReadAllocFixedSize(d, Namespace::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      NamespacePtr ns = static_cast<NamespacePtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      NamespacePtr ns = static_cast<NamespacePtr>(d.Ref(id));
       Deserializer::InitializeHeader(ns, kNamespaceCid,
                                      Namespace::InstanceSize());
-      ReadFromTo(ns);
+      d.ReadFromTo(ns);
     }
   }
 };
@@ -1818,21 +1834,23 @@
     ReadAllocFixedSize(d, KernelProgramInfo::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      KernelProgramInfoPtr info = static_cast<KernelProgramInfoPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      KernelProgramInfoPtr info = static_cast<KernelProgramInfoPtr>(d.Ref(id));
       Deserializer::InitializeHeader(info, kKernelProgramInfoCid,
                                      KernelProgramInfo::InstanceSize());
-      ReadFromTo(info);
-      info->untag()->kernel_binary_version_ = d->Read<uint32_t>();
+      d.ReadFromTo(info);
+      info->untag()->kernel_binary_version_ = d.Read<uint32_t>();
     }
   }
 
   void PostLoad(Deserializer* d, const Array& refs, bool primary) {
     Array& array = Array::Handle(d->zone());
     KernelProgramInfo& info = KernelProgramInfo::Handle(d->zone());
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
       info ^= refs.At(id);
       array = HashTables::New<UnorderedHashMap<SmiTraits>>(16, Heap::kOld);
       info.set_libraries_cache(array);
@@ -2273,64 +2291,71 @@
 
   void ReadFill(Deserializer* d, bool primary) {
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      ReadFill(d, id, false);
-    }
-    for (intptr_t id = deferred_start_index_; id < deferred_stop_index_; id++) {
-      ReadFill(d, id, true);
-    }
+    ReadFill(d, start_index_, stop_index_, false);
+#if defined(DART_PRECOMPILED_RUNTIME)
+    ReadFill(d, deferred_start_index_, deferred_stop_index_, true);
+#else
+    ASSERT(deferred_start_index_ == deferred_stop_index_);
+#endif
   }
 
-  void ReadFill(Deserializer* d, intptr_t id, bool deferred) {
-    auto const code = static_cast<CodePtr>(d->Ref(id));
+  void ReadFill(Deserializer* d,
+                intptr_t start_index,
+                intptr_t stop_index,
+                bool deferred) {
+    for (intptr_t id = start_index, n = stop_index; id < n; id++) {
+      auto const code = static_cast<CodePtr>(d->Ref(id));
 
-    ASSERT(!Code::IsUnknownDartCode(code));
+      ASSERT(!Code::IsUnknownDartCode(code));
 
-    Deserializer::InitializeHeader(code, kCodeCid, Code::InstanceSize(0));
-    ASSERT(!Code::IsDiscarded(code));
+      Deserializer::InitializeHeader(code, kCodeCid, Code::InstanceSize(0));
+      ASSERT(!Code::IsDiscarded(code));
 
-    d->ReadInstructions(code, deferred);
-
-    // There would be a single global pool if this is a full AOT snapshot
-    // with bare instructions.
-    if (d->kind() != Snapshot::kFullAOT) {
-      code->untag()->object_pool_ = static_cast<ObjectPoolPtr>(d->ReadRef());
-    } else {
-      code->untag()->object_pool_ = ObjectPool::null();
-    }
-    code->untag()->owner_ = d->ReadRef();
-    code->untag()->exception_handlers_ =
-        static_cast<ExceptionHandlersPtr>(d->ReadRef());
-    code->untag()->pc_descriptors_ =
-        static_cast<PcDescriptorsPtr>(d->ReadRef());
-    code->untag()->catch_entry_ = d->ReadRef();
-    if (d->kind() == Snapshot::kFullJIT) {
-      code->untag()->compressed_stackmaps_ =
-          static_cast<CompressedStackMapsPtr>(d->ReadRef());
-    } else if (d->kind() == Snapshot::kFullAOT) {
-      code->untag()->compressed_stackmaps_ = CompressedStackMaps::null();
-    }
-    code->untag()->inlined_id_to_function_ =
-        static_cast<ArrayPtr>(d->ReadRef());
-    code->untag()->code_source_map_ =
-        static_cast<CodeSourceMapPtr>(d->ReadRef());
+      d->ReadInstructions(code, deferred);
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-    if (d->kind() == Snapshot::kFullJIT) {
+      ASSERT(d->kind() == Snapshot::kFullJIT);
+      code->untag()->object_pool_ = static_cast<ObjectPoolPtr>(d->ReadRef());
+#else
+      ASSERT(d->kind() == Snapshot::kFullAOT);
+      // There is a single global pool.
+      code->untag()->object_pool_ = ObjectPool::null();
+#endif
+      code->untag()->owner_ = d->ReadRef();
+      code->untag()->exception_handlers_ =
+          static_cast<ExceptionHandlersPtr>(d->ReadRef());
+      code->untag()->pc_descriptors_ =
+          static_cast<PcDescriptorsPtr>(d->ReadRef());
+      code->untag()->catch_entry_ = d->ReadRef();
+#if !defined(DART_PRECOMPILED_RUNTIME)
+      ASSERT(d->kind() == Snapshot::kFullJIT);
+      code->untag()->compressed_stackmaps_ =
+          static_cast<CompressedStackMapsPtr>(d->ReadRef());
+#else
+      ASSERT(d->kind() == Snapshot::kFullAOT);
+      code->untag()->compressed_stackmaps_ = CompressedStackMaps::null();
+#endif
+      code->untag()->inlined_id_to_function_ =
+          static_cast<ArrayPtr>(d->ReadRef());
+      code->untag()->code_source_map_ =
+          static_cast<CodeSourceMapPtr>(d->ReadRef());
+
+#if !defined(DART_PRECOMPILED_RUNTIME)
+      ASSERT(d->kind() == Snapshot::kFullJIT);
       code->untag()->deopt_info_array_ = static_cast<ArrayPtr>(d->ReadRef());
       code->untag()->static_calls_target_table_ =
           static_cast<ArrayPtr>(d->ReadRef());
-    }
 #endif  // !DART_PRECOMPILED_RUNTIME
 
 #if !defined(PRODUCT)
-    code->untag()->return_address_metadata_ = d->ReadRef();
-    code->untag()->var_descriptors_ = LocalVarDescriptors::null();
-    code->untag()->comments_ = FLAG_code_comments
-                                   ? static_cast<ArrayPtr>(d->ReadRef())
-                                   : Array::null();
-    code->untag()->compile_timestamp_ = 0;
+      code->untag()->return_address_metadata_ = d->ReadRef();
+      code->untag()->var_descriptors_ = LocalVarDescriptors::null();
+      code->untag()->comments_ = FLAG_code_comments
+                                     ? static_cast<ArrayPtr>(d->ReadRef())
+                                     : Array::null();
+      code->untag()->compile_timestamp_ = 0;
 #endif
+    }
   }
 
   void PostLoad(Deserializer* d, const Array& refs, bool primary) {
@@ -2343,7 +2368,7 @@
 #if !defined(PRODUCT) || defined(FORCE_INCLUDE_DISASSEMBLER)
     Object& owner = Object::Handle(d->zone());
 #endif
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
       code ^= refs.At(id);
 #if !defined(DART_PRECOMPILED_RUNTIME) && !defined(PRODUCT)
       if (CodeObservers::AreActive()) {
@@ -2506,9 +2531,11 @@
     stop_index_ = d->next_index();
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    fill_position_ = d->position();
+    fill_position_ = d.Position();
 #if defined(DART_PRECOMPILED_RUNTIME)
     const uint8_t immediate_bits =
         ObjectPool::EncodeBits(ObjectPool::EntryType::kImmediate,
@@ -2521,22 +2548,22 @@
         StubCode::MegamorphicCall().MonomorphicEntryPoint();
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      const intptr_t length = d->ReadUnsigned();
-      ObjectPoolPtr pool = static_cast<ObjectPoolPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      const intptr_t length = d.ReadUnsigned();
+      ObjectPoolPtr pool = static_cast<ObjectPoolPtr>(d.Ref(id));
       Deserializer::InitializeHeader(pool, kObjectPoolCid,
                                      ObjectPool::InstanceSize(length));
       pool->untag()->length_ = length;
       for (intptr_t j = 0; j < length; j++) {
-        const uint8_t entry_bits = d->Read<uint8_t>();
+        const uint8_t entry_bits = d.Read<uint8_t>();
         pool->untag()->entry_bits()[j] = entry_bits;
         UntaggedObjectPool::Entry& entry = pool->untag()->data()[j];
         switch (ObjectPool::TypeBits::decode(entry_bits)) {
           case ObjectPool::EntryType::kTaggedObject:
-            entry.raw_obj_ = d->ReadRef();
+            entry.raw_obj_ = d.ReadRef();
             break;
           case ObjectPool::EntryType::kImmediate:
-            entry.raw_value_ = d->Read<intptr_t>();
+            entry.raw_value_ = d.Read<intptr_t>();
             break;
           case ObjectPool::EntryType::kNativeFunction: {
             // Read nothing. Initialize with the lazy link entry.
@@ -2574,7 +2601,7 @@
       auto Z = d->zone();
       ObjectPool& pool = ObjectPool::Handle(Z);
       Object& entry = Object::Handle(Z);
-      for (intptr_t id = start_index_; id < stop_index_; id++) {
+      for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
         pool ^= refs.At(id);
         const intptr_t length = d->ReadUnsigned();
         for (intptr_t j = 0; j < length; j++) {
@@ -2712,16 +2739,18 @@
     stop_index_ = d->next_index();
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      const intptr_t length = d->ReadUnsigned();
-      PcDescriptorsPtr desc = static_cast<PcDescriptorsPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      const intptr_t length = d.ReadUnsigned();
+      PcDescriptorsPtr desc = static_cast<PcDescriptorsPtr>(d.Ref(id));
       Deserializer::InitializeHeader(desc, kPcDescriptorsCid,
                                      PcDescriptors::InstanceSize(length));
       desc->untag()->length_ = length;
       uint8_t* cdata = reinterpret_cast<uint8_t*>(desc->untag()->data());
-      d->ReadBytes(cdata, length);
+      d.ReadBytes(cdata, length);
     }
   }
 };
@@ -2787,15 +2816,17 @@
     stop_index_ = d->next_index();
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      const intptr_t length = d->ReadUnsigned();
-      CodeSourceMapPtr map = static_cast<CodeSourceMapPtr>(d->Ref(id));
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      const intptr_t length = d.ReadUnsigned();
+      CodeSourceMapPtr map = static_cast<CodeSourceMapPtr>(d.Ref(id));
       Deserializer::InitializeHeader(map, kPcDescriptorsCid,
                                      CodeSourceMap::InstanceSize(length));
       map->untag()->length_ = length;
       uint8_t* cdata = reinterpret_cast<uint8_t*>(map->untag()->data());
-      d->ReadBytes(cdata, length);
+      d.ReadBytes(cdata, length);
     }
   }
 };
@@ -2865,19 +2896,21 @@
     stop_index_ = d->next_index();
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      const intptr_t flags_and_size = d->ReadUnsigned();
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      const intptr_t flags_and_size = d.ReadUnsigned();
       const intptr_t length =
           UntaggedCompressedStackMaps::SizeField::decode(flags_and_size);
       CompressedStackMapsPtr map =
-          static_cast<CompressedStackMapsPtr>(d->Ref(id));
+          static_cast<CompressedStackMapsPtr>(d.Ref(id));
       Deserializer::InitializeHeader(map, kCompressedStackMapsCid,
                                      CompressedStackMaps::InstanceSize(length));
       map->untag()->payload()->set_flags_and_size(flags_and_size);
       uint8_t* cdata =
           reinterpret_cast<uint8_t*>(map->untag()->payload()->data());
-      d->ReadBytes(cdata, length);
+      d.ReadBytes(cdata, length);
     }
   }
 };
@@ -2983,7 +3016,9 @@
     }
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     // No-op.
   }
 
@@ -3026,7 +3061,7 @@
       ExceptionHandlersPtr handlers = objects_[i];
       s->AssignRef(handlers);
       AutoTraceObject(handlers);
-      const intptr_t length = handlers->untag()->num_entries_;
+      const intptr_t length = handlers->untag()->num_entries();
       s->WriteUnsigned(length);
       target_memory_size_ +=
           compiler::target::ExceptionHandlers::InstanceSize(length);
@@ -3038,8 +3073,10 @@
     for (intptr_t i = 0; i < count; i++) {
       ExceptionHandlersPtr handlers = objects_[i];
       AutoTraceObject(handlers);
-      const intptr_t length = handlers->untag()->num_entries_;
-      s->WriteUnsigned(length);
+      const intptr_t packed_fields = handlers->untag()->packed_fields_;
+      const intptr_t length =
+          UntaggedExceptionHandlers::NumEntriesBits::decode(packed_fields);
+      s->WriteUnsigned(packed_fields);
       WriteCompressedField(handlers, handled_types_data);
       for (intptr_t j = 0; j < length; j++) {
         const ExceptionHandlerInfo& info = handlers->untag()->data()[j];
@@ -3075,24 +3112,28 @@
     stop_index_ = d->next_index();
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
       ExceptionHandlersPtr handlers =
-          static_cast<ExceptionHandlersPtr>(d->Ref(id));
-      const intptr_t length = d->ReadUnsigned();
+          static_cast<ExceptionHandlersPtr>(d.Ref(id));
+      const intptr_t packed_fields = d.ReadUnsigned();
+      const intptr_t length =
+          UntaggedExceptionHandlers::NumEntriesBits::decode(packed_fields);
       Deserializer::InitializeHeader(handlers, kExceptionHandlersCid,
                                      ExceptionHandlers::InstanceSize(length));
-      handlers->untag()->num_entries_ = length;
+      handlers->untag()->packed_fields_ = packed_fields;
       handlers->untag()->handled_types_data_ =
-          static_cast<ArrayPtr>(d->ReadRef());
+          static_cast<ArrayPtr>(d.ReadRef());
       for (intptr_t j = 0; j < length; j++) {
         ExceptionHandlerInfo& info = handlers->untag()->data()[j];
-        info.handler_pc_offset = d->Read<uint32_t>();
-        info.outer_try_index = d->Read<int16_t>();
-        info.needs_stacktrace = d->Read<int8_t>();
-        info.has_catch_all = d->Read<int8_t>();
-        info.is_generated = d->Read<int8_t>();
+        info.handler_pc_offset = d.Read<uint32_t>();
+        info.outer_try_index = d.Read<int16_t>();
+        info.needs_stacktrace = d.Read<int8_t>();
+        info.has_catch_all = d.Read<int8_t>();
+        info.is_generated = d.Read<int8_t>();
       }
     }
   }
@@ -3164,17 +3205,19 @@
     stop_index_ = d->next_index();
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      ContextPtr context = static_cast<ContextPtr>(d->Ref(id));
-      const intptr_t length = d->ReadUnsigned();
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      ContextPtr context = static_cast<ContextPtr>(d.Ref(id));
+      const intptr_t length = d.ReadUnsigned();
       Deserializer::InitializeHeader(context, kContextCid,
                                      Context::InstanceSize(length));
       context->untag()->num_variables_ = length;
-      context->untag()->parent_ = static_cast<ContextPtr>(d->ReadRef());
+      context->untag()->parent_ = static_cast<ContextPtr>(d.ReadRef());
       for (intptr_t j = 0; j < length; j++) {
-        context->untag()->data()[j] = d->ReadRef();
+        context->untag()->data()[j] = d.ReadRef();
       }
     }
   }
@@ -3244,16 +3287,18 @@
     stop_index_ = d->next_index();
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      ContextScopePtr scope = static_cast<ContextScopePtr>(d->Ref(id));
-      const intptr_t length = d->ReadUnsigned();
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      ContextScopePtr scope = static_cast<ContextScopePtr>(d.Ref(id));
+      const intptr_t length = d.ReadUnsigned();
       Deserializer::InitializeHeader(scope, kContextScopeCid,
                                      ContextScope::InstanceSize(length));
       scope->untag()->num_variables_ = length;
-      scope->untag()->is_implicit_ = d->Read<bool>();
-      ReadFromTo(scope, length);
+      scope->untag()->is_implicit_ = d.Read<bool>();
+      d.ReadFromTo(scope, length);
     }
   }
 };
@@ -3307,14 +3352,16 @@
     ReadAllocFixedSize(d, UnlinkedCall::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      UnlinkedCallPtr unlinked = static_cast<UnlinkedCallPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      UnlinkedCallPtr unlinked = static_cast<UnlinkedCallPtr>(d.Ref(id));
       Deserializer::InitializeHeader(unlinked, kUnlinkedCallCid,
                                      UnlinkedCall::InstanceSize());
-      ReadFromTo(unlinked);
-      unlinked->untag()->can_patch_to_monomorphic_ = d->Read<bool>();
+      d.ReadFromTo(unlinked);
+      unlinked->untag()->can_patch_to_monomorphic_ = d.Read<bool>();
     }
   }
 };
@@ -3371,14 +3418,16 @@
     ReadAllocFixedSize(d, ICData::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      ICDataPtr ic = static_cast<ICDataPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      ICDataPtr ic = static_cast<ICDataPtr>(d.Ref(id));
       Deserializer::InitializeHeader(ic, kICDataCid, ICData::InstanceSize());
-      ReadFromTo(ic);
-      NOT_IN_PRECOMPILED(ic->untag()->deopt_id_ = d->Read<int32_t>());
-      ic->untag()->state_bits_ = d->Read<int32_t>();
+      d.ReadFromTo(ic);
+      NOT_IN_PRECOMPILED(ic->untag()->deopt_id_ = d.Read<int32_t>());
+      ic->untag()->state_bits_ = d.Read<int32_t>();
     }
   }
 };
@@ -3433,14 +3482,16 @@
     ReadAllocFixedSize(d, MegamorphicCache::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      MegamorphicCachePtr cache = static_cast<MegamorphicCachePtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      MegamorphicCachePtr cache = static_cast<MegamorphicCachePtr>(d.Ref(id));
       Deserializer::InitializeHeader(cache, kMegamorphicCacheCid,
                                      MegamorphicCache::InstanceSize());
-      ReadFromTo(cache);
-      cache->untag()->filled_entry_count_ = d->Read<int32_t>();
+      d.ReadFromTo(cache);
+      cache->untag()->filled_entry_count_ = d.Read<int32_t>();
     }
   }
 };
@@ -3494,13 +3545,15 @@
     ReadAllocFixedSize(d, SubtypeTestCache::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      SubtypeTestCachePtr cache = static_cast<SubtypeTestCachePtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      SubtypeTestCachePtr cache = static_cast<SubtypeTestCachePtr>(d.Ref(id));
       Deserializer::InitializeHeader(cache, kSubtypeTestCacheCid,
                                      SubtypeTestCache::InstanceSize());
-      cache->untag()->cache_ = static_cast<ArrayPtr>(d->ReadRef());
+      cache->untag()->cache_ = static_cast<ArrayPtr>(d.ReadRef());
     }
   }
 };
@@ -3553,15 +3606,17 @@
     ReadAllocFixedSize(d, LoadingUnit::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      LoadingUnitPtr unit = static_cast<LoadingUnitPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      LoadingUnitPtr unit = static_cast<LoadingUnitPtr>(d.Ref(id));
       Deserializer::InitializeHeader(unit, kLoadingUnitCid,
                                      LoadingUnit::InstanceSize());
-      unit->untag()->parent_ = static_cast<LoadingUnitPtr>(d->ReadRef());
+      unit->untag()->parent_ = static_cast<LoadingUnitPtr>(d.ReadRef());
       unit->untag()->base_objects_ = Array::null();
-      unit->untag()->id_ = d->Read<int32_t>();
+      unit->untag()->id_ = d.Read<int32_t>();
       unit->untag()->loaded_ = false;
       unit->untag()->load_outstanding_ = false;
     }
@@ -3619,16 +3674,18 @@
     ReadAllocFixedSize(d, LanguageError::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      LanguageErrorPtr error = static_cast<LanguageErrorPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      LanguageErrorPtr error = static_cast<LanguageErrorPtr>(d.Ref(id));
       Deserializer::InitializeHeader(error, kLanguageErrorCid,
                                      LanguageError::InstanceSize());
-      ReadFromTo(error);
-      error->untag()->token_pos_ = d->ReadTokenPosition();
-      error->untag()->report_after_token_ = d->Read<bool>();
-      error->untag()->kind_ = d->Read<int8_t>();
+      d.ReadFromTo(error);
+      error->untag()->token_pos_ = d.ReadTokenPosition();
+      error->untag()->report_after_token_ = d.Read<bool>();
+      error->untag()->kind_ = d.Read<int8_t>();
     }
   }
 };
@@ -3682,14 +3739,16 @@
     ReadAllocFixedSize(d, UnhandledException::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
       UnhandledExceptionPtr exception =
-          static_cast<UnhandledExceptionPtr>(d->Ref(id));
+          static_cast<UnhandledExceptionPtr>(d.Ref(id));
       Deserializer::InitializeHeader(exception, kUnhandledExceptionCid,
                                      UnhandledException::InstanceSize());
-      ReadFromTo(exception);
+      d.ReadFromTo(exception);
     }
   }
 };
@@ -3807,7 +3866,7 @@
       SafepointMutexLocker ml(
           d->isolate_group()->constant_canonicalization_mutex());
       Instance& instance = Instance::Handle(d->zone());
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
+      for (intptr_t i = start_index_, n = stop_index_; i < n; i++) {
         instance ^= refs.At(i);
         instance = instance.CanonicalizeLocked(d->thread());
         refs.SetAt(i, instance);
@@ -3839,28 +3898,32 @@
     stop_index_ = d->next_index();
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    const intptr_t cid = cid_;
+    const bool mark_canonical = primary && is_canonical();
     intptr_t next_field_offset = next_field_offset_in_words_
                                  << kCompressedWordSizeLog2;
     intptr_t instance_size = Object::RoundedAllocationSize(
         instance_size_in_words_ * kCompressedWordSize);
-    const UnboxedFieldBitmap unboxed_fields_bitmap(d->ReadUnsigned64());
+    const UnboxedFieldBitmap unboxed_fields_bitmap(d.ReadUnsigned64());
 
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      InstancePtr instance = static_cast<InstancePtr>(d->Ref(id));
-      Deserializer::InitializeHeader(instance, cid_, instance_size,
-                                     primary && is_canonical());
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      InstancePtr instance = static_cast<InstancePtr>(d.Ref(id));
+      Deserializer::InitializeHeader(instance, cid, instance_size,
+                                     mark_canonical);
       intptr_t offset = Instance::NextFieldOffset();
       while (offset < next_field_offset) {
         if (unboxed_fields_bitmap.Get(offset / kCompressedWordSize)) {
           compressed_uword* p = reinterpret_cast<compressed_uword*>(
               reinterpret_cast<uword>(instance->untag()) + offset);
           // Reads 32 bits of the unboxed value at a time
-          *p = d->ReadWordWith32BitReads();
+          *p = d.ReadWordWith32BitReads();
         } else {
           CompressedObjectPtr* p = reinterpret_cast<CompressedObjectPtr*>(
               reinterpret_cast<uword>(instance->untag()) + offset);
-          *p = d->ReadRef();
+          *p = d.ReadRef();
         }
         offset += kCompressedWordSize;
       }
@@ -3930,15 +3993,17 @@
     ReadAllocFixedSize(d, LibraryPrefix::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      LibraryPrefixPtr prefix = static_cast<LibraryPrefixPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      LibraryPrefixPtr prefix = static_cast<LibraryPrefixPtr>(d.Ref(id));
       Deserializer::InitializeHeader(prefix, kLibraryPrefixCid,
                                      LibraryPrefix::InstanceSize());
-      ReadFromTo(prefix);
-      prefix->untag()->num_imports_ = d->Read<uint16_t>();
-      prefix->untag()->is_deferred_load_ = d->Read<bool>();
+      d.ReadFromTo(prefix);
+      prefix->untag()->num_imports_ = d.Read<uint16_t>();
+      prefix->untag()->is_deferred_load_ = d.Read<bool>();
     }
   }
 };
@@ -4051,16 +4116,19 @@
     BuildCanonicalSetFromLayout(d);
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      TypePtr type = static_cast<TypePtr>(d->Ref(id));
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    const bool mark_canonical = primary && is_canonical();
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      TypePtr type = static_cast<TypePtr>(d.Ref(id));
       Deserializer::InitializeHeader(type, kTypeCid, Type::InstanceSize(),
-                                     primary && is_canonical());
-      ReadFromTo(type);
+                                     mark_canonical);
+      d.ReadFromTo(type);
       COMPILE_ASSERT(
           std::is_unsigned<decltype(UntaggedType::type_class_id_)>::value);
-      type->untag()->type_class_id_ = d->ReadUnsigned();
-      const uint8_t combined = d->Read<uint8_t>();
+      type->untag()->type_class_id_ = d.ReadUnsigned();
+      const uint8_t combined = d.Read<uint8_t>();
       type->untag()->type_state_ = combined >> kNullabilityBitSize;
       type->untag()->nullability_ = combined & kNullabilityBitMask;
     }
@@ -4074,7 +4142,7 @@
       object_store->set_canonical_types(table_);
     } else if (!primary && is_canonical()) {
       AbstractType& type = AbstractType::Handle(d->zone());
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
+      for (intptr_t i = start_index_, n = stop_index_; i < n; i++) {
         type ^= refs.At(i);
         type = type.Canonicalize(d->thread(), nullptr);
         refs.SetAt(i, type);
@@ -4085,12 +4153,12 @@
     Code& stub = Code::Handle(d->zone());
 
     if (Snapshot::IncludesCode(d->kind())) {
-      for (intptr_t id = start_index_; id < stop_index_; id++) {
+      for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
         type ^= refs.At(id);
         type.UpdateTypeTestingStubEntryPoint();
       }
     } else {
-      for (intptr_t id = start_index_; id < stop_index_; id++) {
+      for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
         type ^= refs.At(id);
         stub = TypeTestingStubGenerator::DefaultCodeForType(type);
         type.InitializeTypeTestingStubNonAtomic(stub);
@@ -4178,18 +4246,20 @@
     BuildCanonicalSetFromLayout(d);
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      FunctionTypePtr type = static_cast<FunctionTypePtr>(d->Ref(id));
-      Deserializer::InitializeHeader(type, kFunctionTypeCid,
-                                     FunctionType::InstanceSize(),
-                                     primary && is_canonical());
-      ReadFromTo(type);
-      const uint8_t combined = d->Read<uint8_t>();
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    const bool mark_canonical = primary && is_canonical();
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      FunctionTypePtr type = static_cast<FunctionTypePtr>(d.Ref(id));
+      Deserializer::InitializeHeader(
+          type, kFunctionTypeCid, FunctionType::InstanceSize(), mark_canonical);
+      d.ReadFromTo(type);
+      const uint8_t combined = d.Read<uint8_t>();
       type->untag()->type_state_ = combined >> kNullabilityBitSize;
       type->untag()->nullability_ = combined & kNullabilityBitMask;
-      type->untag()->packed_parameter_counts_ = d->Read<uint32_t>();
-      type->untag()->packed_type_parameter_counts_ = d->Read<uint16_t>();
+      type->untag()->packed_parameter_counts_ = d.Read<uint32_t>();
+      type->untag()->packed_type_parameter_counts_ = d.Read<uint16_t>();
     }
   }
 
@@ -4201,7 +4271,7 @@
       object_store->set_canonical_function_types(table_);
     } else if (!primary && is_canonical()) {
       AbstractType& type = AbstractType::Handle(d->zone());
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
+      for (intptr_t i = start_index_, n = stop_index_; i < n; i++) {
         type ^= refs.At(i);
         type = type.Canonicalize(d->thread(), nullptr);
         refs.SetAt(i, type);
@@ -4212,12 +4282,12 @@
     Code& stub = Code::Handle(d->zone());
 
     if (Snapshot::IncludesCode(d->kind())) {
-      for (intptr_t id = start_index_; id < stop_index_; id++) {
+      for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
         type ^= refs.At(id);
         type.UpdateTypeTestingStubEntryPoint();
       }
     } else {
-      for (intptr_t id = start_index_; id < stop_index_; id++) {
+      for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
         type ^= refs.At(id);
         stub = TypeTestingStubGenerator::DefaultCodeForType(type);
         type.InitializeTypeTestingStubNonAtomic(stub);
@@ -4273,19 +4343,22 @@
     ReadAllocFixedSize(d, TypeRef::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      TypeRefPtr type = static_cast<TypeRefPtr>(d->Ref(id));
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    const bool mark_canonical = primary && is_canonical();
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      TypeRefPtr type = static_cast<TypeRefPtr>(d.Ref(id));
       Deserializer::InitializeHeader(type, kTypeRefCid, TypeRef::InstanceSize(),
-                                     primary && is_canonical());
-      ReadFromTo(type);
+                                     mark_canonical);
+      d.ReadFromTo(type);
     }
   }
 
   void PostLoad(Deserializer* d, const Array& refs, bool primary) {
     if (!primary && is_canonical()) {
       AbstractType& type = AbstractType::Handle(d->zone());
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
+      for (intptr_t i = start_index_, n = stop_index_; i < n; i++) {
         type ^= refs.At(i);
         type = type.Canonicalize(d->thread(), nullptr);
         refs.SetAt(i, type);
@@ -4296,12 +4369,12 @@
     Code& stub = Code::Handle(d->zone());
 
     if (Snapshot::IncludesCode(d->kind())) {
-      for (intptr_t id = start_index_; id < stop_index_; id++) {
+      for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
         type_ref ^= refs.At(id);
         type_ref.UpdateTypeTestingStubEntryPoint();
       }
     } else {
-      for (intptr_t id = start_index_; id < stop_index_; id++) {
+      for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
         type_ref ^= refs.At(id);
         stub = TypeTestingStubGenerator::DefaultCodeForType(type_ref);
         type_ref.InitializeTypeTestingStubNonAtomic(stub);
@@ -4387,17 +4460,20 @@
     BuildCanonicalSetFromLayout(d);
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      TypeParameterPtr type = static_cast<TypeParameterPtr>(d->Ref(id));
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    const bool mark_canonical = primary && is_canonical();
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      TypeParameterPtr type = static_cast<TypeParameterPtr>(d.Ref(id));
       Deserializer::InitializeHeader(type, kTypeParameterCid,
                                      TypeParameter::InstanceSize(),
-                                     primary && is_canonical());
-      ReadFromTo(type);
-      type->untag()->parameterized_class_id_ = d->Read<int32_t>();
-      type->untag()->base_ = d->Read<uint8_t>();
-      type->untag()->index_ = d->Read<uint8_t>();
-      const uint8_t combined = d->Read<uint8_t>();
+                                     mark_canonical);
+      d.ReadFromTo(type);
+      type->untag()->parameterized_class_id_ = d.Read<int32_t>();
+      type->untag()->base_ = d.Read<uint8_t>();
+      type->untag()->index_ = d.Read<uint8_t>();
+      const uint8_t combined = d.Read<uint8_t>();
       type->untag()->flags_ = combined >> kNullabilityBitSize;
       type->untag()->nullability_ = combined & kNullabilityBitMask;
     }
@@ -4411,7 +4487,7 @@
       object_store->set_canonical_type_parameters(table_);
     } else if (!primary && is_canonical()) {
       TypeParameter& type_param = TypeParameter::Handle(d->zone());
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
+      for (intptr_t i = start_index_, n = stop_index_; i < n; i++) {
         type_param ^= refs.At(i);
         type_param ^= type_param.Canonicalize(d->thread(), nullptr);
         refs.SetAt(i, type_param);
@@ -4422,12 +4498,12 @@
     Code& stub = Code::Handle(d->zone());
 
     if (Snapshot::IncludesCode(d->kind())) {
-      for (intptr_t id = start_index_; id < stop_index_; id++) {
+      for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
         type_param ^= refs.At(id);
         type_param.UpdateTypeTestingStubEntryPoint();
       }
     } else {
-      for (intptr_t id = start_index_; id < stop_index_; id++) {
+      for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
         type_param ^= refs.At(id);
         stub = TypeTestingStubGenerator::DefaultCodeForType(type_param);
         type_param.InitializeTypeTestingStubNonAtomic(stub);
@@ -4486,13 +4562,15 @@
     ReadAllocFixedSize(d, Closure::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      ClosurePtr closure = static_cast<ClosurePtr>(d->Ref(id));
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    const bool mark_canonical = primary && is_canonical();
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      ClosurePtr closure = static_cast<ClosurePtr>(d.Ref(id));
       Deserializer::InitializeHeader(closure, kClosureCid,
-                                     Closure::InstanceSize(),
-                                     primary && is_canonical());
-      ReadFromTo(closure);
+                                     Closure::InstanceSize(), mark_canonical);
+      d.ReadFromTo(closure);
 #if defined(DART_PRECOMPILED_RUNTIME)
       closure->untag()->entry_point_ = 0;
 #endif
@@ -4503,16 +4581,15 @@
   void PostLoad(Deserializer* d, const Array& refs, bool primary) {
     // We only cache the entry point in bare instructions mode (as we need
     // to load the function anyway otherwise).
-    if (d->kind() == Snapshot::kFullAOT) {
-      auto& closure = Closure::Handle(d->zone());
-      auto& func = Function::Handle(d->zone());
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
-        closure ^= refs.At(i);
-        func = closure.function();
-        uword entry_point = func.entry_point();
-        ASSERT(entry_point != 0);
-        closure.ptr()->untag()->entry_point_ = entry_point;
-      }
+    ASSERT(d->kind() == Snapshot::kFullAOT);
+    auto& closure = Closure::Handle(d->zone());
+    auto& func = Function::Handle(d->zone());
+    for (intptr_t i = start_index_, n = stop_index_; i < n; i++) {
+      closure ^= refs.At(i);
+      func = closure.function();
+      uword entry_point = func.entry_point();
+      ASSERT(entry_point != 0);
+      closure.ptr()->untag()->entry_point_ = entry_point;
     }
   }
 #endif
@@ -4579,6 +4656,7 @@
 
     start_index_ = d->next_index();
     const intptr_t count = d->ReadUnsigned();
+    const bool mark_canonical = is_canonical();
     for (intptr_t i = 0; i < count; i++) {
       int64_t value = d->Read<int64_t>();
       if (Smi::IsValid(value)) {
@@ -4587,7 +4665,7 @@
         MintPtr mint = static_cast<MintPtr>(
             old_space->AllocateSnapshot(Mint::InstanceSize()));
         Deserializer::InitializeHeader(mint, kMintCid, Mint::InstanceSize(),
-                                       is_canonical());
+                                       mark_canonical);
         mint->untag()->value_ = value;
         d->AssignRef(mint);
       }
@@ -4595,7 +4673,7 @@
     stop_index_ = d->next_index();
   }
 
-  void ReadFill(Deserializer* d, bool primary) {}
+  void ReadFill(Deserializer* d_, bool primary) { Deserializer::Local d(d_); }
 };
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -4647,12 +4725,14 @@
     ReadAllocFixedSize(d, Double::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      DoublePtr dbl = static_cast<DoublePtr>(d->Ref(id));
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+    const bool mark_canonical = primary && is_canonical();
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      DoublePtr dbl = static_cast<DoublePtr>(d.Ref(id));
       Deserializer::InitializeHeader(dbl, kDoubleCid, Double::InstanceSize(),
-                                     primary && is_canonical());
-      dbl->untag()->value_ = d->Read<double>();
+                                     mark_canonical);
+      dbl->untag()->value_ = d.Read<double>();
     }
   }
 };
@@ -4707,13 +4787,15 @@
     ReadAllocFixedSize(d, GrowableObjectArray::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
       GrowableObjectArrayPtr list =
-          static_cast<GrowableObjectArrayPtr>(d->Ref(id));
+          static_cast<GrowableObjectArrayPtr>(d.Ref(id));
       Deserializer::InitializeHeader(list, kGrowableObjectArrayCid,
                                      GrowableObjectArray::InstanceSize());
-      ReadFromTo(list);
+      d.ReadFromTo(list);
     }
   }
 };
@@ -4782,20 +4864,23 @@
     stop_index_ = d->next_index();
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
     intptr_t element_size = TypedData::ElementSizeInBytes(cid_);
 
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      TypedDataPtr data = static_cast<TypedDataPtr>(d->Ref(id));
-      const intptr_t length = d->ReadUnsigned();
+    const intptr_t cid = cid_;
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      TypedDataPtr data = static_cast<TypedDataPtr>(d.Ref(id));
+      const intptr_t length = d.ReadUnsigned();
       const intptr_t length_in_bytes = length * element_size;
-      Deserializer::InitializeHeader(data, cid_,
+      Deserializer::InitializeHeader(data, cid,
                                      TypedData::InstanceSize(length_in_bytes));
       data->untag()->length_ = Smi::New(length);
       data->untag()->RecomputeDataField();
       uint8_t* cdata = reinterpret_cast<uint8_t*>(data->untag()->data());
-      d->ReadBytes(cdata, length_in_bytes);
+      d.ReadBytes(cdata, length_in_bytes);
     }
   }
 
@@ -4852,19 +4937,22 @@
     ReadAllocFixedSize(d, TypedDataView::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    const intptr_t cid = cid_;
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      TypedDataViewPtr view = static_cast<TypedDataViewPtr>(d->Ref(id));
-      Deserializer::InitializeHeader(view, cid_, TypedDataView::InstanceSize());
-      ReadFromTo(view);
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      TypedDataViewPtr view = static_cast<TypedDataViewPtr>(d.Ref(id));
+      Deserializer::InitializeHeader(view, cid, TypedDataView::InstanceSize());
+      d.ReadFromTo(view);
     }
   }
 
   void PostLoad(Deserializer* d, const Array& refs, bool primary) {
     ASSERT(primary || !is_canonical());
     auto& view = TypedDataView::Handle(d->zone());
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
       view ^= refs.At(id);
       view.RecomputeDataField();
     }
@@ -4927,19 +5015,21 @@
     ReadAllocFixedSize(d, ExternalTypedData::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    ASSERT(!is_canonical());  // Never canonical.
-    intptr_t element_size = ExternalTypedData::ElementSizeInBytes(cid_);
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
 
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      ExternalTypedDataPtr data = static_cast<ExternalTypedDataPtr>(d->Ref(id));
-      const intptr_t length = d->ReadUnsigned();
-      Deserializer::InitializeHeader(data, cid_,
+    ASSERT(!is_canonical());  // Never canonical.
+    const intptr_t cid = cid_;
+    intptr_t element_size = ExternalTypedData::ElementSizeInBytes(cid);
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      ExternalTypedDataPtr data = static_cast<ExternalTypedDataPtr>(d.Ref(id));
+      const intptr_t length = d.ReadUnsigned();
+      Deserializer::InitializeHeader(data, cid,
                                      ExternalTypedData::InstanceSize());
       data->untag()->length_ = Smi::New(length);
-      d->Align(ExternalTypedData::kDataSerializationAlignment);
-      data->untag()->data_ = const_cast<uint8_t*>(d->CurrentBufferAddress());
-      d->Advance(length * element_size);
+      d.Align(ExternalTypedData::kDataSerializationAlignment);
+      data->untag()->data_ = const_cast<uint8_t*>(d.AddressOfCurrentPosition());
+      d.Advance(length * element_size);
       // No finalizer / external size 0.
     }
   }
@@ -4995,13 +5085,15 @@
     ReadAllocFixedSize(d, StackTrace::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      StackTracePtr trace = static_cast<StackTracePtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      StackTracePtr trace = static_cast<StackTracePtr>(d.Ref(id));
       Deserializer::InitializeHeader(trace, kStackTraceCid,
                                      StackTrace::InstanceSize());
-      ReadFromTo(trace);
+      d.ReadFromTo(trace);
     }
   }
 };
@@ -5056,16 +5148,18 @@
     ReadAllocFixedSize(d, RegExp::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      RegExpPtr regexp = static_cast<RegExpPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      RegExpPtr regexp = static_cast<RegExpPtr>(d.Ref(id));
       Deserializer::InitializeHeader(regexp, kRegExpCid,
                                      RegExp::InstanceSize());
-      ReadFromTo(regexp);
-      regexp->untag()->num_one_byte_registers_ = d->Read<int32_t>();
-      regexp->untag()->num_two_byte_registers_ = d->Read<int32_t>();
-      regexp->untag()->type_flags_ = d->Read<int8_t>();
+      d.ReadFromTo(regexp);
+      regexp->untag()->num_one_byte_registers_ = d.Read<int32_t>();
+      regexp->untag()->num_two_byte_registers_ = d.Read<int32_t>();
+      regexp->untag()->type_flags_ = d.Read<int8_t>();
     }
   }
 };
@@ -5133,13 +5227,15 @@
     ReadAllocFixedSize(d, WeakProperty::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
     ASSERT(!is_canonical());  // Never canonical.
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      WeakPropertyPtr property = static_cast<WeakPropertyPtr>(d->Ref(id));
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      WeakPropertyPtr property = static_cast<WeakPropertyPtr>(d.Ref(id));
       Deserializer::InitializeHeader(property, kWeakPropertyCid,
                                      WeakProperty::InstanceSize());
-      ReadFromTo(property);
+      d.ReadFromTo(property);
       property->untag()->next_seen_by_gc_ = WeakProperty::null();
     }
   }
@@ -5199,12 +5295,16 @@
     ReadAllocFixedSize(d, LinkedHashMap::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      LinkedHashMapPtr map = static_cast<LinkedHashMapPtr>(d->Ref(id));
-      Deserializer::InitializeHeader(map, cid_, LinkedHashMap::InstanceSize(),
-                                     primary && is_canonical());
-      ReadFromTo(map);
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    const intptr_t cid = cid_;
+    const bool mark_canonical = primary && is_canonical();
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      LinkedHashMapPtr map = static_cast<LinkedHashMapPtr>(d.Ref(id));
+      Deserializer::InitializeHeader(map, cid, LinkedHashMap::InstanceSize(),
+                                     mark_canonical);
+      d.ReadFromTo(map);
     }
   }
 
@@ -5266,12 +5366,16 @@
     ReadAllocFixedSize(d, LinkedHashSet::InstanceSize());
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      LinkedHashSetPtr set = static_cast<LinkedHashSetPtr>(d->Ref(id));
-      Deserializer::InitializeHeader(set, cid_, LinkedHashSet::InstanceSize(),
-                                     primary && is_canonical());
-      ReadFromTo(set);
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    const intptr_t cid = cid_;
+    const bool mark_canonical = primary && is_canonical();
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      LinkedHashSetPtr set = static_cast<LinkedHashSetPtr>(d.Ref(id));
+      Deserializer::InitializeHeader(set, cid, LinkedHashSet::InstanceSize(),
+                                     mark_canonical);
+      d.ReadFromTo(set);
     }
   }
 
@@ -5348,17 +5452,21 @@
     stop_index_ = d->next_index();
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      ArrayPtr array = static_cast<ArrayPtr>(d->Ref(id));
-      const intptr_t length = d->ReadUnsigned();
-      Deserializer::InitializeHeader(array, cid_, Array::InstanceSize(length),
-                                     primary && is_canonical());
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    const intptr_t cid = cid_;
+    const bool stamp_canonical = primary && is_canonical();
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      ArrayPtr array = static_cast<ArrayPtr>(d.Ref(id));
+      const intptr_t length = d.ReadUnsigned();
+      Deserializer::InitializeHeader(array, cid, Array::InstanceSize(length),
+                                     stamp_canonical);
       array->untag()->type_arguments_ =
-          static_cast<TypeArgumentsPtr>(d->ReadRef());
+          static_cast<TypeArgumentsPtr>(d.ReadRef());
       array->untag()->length_ = CompressedSmiPtr(Smi::New(length));
       for (intptr_t j = 0; j < length; j++) {
-        array->untag()->data()[j] = d->ReadRef();
+        array->untag()->data()[j] = d.ReadRef();
       }
     }
   }
@@ -5471,10 +5579,12 @@
     BuildCanonicalSetFromLayout(d);
   }
 
-  void ReadFill(Deserializer* d, bool primary) {
-    for (intptr_t id = start_index_; id < stop_index_; id++) {
-      StringPtr str = static_cast<StringPtr>(d->Ref(id));
-      const intptr_t encoded = d->ReadUnsigned();
+  void ReadFill(Deserializer* d_, bool primary) {
+    Deserializer::Local d(d_);
+
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      StringPtr str = static_cast<StringPtr>(d.Ref(id));
+      const intptr_t encoded = d.ReadUnsigned();
       intptr_t cid = 0;
       const intptr_t length = DecodeLengthAndCid(encoded, &cid);
       Deserializer::InitializeHeader(str, cid, InstanceSize(length, cid),
@@ -5483,14 +5593,14 @@
       StringHasher hasher;
       if (cid == kOneByteStringCid) {
         for (intptr_t j = 0; j < length; j++) {
-          uint8_t code_unit = d->Read<uint8_t>();
+          uint8_t code_unit = d.Read<uint8_t>();
           static_cast<OneByteStringPtr>(str)->untag()->data()[j] = code_unit;
           hasher.Add(code_unit);
         }
       } else {
         for (intptr_t j = 0; j < length; j++) {
-          uint16_t code_unit = d->Read<uint8_t>();
-          code_unit = code_unit | (d->Read<uint8_t>() << 8);
+          uint16_t code_unit = d.Read<uint8_t>();
+          code_unit = code_unit | (d.Read<uint8_t>() << 8);
           static_cast<TwoByteStringPtr>(str)->untag()->data()[j] = code_unit;
           hasher.Add(code_unit);
         }
@@ -5577,6 +5687,8 @@
                      "LocalVarDescriptors", "<empty>");
     s->AddBaseObject(Object::empty_exception_handlers().ptr(),
                      "ExceptionHandlers", "<empty>");
+    s->AddBaseObject(Object::empty_async_exception_handlers().ptr(),
+                     "ExceptionHandlers", "<empty async>");
 
     for (intptr_t i = 0; i < ArgumentsDescriptor::kCachedDescriptorCount; i++) {
       s->AddBaseObject(ArgumentsDescriptor::cached_args_descriptors_[i],
@@ -5688,6 +5800,7 @@
     d->AddBaseObject(Object::empty_descriptors().ptr());
     d->AddBaseObject(Object::empty_var_descriptors().ptr());
     d->AddBaseObject(Object::empty_exception_handlers().ptr());
+    d->AddBaseObject(Object::empty_async_exception_handlers().ptr());
 
     for (intptr_t i = 0; i < ArgumentsDescriptor::kCachedDescriptorCount; i++) {
       d->AddBaseObject(ArgumentsDescriptor::cached_args_descriptors_[i]);
@@ -8018,8 +8131,8 @@
 }
 
 void Deserializer::ReadInstructions(CodePtr code, bool deferred) {
-  if (deferred) {
 #if defined(DART_PRECOMPILED_RUNTIME)
+  if (deferred) {
     uword entry_point = StubCode::NotLoaded().EntryPoint();
     code->untag()->entry_point_ = entry_point;
     code->untag()->unchecked_entry_point_ = entry_point;
@@ -8027,12 +8140,8 @@
     code->untag()->monomorphic_unchecked_entry_point_ = entry_point;
     code->untag()->instructions_length_ = 0;
     return;
-#else
-    UNREACHABLE();
-#endif
   }
 
-#if defined(DART_PRECOMPILED_RUNTIME)
   const uword payload_start = instructions_table_.EntryPointAt(
       instructions_table_.rodata()->first_entry_with_code +
       instructions_index_);
@@ -8059,15 +8168,15 @@
   code->untag()->monomorphic_unchecked_entry_point_ =
       monomorphic_entry_point + unchecked_offset;
 #else
+  ASSERT(!deferred);
   InstructionsPtr instr = image_reader_->GetInstructionsAt(Read<uint32_t>());
   uint32_t unchecked_offset = ReadUnsigned();
   code->untag()->instructions_ = instr;
   code->untag()->unchecked_offset_ = unchecked_offset;
-  if (kind() == Snapshot::kFullJIT) {
-    const uint32_t active_offset = Read<uint32_t>();
-    instr = image_reader_->GetInstructionsAt(active_offset);
-    unchecked_offset = ReadUnsigned();
-  }
+  ASSERT(kind() == Snapshot::kFullJIT);
+  const uint32_t active_offset = Read<uint32_t>();
+  instr = image_reader_->GetInstructionsAt(active_offset);
+  unchecked_offset = ReadUnsigned();
   code->untag()->active_instructions_ = instr;
   Code::InitializeCachedEntryPointsFrom(code, instr, unchecked_offset);
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
@@ -8129,7 +8238,7 @@
 };
 
 void Deserializer::Deserialize(DeserializationRoots* roots) {
-  const void* clustered_start = CurrentBufferAddress();
+  const void* clustered_start = AddressOfCurrentPosition();
 
   Array& refs = Array::Handle(zone_);
   num_base_objects_ = ReadUnsigned();
@@ -8250,8 +8359,9 @@
   }
 
   if (isolate_group->snapshot_is_dontneed_safe()) {
-    size_t clustered_length = reinterpret_cast<uword>(CurrentBufferAddress()) -
-                              reinterpret_cast<uword>(clustered_start);
+    size_t clustered_length =
+        reinterpret_cast<uword>(AddressOfCurrentPosition()) -
+        reinterpret_cast<uword>(clustered_start);
     VirtualMemory::DontNeed(const_cast<void*>(clustered_start),
                             clustered_length);
   }
diff --git a/runtime/vm/app_snapshot.h b/runtime/vm/app_snapshot.h
index 118ca9c..0356e09 100644
--- a/runtime/vm/app_snapshot.h
+++ b/runtime/vm/app_snapshot.h
@@ -646,7 +646,7 @@
 
   intptr_t position() const { return stream_.Position(); }
   void set_position(intptr_t p) { stream_.SetPosition(p); }
-  const uint8_t* CurrentBufferAddress() const {
+  const uint8_t* AddressOfCurrentPosition() const {
     return stream_.AddressOfCurrentPosition();
   }
 
@@ -679,23 +679,6 @@
 
   ObjectPtr ReadRef() { return Ref(ReadRefId()); }
 
-  template <typename T, typename... P>
-  void ReadFromTo(T obj, P&&... params) {
-    auto* from = obj->untag()->from();
-    auto* to_snapshot = obj->untag()->to_snapshot(kind(), params...);
-    auto* to = obj->untag()->to(params...);
-    for (auto* p = from; p <= to_snapshot; p++) {
-      *p = ReadRef();
-    }
-    // This is necessary because, unlike Object::Allocate, the clustered
-    // deserializer allocates object without null-initializing them. Instead,
-    // each deserialization cluster is responsible for initializing every field,
-    // ensuring that every field is written to exactly once.
-    for (auto* p = to_snapshot + 1; p <= to; p++) {
-      *p = Object::null();
-    }
-  }
-
   TokenPosition ReadTokenPosition() {
     return TokenPosition::Deserialize(Read<int32_t>());
   }
@@ -726,7 +709,13 @@
   intptr_t next_index() const { return next_ref_index_; }
   Heap* heap() const { return heap_; }
   Zone* zone() const { return zone_; }
-  Snapshot::Kind kind() const { return kind_; }
+  Snapshot::Kind kind() const {
+#if defined(DART_PRECOMPILED_RUNTIME)
+    return Snapshot::kFullAOT;
+#else
+    return kind_;
+#endif
+  }
   FieldTable* initial_field_table() const { return initial_field_table_; }
   bool is_non_root_unit() const { return is_non_root_unit_; }
   void set_code_start_index(intptr_t value) { code_start_index_ = value; }
@@ -738,6 +727,74 @@
   }
   intptr_t num_base_objects() const { return num_base_objects_; }
 
+  // This serves to make the snapshot cursor, ref table and null be locals
+  // during ReadFill, which allows the C compiler to see they are not aliased
+  // and can be kept in registers.
+  class Local : public ReadStream {
+   public:
+    explicit Local(Deserializer* d)
+        : ReadStream(d->stream_.buffer_, d->stream_.current_, d->stream_.end_),
+          d_(d),
+          refs_(d->refs_),
+          null_(Object::null()) {
+#if defined(DEBUG)
+      // Can't mix use of Deserializer::Read*.
+      d->stream_.current_ = nullptr;
+#endif
+    }
+    ~Local() {
+      d_->stream_.current_ = current_;
+    }
+
+    ObjectPtr Ref(intptr_t index) const {
+      ASSERT(index > 0);
+      ASSERT(index <= d_->num_objects_);
+      return refs_->untag()->element(index);
+    }
+
+    template <typename T>
+    T Read() {
+      return ReadStream::Raw<sizeof(T), T>::Read(this);
+    }
+    uint64_t ReadUnsigned64() {
+      return ReadUnsigned<uint64_t>();
+    }
+
+    ObjectPtr ReadRef() {
+      return Ref(ReadRefId());
+    }
+    TokenPosition ReadTokenPosition() {
+      return TokenPosition::Deserialize(Read<int32_t>());
+    }
+
+    intptr_t ReadCid() {
+      COMPILE_ASSERT(UntaggedObject::kClassIdTagSize <= 32);
+      return Read<int32_t>();
+    }
+
+    template <typename T, typename... P>
+    void ReadFromTo(T obj, P&&... params) {
+      auto* from = obj->untag()->from();
+      auto* to_snapshot = obj->untag()->to_snapshot(d_->kind(), params...);
+      auto* to = obj->untag()->to(params...);
+      for (auto* p = from; p <= to_snapshot; p++) {
+        *p = ReadRef();
+      }
+      // This is necessary because, unlike Object::Allocate, the clustered
+      // deserializer allocates object without null-initializing them. Instead,
+      // each deserialization cluster is responsible for initializing every
+      // field, ensuring that every field is written to exactly once.
+      for (auto* p = to_snapshot + 1; p <= to; p++) {
+        *p = null_;
+      }
+    }
+
+   private:
+    Deserializer* const d_;
+    const ArrayPtr refs_;
+    const ObjectPtr null_;
+  };
+
  private:
   Heap* heap_;
   Zone* zone_;
@@ -758,8 +815,6 @@
   InstructionsTable& instructions_table_;
 };
 
-#define ReadFromTo(obj, ...) d->ReadFromTo(obj, ##__VA_ARGS__);
-
 class FullSnapshotWriter {
  public:
   static const intptr_t kInitialSize = 64 * KB;
diff --git a/runtime/vm/class_id.h b/runtime/vm/class_id.h
index 7d764c7..311fd12 100644
--- a/runtime/vm/class_id.h
+++ b/runtime/vm/class_id.h
@@ -95,6 +95,7 @@
   V(ReceivePort)                                                               \
   V(SendPort)                                                                  \
   V(StackTrace)                                                                \
+  V(SuspendState)                                                              \
   V(RegExp)                                                                    \
   V(WeakProperty)                                                              \
   V(WeakReference)                                                             \
diff --git a/runtime/vm/code_descriptors.cc b/runtime/vm/code_descriptors.cc
index 87625f3..9d13919 100644
--- a/runtime/vm/code_descriptors.cc
+++ b/runtime/vm/code_descriptors.cc
@@ -125,10 +125,12 @@
     uword entry_point) const {
   intptr_t num_handlers = Length();
   if (num_handlers == 0) {
-    return Object::empty_exception_handlers().ptr();
+    return has_async_handler_ ? Object::empty_async_exception_handlers().ptr()
+                              : Object::empty_exception_handlers().ptr();
   }
   const ExceptionHandlers& handlers =
       ExceptionHandlers::Handle(ExceptionHandlers::New(num_handlers));
+  handlers.set_has_async_handler(has_async_handler_);
   for (intptr_t i = 0; i < num_handlers; i++) {
     // Assert that every element in the array has been initialized.
     if (list_[i].handler_types == NULL) {
diff --git a/runtime/vm/code_descriptors.h b/runtime/vm/code_descriptors.h
index bd0d358..9251781 100644
--- a/runtime/vm/code_descriptors.h
+++ b/runtime/vm/code_descriptors.h
@@ -76,7 +76,8 @@
     bool needs_stacktrace;
   };
 
-  ExceptionHandlerList() : list_() {}
+  explicit ExceptionHandlerList(const Function& function)
+      : list_(), has_async_handler_(function.IsCompactAsyncFunction()) {}
 
   intptr_t Length() const { return list_.length(); }
 
@@ -137,6 +138,7 @@
 
  private:
   GrowableArray<struct HandlerDesc> list_;
+  const bool has_async_handler_;
   DISALLOW_COPY_AND_ASSIGN(ExceptionHandlerList);
 };
 
diff --git a/runtime/vm/compiler/aot/dispatch_table_generator.cc b/runtime/vm/compiler/aot/dispatch_table_generator.cc
index 42a8d8a..bb5faac 100644
--- a/runtime/vm/compiler/aot/dispatch_table_generator.cc
+++ b/runtime/vm/compiler/aot/dispatch_table_generator.cc
@@ -453,7 +453,7 @@
           if (function.IsDynamicFunction(/*allow_abstract=*/false)) {
             const bool on_null_interface = klass.IsObjectClass();
             const bool requires_args_descriptor =
-                function.IsGeneric() || function.HasOptionalParameters();
+                function.PrologueNeedsArgumentsDescriptor();
             // Get assigned selector ID for this function.
             const int32_t sid = selector_map_.SelectorId(function);
             if (sid == SelectorMap::kInvalidSelectorId) {
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 36fd740..b58ff26 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -2266,10 +2266,6 @@
         }
       }
       if (retained_functions.Length() > 0) {
-        // Last entry must be null.
-        retained_functions.Add(Object::null_object());
-        retained_functions.Add(Object::null_object());
-        retained_functions.Add(Object::null_object());
         functions = Array::MakeFixedLength(retained_functions);
       } else {
         functions = Object::empty_array().ptr();
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm.cc b/runtime/vm/compiler/asm_intrinsifier_arm.cc
index 3b6b707..c45f72f 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm.cc
@@ -1592,8 +1592,7 @@
   __ cmp(length_reg, Operand(0));
   __ b(failure, LT);
 
-  NOT_IN_PRODUCT(__ LoadAllocationStatsAddress(R0, cid));
-  NOT_IN_PRODUCT(__ MaybeTraceAllocation(R0, failure));
+  NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, failure, R0));
   __ mov(R8, Operand(length_reg));  // Save the length register.
   if (cid == kOneByteStringCid) {
     __ SmiUntag(length_reg);
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm64.cc b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
index eb0477e..7d0fb15 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
@@ -1819,7 +1819,7 @@
   // negative length: call to runtime to produce error.
   __ tbnz(failure, length_reg, compiler::target::kBitsPerWord - 1);
 
-  NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, R0, failure));
+  NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, failure, R0));
   __ mov(R6, length_reg);  // Save the length register.
   if (cid == kOneByteStringCid) {
     // Untag length.
diff --git a/runtime/vm/compiler/asm_intrinsifier_ia32.cc b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
index 815a2e0..fce0555 100644
--- a/runtime/vm/compiler/asm_intrinsifier_ia32.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
@@ -1626,8 +1626,7 @@
   __ cmpl(length_reg, Immediate(0));
   __ j(LESS, failure);
 
-  NOT_IN_PRODUCT(
-      __ MaybeTraceAllocation(cid, EAX, failure, Assembler::kFarJump));
+  NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, failure, EAX));
   if (length_reg != EDI) {
     __ movl(EDI, length_reg);
   }
diff --git a/runtime/vm/compiler/asm_intrinsifier_riscv.cc b/runtime/vm/compiler/asm_intrinsifier_riscv.cc
index 39cfdf9..eefc6ef 100644
--- a/runtime/vm/compiler/asm_intrinsifier_riscv.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_riscv.cc
@@ -1510,7 +1510,7 @@
   // negative length: call to runtime to produce error.
   __ bltz(length_reg, failure);
 
-  NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, TMP, failure));
+  NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, failure, TMP));
   __ mv(T0, length_reg);  // Save the length register.
   if (cid == kOneByteStringCid) {
     // Untag length.
diff --git a/runtime/vm/compiler/asm_intrinsifier_x64.cc b/runtime/vm/compiler/asm_intrinsifier_x64.cc
index 4abdfe1..bbdc515 100644
--- a/runtime/vm/compiler/asm_intrinsifier_x64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_x64.cc
@@ -1702,7 +1702,7 @@
   __ cmpq(length_reg, Immediate(0));
   __ j(LESS, failure);
 
-  NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, failure, Assembler::kFarJump));
+  NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, failure));
   if (length_reg != RDI) {
     __ movq(RDI, length_reg);
   }
diff --git a/runtime/vm/compiler/assembler/assembler_arm.cc b/runtime/vm/compiler/assembler/assembler_arm.cc
index bca236c..c56be1c 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm.cc
@@ -3161,6 +3161,19 @@
   }
 }
 
+void Assembler::OrImmediate(Register rd,
+                            Register rs,
+                            int32_t imm,
+                            Condition cond) {
+  Operand o;
+  if (Operand::CanHold(imm, &o)) {
+    orr(rd, rs, Operand(o), cond);
+  } else {
+    LoadImmediate(TMP, imm, cond);
+    orr(rd, rs, Operand(TMP), cond);
+  }
+}
+
 void Assembler::CompareImmediate(Register rn, int32_t value, Condition cond) {
   Operand o;
   if (Operand::CanHold(value, &o)) {
@@ -3516,6 +3529,14 @@
   b(trace, NE);
 }
 
+void Assembler::MaybeTraceAllocation(intptr_t cid,
+                                     Label* trace,
+                                     Register temp_reg,
+                                     JumpDistance distance) {
+  LoadAllocationStatsAddress(temp_reg, cid);
+  MaybeTraceAllocation(temp_reg, trace);
+}
+
 void Assembler::LoadAllocationStatsAddress(Register dest, intptr_t cid) {
   ASSERT(dest != kNoRegister);
   ASSERT(dest != TMP);
@@ -3623,6 +3644,21 @@
   }
 }
 
+void Assembler::CopyMemoryWords(Register src,
+                                Register dst,
+                                Register size,
+                                Register temp) {
+  Label loop, done;
+  __ cmp(size, Operand(0));
+  __ b(&done, EQUAL);
+  __ Bind(&loop);
+  __ ldr(temp, Address(src, target::kWordSize, Address::PostIndex));
+  __ str(temp, Address(dst, target::kWordSize, Address::PostIndex));
+  __ subs(size, size, Operand(target::kWordSize));
+  __ b(&loop, NOT_ZERO);
+  __ Bind(&done);
+}
+
 void Assembler::GenerateUnRelocatedPcRelativeCall(Condition cond,
                                                   intptr_t offset_into_target) {
   // Emit "blr.cond <offset>".
diff --git a/runtime/vm/compiler/assembler/assembler_arm.h b/runtime/vm/compiler/assembler/assembler_arm.h
index 2f2f1fb..f7f856e 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.h
+++ b/runtime/vm/compiler/assembler/assembler_arm.h
@@ -385,6 +385,8 @@
   void Bind(Label* label);
   // Unconditional jump to a given label. [distance] is ignored on ARM.
   void Jump(Label* label, JumpDistance distance = kFarJump) { b(label); }
+  // Unconditional jump to a given address in register.
+  void Jump(Register target) { bx(target); }
   // Unconditional jump to a given address in memory.
   void Jump(const Address& address) { Branch(address); }
 
@@ -415,9 +417,6 @@
     // We don't run TSAN bots on 32 bit.
   }
 
-  void CompareWithFieldValue(Register value, FieldAddress address) {
-    CompareWithMemoryValue(value, address);
-  }
   void CompareWithCompressedFieldFromOffset(Register value,
                                             Register base,
                                             int32_t offset) {
@@ -818,6 +817,9 @@
                             Register rn,
                             int32_t value,
                             Condition cond = AL);
+  void AddRegisters(Register dest, Register src) {
+    add(dest, dest, Operand(src));
+  }
   void SubImmediate(Register rd,
                     Register rn,
                     int32_t value,
@@ -826,7 +828,24 @@
                             Register rn,
                             int32_t value,
                             Condition cond = AL);
+  void SubRegisters(Register dest, Register src) {
+    sub(dest, dest, Operand(src));
+  }
   void AndImmediate(Register rd, Register rs, int32_t imm, Condition cond = AL);
+  void AndImmediate(Register rd, int32_t imm, Condition cond = AL) {
+    AndImmediate(rd, rd, imm, cond);
+  }
+  void OrImmediate(Register rd, Register rs, int32_t imm, Condition cond = AL);
+  void OrImmediate(Register rd, int32_t imm, Condition cond = AL) {
+    OrImmediate(rd, rd, imm, cond);
+  }
+  void LslImmediate(Register rd, Register rn, int32_t shift) {
+    ASSERT((shift >= 0) && (shift < kBitsPerInt32));
+    Lsl(rd, rn, Operand(shift));
+  }
+  void LslImmediate(Register rd, int32_t shift) {
+    LslImmediate(rd, rd, shift);
+  }
 
   // Test rn and immediate. May clobber IP.
   void TestImmediate(Register rn, int32_t imm, Condition cond = AL);
@@ -1051,6 +1070,10 @@
                           Condition cond = AL) {
     StoreToOffset(reg, base, offset - kHeapObjectTag, type, cond);
   }
+  void StoreZero(const Address& address, Register temp) {
+    mov(temp, Operand(0));
+    str(temp, address);
+  }
   void LoadSFromOffset(SRegister reg,
                        Register base,
                        int32_t offset,
@@ -1137,6 +1160,14 @@
     cmp(rn, Operand(0));
     b(label, ZERO);
   }
+  void BranchIfBit(Register rn,
+                   intptr_t bit_number,
+                   Condition condition,
+                   Label* label,
+                   JumpDistance distance = kFarJump) {
+    tst(rn, Operand(1 << bit_number));
+    b(label, condition);
+  }
 
   void MoveRegister(Register rd, Register rm, Condition cond) {
     ExtendValue(rd, rm, kFourBytes, cond);
@@ -1368,6 +1399,13 @@
   // which will allocate in the runtime where tracing occurs.
   void MaybeTraceAllocation(Register stats_addr_reg, Label* trace);
 
+  // If allocation tracing for |cid| is enabled, will jump to |trace| label,
+  // which will allocate in the runtime where tracing occurs.
+  void MaybeTraceAllocation(intptr_t cid,
+                            Label* trace,
+                            Register temp_reg,
+                            JumpDistance distance = JumpDistance::kFarJump);
+
   void TryAllocateObject(intptr_t cid,
                          intptr_t instance_size,
                          Label* failure,
@@ -1383,6 +1421,14 @@
                         Register temp1,
                         Register temp2);
 
+  // Copy [size] bytes from [src] address to [dst] address.
+  // [size] should be a multiple of word size.
+  // Clobbers [src], [dst], [size] and [temp] registers.
+  void CopyMemoryWords(Register src,
+                       Register dst,
+                       Register size,
+                       Register temp);
+
   // This emits an PC-relative call of the form "blr.<cond> <offset>".  The
   // offset is not yet known and needs therefore relocation to the right place
   // before the code can be used.
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index 8f0e2ee..efdeb2d 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -1998,8 +1998,9 @@
 
 #ifndef PRODUCT
 void Assembler::MaybeTraceAllocation(intptr_t cid,
+                                     Label* trace,
                                      Register temp_reg,
-                                     Label* trace) {
+                                     JumpDistance distance) {
   ASSERT(cid > 0);
 
   const intptr_t shared_table_offset =
@@ -2034,7 +2035,7 @@
     // If this allocation is traced, program will jump to failure path
     // (i.e. the allocation stub) which will allocate the object and trace the
     // allocation call site.
-    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, temp_reg, failure));
+    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, failure, temp_reg));
     RELEASE_ASSERT((target::Thread::top_offset() + target::kWordSize) ==
                    target::Thread::end_offset());
     ldp(instance_reg, temp_reg,
@@ -2076,7 +2077,7 @@
     // If this allocation is traced, program will jump to failure path
     // (i.e. the allocation stub) which will allocate the object and trace the
     // allocation call site.
-    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, temp1, failure));
+    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, failure, temp1));
     // Potential new object start.
     ldr(instance, Address(THR, target::Thread::top_offset()));
     AddImmediateSetFlags(end_address, instance, instance_size);
@@ -2105,6 +2106,20 @@
   }
 }
 
+void Assembler::CopyMemoryWords(Register src,
+                                Register dst,
+                                Register size,
+                                Register temp) {
+  Label loop, done;
+  __ cbz(&done, size);
+  __ Bind(&loop);
+  __ ldr(temp, Address(src, target::kWordSize, Address::PostIndex));
+  __ str(temp, Address(dst, target::kWordSize, Address::PostIndex));
+  __ subs(size, size, Operand(target::kWordSize));
+  __ b(&loop, NOT_ZERO);
+  __ Bind(&done);
+}
+
 void Assembler::GenerateUnRelocatedPcRelativeCall(intptr_t offset_into_target) {
   // Emit "bl <offset>".
   EmitUnconditionalBranchOp(BL, 0);
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index 4cd2832..980c22c 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -545,6 +545,8 @@
   void Bind(Label* label);
   // Unconditional jump to a given label. [distance] is ignored on ARM.
   void Jump(Label* label, JumpDistance distance = kFarJump) { b(label); }
+  // Unconditional jump to a given address in register.
+  void Jump(Register target) { br(target); }
   // Unconditional jump to a given address in memory. Clobbers TMP.
   void Jump(const Address& address) {
     ldr(TMP, address);
@@ -629,9 +631,6 @@
 #endif
   }
 
-  void CompareWithFieldValue(Register value, FieldAddress address) {
-    CompareWithMemoryValue(value, address);
-  }
   void CompareWithCompressedFieldFromOffset(Register value,
                                             Register base,
                                             int32_t offset) {
@@ -1260,6 +1259,19 @@
                     JumpDistance distance = kFarJump) {
     cbz(label, rn);
   }
+  void BranchIfBit(Register rn,
+                   intptr_t bit_number,
+                   Condition condition,
+                   Label* label,
+                   JumpDistance distance = kFarJump) {
+    if (condition == ZERO) {
+      tbz(label, rn, bit_number);
+    } else if (condition == NOT_ZERO) {
+      tbnz(label, rn, bit_number);
+    } else {
+      UNREACHABLE();
+    }
+  }
 
   void cbz(Label* label, Register rt, OperandSize sz = kEightBytes) {
     EmitCompareAndBranch(CBZ, rt, label, sz);
@@ -1676,13 +1688,16 @@
 
   void LslImmediate(Register rd,
                     Register rn,
-                    int shift,
+                    int32_t shift,
                     OperandSize sz = kEightBytes) {
-    const int reg_size =
+    const int32_t reg_size =
         (sz == kEightBytes) ? kXRegSizeInBits : kWRegSizeInBits;
     ASSERT((shift >= 0) && (shift < reg_size));
     ubfm(rd, rn, (reg_size - shift) % reg_size, reg_size - shift - 1, sz);
   }
+  void LslImmediate(Register rd, int32_t shift, OperandSize sz = kEightBytes) {
+    LslImmediate(rd, rd, shift, sz);
+  }
   void LsrImmediate(Register rd,
                     Register rn,
                     int shift,
@@ -1792,18 +1807,30 @@
                             Register rn,
                             int64_t imm,
                             OperandSize sz = kEightBytes);
+  void AddRegisters(Register dest, Register src) {
+    add(dest, dest, Operand(src));
+  }
   void SubImmediateSetFlags(Register dest,
                             Register rn,
                             int64_t imm,
                             OperandSize sz = kEightBytes);
+  void SubRegisters(Register dest, Register src) {
+    sub(dest, dest, Operand(src));
+  }
   void AndImmediate(Register rd,
                     Register rn,
                     int64_t imm,
                     OperandSize sz = kEightBytes);
+  void AndImmediate(Register rd, int64_t imm) {
+    AndImmediate(rd, rd, imm);
+  }
   void OrImmediate(Register rd,
                    Register rn,
                    int64_t imm,
                    OperandSize sz = kEightBytes);
+  void OrImmediate(Register rd, int64_t imm) {
+    OrImmediate(rd, rd, imm);
+  }
   void XorImmediate(Register rd,
                     Register rn,
                     int64_t imm,
@@ -1884,6 +1911,9 @@
                           OperandSize sz = kEightBytes) {
     StoreToOffset(src, base, offset - kHeapObjectTag, sz);
   }
+  void StoreZero(const Address& address, Register temp = kNoRegister) {
+    str(ZR, address);
+  }
 
   void StoreSToOffset(VRegister src, Register base, int32_t offset);
   void StoreDToOffset(VRegister src, Register base, int32_t offset);
@@ -2123,7 +2153,10 @@
 
   // If allocation tracing for |cid| is enabled, will jump to |trace| label,
   // which will allocate in the runtime where tracing occurs.
-  void MaybeTraceAllocation(intptr_t cid, Register temp_reg, Label* trace);
+  void MaybeTraceAllocation(intptr_t cid,
+                            Label* trace,
+                            Register temp_reg,
+                            JumpDistance distance = JumpDistance::kFarJump);
 
   void TryAllocateObject(intptr_t cid,
                          intptr_t instance_size,
@@ -2140,6 +2173,14 @@
                         Register temp1,
                         Register temp2);
 
+  // Copy [size] bytes from [src] address to [dst] address.
+  // [size] should be a multiple of word size.
+  // Clobbers [src], [dst], [size] and [temp] registers.
+  void CopyMemoryWords(Register src,
+                       Register dst,
+                       Register size,
+                       Register temp);
+
   // This emits an PC-relative call of the form "bl <offset>".  The offset
   // is not yet known and needs therefore relocation to the right place before
   // the code can be used.
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.cc b/runtime/vm/compiler/assembler/assembler_ia32.cc
index 05d3863..e004bb5 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.cc
+++ b/runtime/vm/compiler/assembler/assembler_ia32.cc
@@ -320,7 +320,7 @@
   EmitUint8(0xA5);
 }
 
-void Assembler::rep_movsl() {
+void Assembler::rep_movsd() {
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitUint8(0xF3);
   EmitUint8(0xA5);
@@ -1889,6 +1889,18 @@
   }
 }
 
+void Assembler::AddImmediate(Register dest, Register src, int32_t value) {
+  if (dest == src) {
+    AddImmediate(dest, value);
+    return;
+  }
+  if (value == 0) {
+    MoveRegister(dest, src);
+    return;
+  }
+  leal(dest, Address(src, value));
+}
+
 void Assembler::SubImmediate(Register reg, const Immediate& imm) {
   const intptr_t value = imm.value();
   if (value == 0) {
@@ -2598,8 +2610,8 @@
 
 #ifndef PRODUCT
 void Assembler::MaybeTraceAllocation(intptr_t cid,
-                                     Register temp_reg,
                                      Label* trace,
+                                     Register temp_reg,
                                      JumpDistance distance) {
   ASSERT(cid > 0);
   Address state_address(kNoRegister, 0);
@@ -2636,7 +2648,7 @@
     // If this allocation is traced, program will jump to failure path
     // (i.e. the allocation stub) which will allocate the object and trace the
     // allocation call site.
-    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, temp_reg, failure, distance));
+    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, failure, temp_reg, distance));
     movl(instance_reg, Address(THR, target::Thread::top_offset()));
     addl(instance_reg, Immediate(instance_size));
     // instance_reg: potential next object start.
@@ -2669,7 +2681,7 @@
     // If this allocation is traced, program will jump to failure path
     // (i.e. the allocation stub) which will allocate the object and trace the
     // allocation call site.
-    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, temp_reg, failure, distance));
+    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, failure, temp_reg, distance));
     movl(instance, Address(THR, target::Thread::top_offset()));
     movl(end_address, instance);
 
@@ -2696,6 +2708,17 @@
   }
 }
 
+void Assembler::CopyMemoryWords(Register src,
+                                Register dst,
+                                Register size,
+                                Register temp) {
+  RELEASE_ASSERT(src == ESI);
+  RELEASE_ASSERT(dst == EDI);
+  RELEASE_ASSERT(size == ECX);
+  shrl(size, Immediate(target::kWordSizeLog2));
+  rep_movsd();
+}
+
 void Assembler::PushCodeObject() {
   ASSERT(IsNotTemporaryScopedHandle(code_));
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
@@ -2713,6 +2736,10 @@
   }
 }
 
+void Assembler::LeaveDartFrame() {
+  LeaveFrame();
+}
+
 // On entry to a function compiled for OSR, the caller's frame pointer, the
 // stack locals, and any copied parameters are already in place.  The frame
 // pointer is already set up. There may be extra space for spill slots to
@@ -2734,7 +2761,7 @@
 }
 
 void Assembler::LeaveStubFrame() {
-  LeaveFrame();
+  LeaveDartFrame();
 }
 
 void Assembler::EnterCFrame(intptr_t frame_space) {
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.h b/runtime/vm/compiler/assembler/assembler_ia32.h
index 8cee67d..bc35841 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.h
+++ b/runtime/vm/compiler/assembler/assembler_ia32.h
@@ -297,7 +297,7 @@
 
   void rep_movsb();
   void rep_movsw();
-  void rep_movsl();
+  void rep_movsd();
 
   void movss(XmmRegister dst, const Address& src);
   void movss(const Address& dst, XmmRegister src);
@@ -587,6 +587,14 @@
     cmpl(src, Immediate(0));
     j(ZERO, label, distance);
   }
+  void BranchIfBit(Register rn,
+                   intptr_t bit_number,
+                   Condition condition,
+                   Label* label,
+                   JumpDistance distance = kFarJump) {
+    testl(rn, Immediate(1 << bit_number));
+    j(condition, label, distance);
+  }
 
   // Arch-specific LoadFromOffset to choose the right operation for [sz].
   void LoadFromOffset(Register dst,
@@ -645,6 +653,9 @@
                           OperandSize sz = kFourBytes) {
     StoreToOffset(src, FieldAddress(base, offset), sz);
   }
+  void StoreZero(const Address& address, Register temp = kNoRegister) {
+    movl(address, Immediate(0));
+  }
   void LoadFromStack(Register dst, intptr_t depth);
   void StoreToStack(Register src, intptr_t depth);
   void CompareToStack(Register src, intptr_t depth);
@@ -682,6 +693,10 @@
     // We don't run TSAN on 32 bit systems.
   }
 
+  void CompareWithMemoryValue(Register value, Address address) {
+    cmpl(value, address);
+  }
+
   void ExtendValue(Register to, Register from, OperandSize sz) override;
   void PushRegister(Register r);
   void PopRegister(Register r);
@@ -699,7 +714,24 @@
   void AddImmediate(Register reg, int32_t value) {
     AddImmediate(reg, Immediate(value));
   }
+  void AddImmediate(Register dest, Register src, int32_t value);
+  void AddRegisters(Register dest, Register src) {
+    addl(dest, src);
+  }
+
   void SubImmediate(Register reg, const Immediate& imm);
+  void SubRegisters(Register dest, Register src) {
+    subl(dest, src);
+  }
+  void AndImmediate(Register dst, int32_t value) {
+    andl(dst, Immediate(value));
+  }
+  void OrImmediate(Register dst, int32_t value) {
+    orl(dst, Immediate(value));
+  }
+  void LslImmediate(Register dst, int32_t shift) {
+    shll(dst, Immediate(shift));
+  }
 
   void CompareImmediate(Register reg, int32_t immediate) {
     cmpl(reg, Immediate(immediate));
@@ -934,6 +966,10 @@
   void Jump(Label* label, JumpDistance distance = kFarJump) {
     jmp(label, distance);
   }
+  // Unconditional jump to a given address in register.
+  void Jump(Register target) {
+    jmp(target);
+  }
 
   // Moves one word from the memory at [from] to the memory at [to].
   // Needs a temporary register.
@@ -956,6 +992,7 @@
   //   L: <code to adjust saved pc if there is any intrinsification code>
   //   .....
   void EnterDartFrame(intptr_t frame_size);
+  void LeaveDartFrame();
 
   // Set up a Dart frame for a function compiled for on-stack replacement.
   // The frame layout is a normal Dart frame, but the frame is partially set
@@ -1002,9 +1039,9 @@
   // If allocation tracing for |cid| is enabled, will jump to |trace| label,
   // which will allocate in the runtime where tracing occurs.
   void MaybeTraceAllocation(intptr_t cid,
-                            Register temp_reg,
                             Label* trace,
-                            JumpDistance distance);
+                            Register temp_reg,
+                            JumpDistance distance = JumpDistance::kFarJump);
 
   void TryAllocateObject(intptr_t cid,
                          intptr_t instance_size,
@@ -1021,6 +1058,16 @@
                         Register end_address,
                         Register temp);
 
+  // Copy [size] bytes from [src] address to [dst] address.
+  // [size] should be a multiple of word size.
+  // Clobbers [src], [dst], [size] and [temp] registers.
+  // IA32 requires fixed registers for memory copying:
+  // [src] = ESI, [dst] = EDI, [size] = ECX.
+  void CopyMemoryWords(Register src,
+                       Register dst,
+                       Register size,
+                       Register temp = kNoRegister);
+
   // Debugging and bringup support.
   void Breakpoint() override { int3(); }
 
diff --git a/runtime/vm/compiler/assembler/assembler_ia32_test.cc b/runtime/vm/compiler/assembler/assembler_ia32_test.cc
index e89073d..715d5bb 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_ia32_test.cc
@@ -4821,7 +4821,7 @@
   __ movl(ESI, Address(ESP, 4 * target::kWordSize));  // from.
   __ movl(EDI, Address(ESP, 5 * target::kWordSize));  // to.
   __ movl(ECX, Address(ESP, 6 * target::kWordSize));  // count.
-  __ rep_movsl();
+  __ rep_movsd();
   __ popl(ECX);
   __ popl(EDI);
   __ popl(ESI);
diff --git a/runtime/vm/compiler/assembler/assembler_riscv.cc b/runtime/vm/compiler/assembler/assembler_riscv.cc
index cc1c65b..b9bf437 100644
--- a/runtime/vm/compiler/assembler/assembler_riscv.cc
+++ b/runtime/vm/compiler/assembler/assembler_riscv.cc
@@ -2373,10 +2373,9 @@
   UNIMPLEMENTED();
 }
 
-void Assembler::CompareWithMemoryValue(Register value,
-                                       Address address,
-                                       OperandSize sz) {
-  UNIMPLEMENTED();
+void Assembler::CompareWithMemoryValue(Register value, Address address) {
+  lx(TMP2, address);
+  CompareRegisters(value, TMP2);
 }
 
 void Assembler::CompareFunctionTypeNullabilityWith(Register type,
@@ -2648,6 +2647,22 @@
   beqz(rn, label, distance);
 }
 
+void Assembler::BranchIfBit(Register rn,
+                            intptr_t bit_number,
+                            Condition condition,
+                            Label* label,
+                            JumpDistance distance) {
+  ASSERT(rn != TMP2);
+  andi(TMP2, rn, 1 << bit_number);
+  if (condition == ZERO) {
+    beqz(TMP2, label, distance);
+  } else if (condition == NOT_ZERO) {
+    bnez(TMP2, label, distance);
+  } else {
+    UNREACHABLE();
+  }
+}
+
 void Assembler::BranchIfNotSmi(Register reg,
                                Label* label,
                                JumpDistance distance) {
@@ -3923,8 +3938,9 @@
 
 #ifndef PRODUCT
 void Assembler::MaybeTraceAllocation(intptr_t cid,
+                                     Label* trace,
                                      Register temp_reg,
-                                     Label* trace) {
+                                     JumpDistance distance) {
   ASSERT(cid > 0);
 
   const intptr_t shared_table_offset =
@@ -3963,7 +3979,7 @@
     // If this allocation is traced, program will jump to failure path
     // (i.e. the allocation stub) which will allocate the object and trace the
     // allocation call site.
-    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, temp_reg, failure));
+    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, failure, temp_reg));
 
     lx(instance_reg, Address(THR, target::Thread::top_offset()));
     lx(temp_reg, Address(THR, target::Thread::end_offset()));
@@ -4003,7 +4019,7 @@
     // If this allocation is traced, program will jump to failure path
     // (i.e. the allocation stub) which will allocate the object and trace the
     // allocation call site.
-    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, temp1, failure));
+    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, failure, temp1));
     // Potential new object start.
     lx(instance, Address(THR, target::Thread::top_offset()));
     AddImmediate(end_address, instance, instance_size);
@@ -4031,6 +4047,22 @@
   }
 }
 
+void Assembler::CopyMemoryWords(Register src,
+                                Register dst,
+                                Register size,
+                                Register temp) {
+  Label loop, done;
+  beqz(size, &done, kNearJump);
+  Bind(&loop);
+  lx(temp, Address(src));
+  addi(src, src, target::kWordSize);
+  sx(temp, Address(dst));
+  addi(dst, dst, target::kWordSize);
+  subi(size, size, target::kWordSize);
+  bnez(size, &loop, kNearJump);
+  Bind(&done);
+}
+
 void Assembler::GenerateUnRelocatedPcRelativeCall(intptr_t offset_into_target) {
   // JAL only has a +/- 1MB range. AUIPC+JALR has a +/- 2GB range.
   intx_t imm = offset_into_target;
diff --git a/runtime/vm/compiler/assembler/assembler_riscv.h b/runtime/vm/compiler/assembler/assembler_riscv.h
index 985ce81..68ec777 100644
--- a/runtime/vm/compiler/assembler/assembler_riscv.h
+++ b/runtime/vm/compiler/assembler/assembler_riscv.h
@@ -801,6 +801,8 @@
   void Jump(Label* label, JumpDistance distance = kFarJump) {
     j(label, distance);
   }
+  // Unconditional jump to a given address in register.
+  void Jump(Register target) { jr(target); }
   // Unconditional jump to a given address in memory. Clobbers TMP.
   void Jump(const Address& address);
 
@@ -834,16 +836,11 @@
                               Register address,
                               int32_t offset = 0);
 
-  void CompareWithFieldValue(Register value, FieldAddress address) {
-    CompareWithMemoryValue(value, address);
-  }
   void CompareWithCompressedFieldFromOffset(Register value,
                                             Register base,
                                             int32_t offset);
 
-  void CompareWithMemoryValue(Register value,
-                              Address address,
-                              OperandSize sz = kWordBytes);
+  void CompareWithMemoryValue(Register value, Address address);
 
   void CompareFunctionTypeNullabilityWith(Register type, int8_t value) override;
   void CompareTypeNullabilityWith(Register type, int8_t value) override;
@@ -888,6 +885,11 @@
   void BranchIfZero(Register rn,
                     Label* label,
                     JumpDistance distance = kFarJump);
+  void BranchIfBit(Register rn,
+                   intptr_t bit_number,
+                   Condition condition,
+                   Label* label,
+                   JumpDistance distance = kFarJump);
   void SetIf(Condition condition, Register rd);
 
   void SmiUntag(Register reg) { SmiUntag(reg, reg); }
@@ -932,6 +934,12 @@
   void AddImmediate(Register dest, intx_t imm) {
     AddImmediate(dest, dest, imm);
   }
+  void AddRegisters(Register dest, Register src) {
+    add(dest, dest, src);
+  }
+  void SubRegisters(Register dest, Register src) {
+    sub(dest, dest, src);
+  }
 
   // Macros accepting a pp Register argument may attempt to load values from
   // the object pool when possible. Unless you are sure that the untagged object
@@ -946,14 +954,23 @@
                     Register rn,
                     intx_t imm,
                     OperandSize sz = kWordBytes);
+  void AndImmediate(Register rd, intx_t imm) {
+    AndImmediate(rd, rd, imm);
+  }
   void OrImmediate(Register rd,
                    Register rn,
                    intx_t imm,
                    OperandSize sz = kWordBytes);
+  void OrImmediate(Register rd, intx_t imm) {
+    OrImmediate(rd, rd, imm);
+  }
   void XorImmediate(Register rd,
                     Register rn,
                     intx_t imm,
                     OperandSize sz = kWordBytes);
+  void LslImmediate(Register rd, int32_t shift) {
+    slli(rd, rd, shift);
+  }
   void TestImmediate(Register rn, intx_t imm, OperandSize sz = kWordBytes);
   void CompareImmediate(Register rn, intx_t imm, OperandSize sz = kWordBytes);
 
@@ -1016,6 +1033,9 @@
                           OperandSize sz = kWordBytes) {
     StoreToOffset(src, base, offset - kHeapObjectTag, sz);
   }
+  void StoreZero(const Address& address, Register temp = kNoRegister) {
+    sx(ZR, address);
+  }
   void StoreSToOffset(FRegister src, Register base, int32_t offset);
   void StoreDToOffset(FRegister src, Register base, int32_t offset);
   void StoreDFieldToOffset(FRegister src, Register base, int32_t offset) {
@@ -1256,7 +1276,10 @@
 
   // If allocation tracing for |cid| is enabled, will jump to |trace| label,
   // which will allocate in the runtime where tracing occurs.
-  void MaybeTraceAllocation(intptr_t cid, Register temp_reg, Label* trace);
+  void MaybeTraceAllocation(intptr_t cid,
+                            Label* trace,
+                            Register temp_reg,
+                            JumpDistance distance = JumpDistance::kFarJump);
 
   void TryAllocateObject(intptr_t cid,
                          intptr_t instance_size,
@@ -1273,6 +1296,14 @@
                         Register temp1,
                         Register temp2);
 
+  // Copy [size] bytes from [src] address to [dst] address.
+  // [size] should be a multiple of word size.
+  // Clobbers [src], [dst], [size] and [temp] registers.
+  void CopyMemoryWords(Register src,
+                       Register dst,
+                       Register size,
+                       Register temp);
+
   // This emits an PC-relative call of the form "bl <offset>".  The offset
   // is not yet known and needs therefore relocation to the right place before
   // the code can be used.
diff --git a/runtime/vm/compiler/assembler/assembler_x64.cc b/runtime/vm/compiler/assembler/assembler_x64.cc
index 9a65cda..ade5233 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64.cc
@@ -1161,6 +1161,18 @@
   }
 }
 
+void Assembler::AddImmediate(Register dest, Register src, int32_t value) {
+  if (dest == src) {
+    AddImmediate(dest, value);
+    return;
+  }
+  if (value == 0) {
+    MoveRegister(dest, src);
+    return;
+  }
+  leaq(dest, Address(src, value));
+}
+
 void Assembler::AddImmediate(const Address& address, const Immediate& imm) {
   const int64_t value = imm.value();
   if (value == 0) {
@@ -2185,6 +2197,7 @@
 #ifndef PRODUCT
 void Assembler::MaybeTraceAllocation(intptr_t cid,
                                      Label* trace,
+                                     Register temp_reg,
                                      JumpDistance distance) {
   ASSERT(cid > 0);
   const intptr_t shared_table_offset =
@@ -2193,7 +2206,9 @@
       target::SharedClassTable::class_heap_stats_table_offset();
   const intptr_t class_offset = target::ClassTable::ClassOffsetFor(cid);
 
-  Register temp_reg = TMP;
+  if (temp_reg == kNoRegister) {
+    temp_reg = TMP;
+  }
   LoadIsolateGroup(temp_reg);
   movq(temp_reg, Address(temp_reg, shared_table_offset));
   movq(temp_reg, Address(temp_reg, table_offset));
@@ -2219,7 +2234,7 @@
     // If this allocation is traced, program will jump to failure path
     // (i.e. the allocation stub) which will allocate the object and trace the
     // allocation call site.
-    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, failure, distance));
+    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, failure, temp_reg, distance));
     movq(instance_reg, Address(THR, target::Thread::top_offset()));
     addq(instance_reg, Immediate(instance_size));
     // instance_reg: potential next object start.
@@ -2251,7 +2266,7 @@
     // If this allocation is traced, program will jump to failure path
     // (i.e. the allocation stub) which will allocate the object and trace the
     // allocation call site.
-    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, failure, distance));
+    NOT_IN_PRODUCT(MaybeTraceAllocation(cid, failure, temp, distance));
     movq(instance, Address(THR, target::Thread::top_offset()));
     movq(end_address, instance);
 
@@ -2279,6 +2294,17 @@
   }
 }
 
+void Assembler::CopyMemoryWords(Register src,
+                                Register dst,
+                                Register size,
+                                Register temp) {
+  RELEASE_ASSERT(src == RSI);
+  RELEASE_ASSERT(dst == RDI);
+  RELEASE_ASSERT(size == RCX);
+  shrq(size, Immediate(target::kWordSizeLog2));
+  rep_movsq();
+}
+
 void Assembler::GenerateUnRelocatedPcRelativeCall(intptr_t offset_into_target) {
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   buffer_.Emit<uint8_t>(0xe8);
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index 395a372..c85db24 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -407,7 +407,7 @@
   SIMPLE(lock, 0xF0)
   SIMPLE(rep_movsb, 0xF3, 0xA4)
   SIMPLE(rep_movsw, 0xF3, 0x66, 0xA5)
-  SIMPLE(rep_movsl, 0xF3, 0xA5)
+  SIMPLE(rep_movsd, 0xF3, 0xA5)
   SIMPLE(rep_movsq, 0xF3, 0x48, 0xA5)
 #undef SIMPLE
 // XmmRegister operations with another register or an address.
@@ -583,8 +583,17 @@
                      OperandSize width = kEightBytes);
 
   void AndImmediate(Register dst, const Immediate& imm);
+  void AndImmediate(Register dst, int32_t value) {
+    AndImmediate(dst, Immediate(value));
+  }
   void OrImmediate(Register dst, const Immediate& imm);
+  void OrImmediate(Register dst, int32_t value) {
+    OrImmediate(dst, Immediate(value));
+  }
   void XorImmediate(Register dst, const Immediate& imm);
+  void LslImmediate(Register dst, int32_t shift) {
+    shlq(dst, Immediate(shift));
+  }
 
   void shldq(Register dst, Register src, Register shifter) {
     ASSERT(shifter == RCX);
@@ -715,6 +724,14 @@
     cmpq(src, Immediate(0));
     j(ZERO, label, distance);
   }
+  void BranchIfBit(Register rn,
+                   intptr_t bit_number,
+                   Condition condition,
+                   Label* label,
+                   JumpDistance distance = kFarJump) {
+    testq(rn, Immediate(1 << bit_number));
+    j(condition, label, distance);
+  }
 
   void ExtendValue(Register dst, Register src, OperandSize sz) override;
   void PushRegister(Register r);
@@ -740,11 +757,18 @@
                     OperandSize width = kEightBytes) {
     AddImmediate(reg, Immediate(value), width);
   }
+  void AddRegisters(Register dest, Register src) {
+    addq(dest, src);
+  }
+  void AddImmediate(Register dest, Register src, int32_t value);
   void AddImmediate(const Address& address, const Immediate& imm);
   void SubImmediate(Register reg,
                     const Immediate& imm,
                     OperandSize width = kEightBytes);
   void SubImmediate(const Address& address, const Immediate& imm);
+  void SubRegisters(Register dest, Register src) {
+    subq(dest, src);
+  }
 
   void Drop(intptr_t stack_elements, Register tmp = TMP);
 
@@ -965,6 +989,10 @@
   void Jump(Label* label, JumpDistance distance = kFarJump) {
     jmp(label, distance);
   }
+  // Unconditional jump to a given address in register.
+  void Jump(Register target) {
+    jmp(target);
+  }
   // Unconditional jump to a given address in memory.
   void Jump(const Address& address) { jmp(address); }
 
@@ -1028,6 +1056,9 @@
                           OperandSize sz = kEightBytes) {
     StoreToOffset(src, FieldAddress(base, offset), sz);
   }
+  void StoreZero(const Address& address, Register temp = kNoRegister) {
+    movq(address, Immediate(0));
+  }
   void LoadFromStack(Register dst, intptr_t depth);
   void StoreToStack(Register src, intptr_t depth);
   void CompareToStack(Register src, intptr_t depth);
@@ -1097,7 +1128,7 @@
 #endif
   }
 
-  void CompareWithFieldValue(Register value, FieldAddress address) {
+  void CompareWithMemoryValue(Register value, Address address) {
     cmpq(value, address);
   }
   void CompareWithCompressedFieldFromOffset(Register value,
@@ -1178,7 +1209,10 @@
 
   // If allocation tracing for |cid| is enabled, will jump to |trace| label,
   // which will allocate in the runtime where tracing occurs.
-  void MaybeTraceAllocation(intptr_t cid, Label* trace, JumpDistance distance);
+  void MaybeTraceAllocation(intptr_t cid,
+                            Label* trace,
+                            Register temp_reg = kNoRegister,
+                            JumpDistance distance = JumpDistance::kFarJump);
 
   void TryAllocateObject(intptr_t cid,
                          intptr_t instance_size,
@@ -1195,6 +1229,16 @@
                         Register end_address,
                         Register temp);
 
+  // Copy [size] bytes from [src] address to [dst] address.
+  // [size] should be a multiple of word size.
+  // Clobbers [src], [dst], [size] and [temp] registers.
+  // X64 requires fixed registers for memory copying:
+  // [src] = RSI, [dst] = RDI, [size] = RCX.
+  void CopyMemoryWords(Register src,
+                       Register dst,
+                       Register size,
+                       Register temp = kNoRegister);
+
   // This emits an PC-relative call of the form "callq *[rip+<offset>]".  The
   // offset is not yet known and needs therefore relocation to the right place
   // before the code can be used.
diff --git a/runtime/vm/compiler/assembler/assembler_x64_test.cc b/runtime/vm/compiler/assembler/assembler_x64_test.cc
index 83239a8..57daebc 100644
--- a/runtime/vm/compiler/assembler/assembler_x64_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64_test.cc
@@ -5693,7 +5693,7 @@
   __ movq(RSI, Address(RSP, 2 * target::kWordSize));  // from.
   __ movq(RDI, Address(RSP, 1 * target::kWordSize));  // to.
   __ movq(RCX, Address(RSP, 0 * target::kWordSize));  // count.
-  __ rep_movsl();
+  __ rep_movsd();
   // Remove saved arguments.
   __ popq(RAX);
   __ popq(RAX);
diff --git a/runtime/vm/compiler/backend/compile_type.h b/runtime/vm/compiler/backend/compile_type.h
index 4b6bffd..9e0e619 100644
--- a/runtime/vm/compiler/backend/compile_type.h
+++ b/runtime/vm/compiler/backend/compile_type.h
@@ -259,6 +259,10 @@
   // can be uninstantiated.
   bool CanBeSmi();
 
+  // Returns true if a value of this CompileType can contain a Future
+  // instance.
+  bool CanBeFuture();
+
   bool Specialize(GrowableArray<intptr_t>* class_ids);
 
   void PrintTo(BaseTextBuffer* f) const;
diff --git a/runtime/vm/compiler/backend/constant_propagator.cc b/runtime/vm/compiler/backend/constant_propagator.cc
index d3c855b..63528f15 100644
--- a/runtime/vm/compiler/backend/constant_propagator.cc
+++ b/runtime/vm/compiler/backend/constant_propagator.cc
@@ -1460,6 +1460,10 @@
   SetValue(instr, non_constant_);
 }
 
+void ConstantPropagator::VisitCall1ArgStub(Call1ArgStubInstr* instr) {
+  SetValue(instr, non_constant_);
+}
+
 void ConstantPropagator::VisitLoadThread(LoadThreadInstr* instr) {
   SetValue(instr, non_constant_);
 }
diff --git a/runtime/vm/compiler/backend/flow_graph.cc b/runtime/vm/compiler/backend/flow_graph.cc
index 360d454..fd20143 100644
--- a/runtime/vm/compiler/backend/flow_graph.cc
+++ b/runtime/vm/compiler/backend/flow_graph.cc
@@ -39,7 +39,7 @@
       current_ssa_temp_index_(0),
       max_block_id_(max_block_id),
       parsed_function_(parsed_function),
-      num_direct_parameters_(parsed_function.function().HasOptionalParameters()
+      num_direct_parameters_(parsed_function.function().MakesCopyOfParameters()
                                  ? 0
                                  : parsed_function.function().NumParameters()),
       direct_parameters_size_(0),
@@ -54,7 +54,7 @@
       prologue_info_(prologue_info),
       loop_hierarchy_(nullptr),
       loop_invariant_loads_(nullptr),
-      captured_parameters_(new (zone()) BitVector(zone(), variable_count())),
+      captured_parameters_(new(zone()) BitVector(zone(), variable_count())),
       inlining_id_(-1),
       should_print_(false) {
   should_print_ = FlowGraphPrinter::ShouldPrint(parsed_function.function(),
@@ -1076,7 +1076,7 @@
   GrowableArray<BlockEntryInstr*> worklist;
   for (intptr_t var_index = 0; var_index < variable_count(); ++var_index) {
     const bool always_live =
-        !FLAG_prune_dead_locals || (var_index == CurrentContextEnvIndex());
+        !FLAG_prune_dead_locals || IsImmortalVariable(var_index);
     // Add to the worklist each block containing an assignment.
     for (intptr_t block_index = 0; block_index < block_count; ++block_index) {
       if (assigned_vars[block_index]->Contains(var_index)) {
@@ -1378,7 +1378,7 @@
       // TODO(fschneider): Make sure that live_in always contains the
       // CurrentContext variable to avoid the special case here.
       if (FLAG_prune_dead_locals && !live_in->Contains(i) &&
-          (i != CurrentContextEnvIndex())) {
+          !IsImmortalVariable(i)) {
         (*env)[i] = constant_dead();
       }
     }
@@ -1619,10 +1619,6 @@
     return;
   }
 
-  // Current_context_var is never pruned, it is artificially kept alive, so
-  // it should not be checked here.
-  const intptr_t current_context_var_index = CurrentContextEnvIndex();
-
   for (intptr_t i = 0, n = preorder().length(); i < n; ++i) {
     BlockEntryInstr* block_entry = preorder()[i];
     Instruction* last_instruction = block_entry->last_instruction();
@@ -1634,7 +1630,7 @@
       if (successor->phis() != NULL) {
         for (intptr_t j = 0; j < successor->phis()->length(); ++j) {
           PhiInstr* phi = (*successor->phis())[j];
-          if (phi == nullptr && j != current_context_var_index) {
+          if (phi == nullptr && !IsImmortalVariable(j)) {
             // We have no phi node for the this variable.
             // Double check we do not have a different value in our env.
             // If we do, we would have needed a phi-node in the successsor.
diff --git a/runtime/vm/compiler/backend/flow_graph.h b/runtime/vm/compiler/backend/flow_graph.h
index 614d19b..98341177 100644
--- a/runtime/vm/compiler/backend/flow_graph.h
+++ b/runtime/vm/compiler/backend/flow_graph.h
@@ -165,6 +165,12 @@
 
   bool IsIrregexpFunction() const { return function().IsIrregexpFunction(); }
 
+  LocalVariable* SuspendStateVar() const {
+    return parsed_function().suspend_state_var();
+  }
+
+  intptr_t SuspendStateEnvIndex() const { return EnvIndex(SuspendStateVar()); }
+
   LocalVariable* CurrentContextVar() const {
     return parsed_function().current_context_var();
   }
@@ -186,6 +192,14 @@
     return num_direct_parameters_ - variable->index().value();
   }
 
+  // Context and :suspend_state variables are never pruned and
+  // artificially kept alive.
+  bool IsImmortalVariable(intptr_t env_index) const {
+    return (env_index == CurrentContextEnvIndex()) ||
+           (SuspendStateVar() != nullptr &&
+            env_index == SuspendStateEnvIndex());
+  }
+
   static bool NeedsPairLocation(Representation representation) {
     return representation == kUnboxedInt64 &&
            compiler::target::kIntSpillFactor == 2;
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index 6f556e5..04712ef 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -208,7 +208,8 @@
       new (zone()) CompressedStackMapsBuilder(zone());
   pc_descriptors_list_ = new (zone()) DescriptorList(
       zone(), &code_source_map_builder_->inline_id_to_function());
-  exception_handlers_list_ = new (zone()) ExceptionHandlerList();
+  exception_handlers_list_ =
+      new (zone()) ExceptionHandlerList(parsed_function().function());
 #if defined(DART_PRECOMPILER)
   catch_entry_moves_maps_builder_ = new (zone()) CatchEntryMovesMapBuilder();
 #endif
@@ -1220,7 +1221,7 @@
   // to spill slots. The deoptimization environment does not track them.
   const Function& function = parsed_function().function();
   const intptr_t incoming_arg_count =
-      function.HasOptionalParameters() ? 0 : function.num_fixed_parameters();
+      function.MakesCopyOfParameters() ? 0 : function.num_fixed_parameters();
   DeoptInfoBuilder builder(zone(), incoming_arg_count, assembler);
 
   intptr_t deopt_info_table_size = DeoptTable::SizeFor(deopt_infos_.length());
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.h b/runtime/vm/compiler/backend/flow_graph_compiler.h
index f533e32..8860c23 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.h
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.h
@@ -814,6 +814,7 @@
   void RecordCatchEntryMoves(Environment* env);
 
   void EmitCallToStub(const Code& stub);
+  void EmitJumpToStub(const Code& stub);
   void EmitTailCallToStub(const Code& stub);
 
   // Emits the following metadata for the current PC:
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
index 1d5dd66..7b14f31 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
@@ -373,6 +373,15 @@
       Register value_reg = slot_index == args_desc_slot ? ARGS_DESC_REG : R0;
       __ StoreToOffset(value_reg, FP, slot_index * compiler::target::kWordSize);
     }
+  } else if (parsed_function().suspend_state_var() != nullptr) {
+    // Initialize synthetic :suspend_state variable early
+    // as it may be accessed by GC and exception handling before
+    // InitAsync stub is called.
+    const intptr_t slot_index =
+        compiler::target::frame_layout.FrameSlotForVariable(
+            parsed_function().suspend_state_var());
+    __ LoadObject(R0, Object::null_object());
+    __ StoreToOffset(R0, FP, slot_index * compiler::target::kWordSize);
   }
 
   EndCodeSourceRange(PrologueSource());
@@ -389,10 +398,25 @@
   }
 }
 
+void FlowGraphCompiler::EmitJumpToStub(const Code& stub) {
+  ASSERT(!stub.IsNull());
+  if (CanPcRelativeCall(stub)) {
+    __ GenerateUnRelocatedPcRelativeTailCall();
+    AddPcRelativeTailCallStubTarget(stub);
+  } else {
+    __ LoadObject(CODE_REG, stub);
+    __ ldr(PC, compiler::FieldAddress(
+                   CODE_REG, compiler::target::Code::entry_point_offset()));
+    AddStubCallTarget(stub);
+  }
+}
+
 void FlowGraphCompiler::EmitTailCallToStub(const Code& stub) {
   ASSERT(!stub.IsNull());
   if (CanPcRelativeCall(stub)) {
-    __ LeaveDartFrame();
+    if (flow_graph().graph_entry()->NeedsFrame()) {
+      __ LeaveDartFrame();
+    }
     __ GenerateUnRelocatedPcRelativeTailCall();
     AddPcRelativeTailCallStubTarget(stub);
 #if defined(DEBUG)
@@ -400,7 +424,9 @@
 #endif
   } else {
     __ LoadObject(CODE_REG, stub);
-    __ LeaveDartFrame();
+    if (flow_graph().graph_entry()->NeedsFrame()) {
+      __ LeaveDartFrame();
+    }
     __ ldr(PC, compiler::FieldAddress(
                    CODE_REG, compiler::target::Code::entry_point_offset()));
     AddStubCallTarget(stub);
@@ -645,7 +671,7 @@
     Code::EntryKind entry_kind) {
   ASSERT(CanCallDart());
   ASSERT(!function.IsClosureFunction());
-  if (function.HasOptionalParameters() || function.IsGeneric()) {
+  if (function.PrologueNeedsArgumentsDescriptor()) {
     __ LoadObject(R4, arguments_descriptor);
   } else {
     if (!FLAG_precompiled_mode) {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
index 1ccb222..67fed8a 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
@@ -363,6 +363,14 @@
           slot_index == args_desc_slot ? ARGS_DESC_REG : NULL_REG;
       __ StoreToOffset(value_reg, FP, slot_index * kWordSize);
     }
+  } else if (parsed_function().suspend_state_var() != nullptr) {
+    // Initialize synthetic :suspend_state variable early
+    // as it may be accessed by GC and exception handling before
+    // InitAsync stub is called.
+    const intptr_t slot_index =
+        compiler::target::frame_layout.FrameSlotForVariable(
+            parsed_function().suspend_state_var());
+    __ StoreToOffset(NULL_REG, FP, slot_index * kWordSize);
   }
 
   EndCodeSourceRange(PrologueSource());
@@ -379,10 +387,26 @@
   }
 }
 
+void FlowGraphCompiler::EmitJumpToStub(const Code& stub) {
+  ASSERT(!stub.IsNull());
+  if (CanPcRelativeCall(stub)) {
+    __ GenerateUnRelocatedPcRelativeTailCall();
+    AddPcRelativeTailCallStubTarget(stub);
+  } else {
+    __ LoadObject(CODE_REG, stub);
+    __ ldr(TMP, compiler::FieldAddress(
+                    CODE_REG, compiler::target::Code::entry_point_offset()));
+    __ br(TMP);
+    AddStubCallTarget(stub);
+  }
+}
+
 void FlowGraphCompiler::EmitTailCallToStub(const Code& stub) {
   ASSERT(!stub.IsNull());
   if (CanPcRelativeCall(stub)) {
-    __ LeaveDartFrame();
+    if (flow_graph().graph_entry()->NeedsFrame()) {
+      __ LeaveDartFrame();
+    }
     __ GenerateUnRelocatedPcRelativeTailCall();
     AddPcRelativeTailCallStubTarget(stub);
 #if defined(DEBUG)
@@ -390,7 +414,9 @@
 #endif
   } else {
     __ LoadObject(CODE_REG, stub);
-    __ LeaveDartFrame();
+    if (flow_graph().graph_entry()->NeedsFrame()) {
+      __ LeaveDartFrame();
+    }
     __ ldr(TMP, compiler::FieldAddress(
                     CODE_REG, compiler::target::Code::entry_point_offset()));
     __ br(TMP);
@@ -646,7 +672,7 @@
     Code::EntryKind entry_kind) {
   ASSERT(CanCallDart());
   ASSERT(!function.IsClosureFunction());
-  if (function.HasOptionalParameters() || function.IsGeneric()) {
+  if (function.PrologueNeedsArgumentsDescriptor()) {
     __ LoadObject(R4, arguments_descriptor);
   } else {
     if (!FLAG_precompiled_mode) {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
index 9ed25de..c23ff8a 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
@@ -450,6 +450,15 @@
       Register value_reg = slot_index == args_desc_slot ? ARGS_DESC_REG : EAX;
       __ movl(compiler::Address(EBP, slot_index * kWordSize), value_reg);
     }
+  } else if (parsed_function().suspend_state_var() != nullptr) {
+    // Initialize synthetic :suspend_state variable early
+    // as it may be accessed by GC and exception handling before
+    // InitAsync stub is called.
+    const intptr_t slot_index =
+        compiler::target::frame_layout.FrameSlotForVariable(
+            parsed_function().suspend_state_var());
+    __ LoadObject(EAX, Object::null_object());
+    __ movl(compiler::Address(EBP, slot_index * kWordSize), EAX);
   }
 
   EndCodeSourceRange(PrologueSource());
@@ -464,6 +473,14 @@
   AddStubCallTarget(stub);
 }
 
+void FlowGraphCompiler::EmitJumpToStub(const Code& stub) {
+  ASSERT(!stub.IsNull());
+  __ LoadObject(CODE_REG, stub);
+  __ jmp(compiler::FieldAddress(CODE_REG,
+                                compiler::target::Code::entry_point_offset()));
+  AddStubCallTarget(stub);
+}
+
 void FlowGraphCompiler::GenerateDartCall(intptr_t deopt_id,
                                          const InstructionSource& source,
                                          const Code& stub,
@@ -625,7 +642,7 @@
     LocationSummary* locs,
     Code::EntryKind entry_kind) {
   ASSERT(CanCallDart());
-  if (function.HasOptionalParameters() || function.IsGeneric()) {
+  if (function.PrologueNeedsArgumentsDescriptor()) {
     __ LoadObject(EDX, arguments_descriptor);
   } else {
     __ xorl(EDX, EDX);  // GC safe smi zero because of stub.
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc b/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
index 46a6ba5..2c40fdc 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
@@ -357,6 +357,14 @@
       __ StoreToOffset(value_reg, SP,
                        (slot_index + fp_to_sp_delta) * kWordSize);
     }
+  } else if (parsed_function().suspend_state_var() != nullptr) {
+    // Initialize synthetic :suspend_state variable early
+    // as it may be accessed by GC and exception handling before
+    // InitAsync stub is called.
+    const intptr_t slot_index =
+        compiler::target::frame_layout.FrameSlotForVariable(
+            parsed_function().suspend_state_var());
+    __ StoreToOffset(NULL_REG, FP, slot_index * kWordSize);
   }
 
   EndCodeSourceRange(PrologueSource());
@@ -373,10 +381,26 @@
   }
 }
 
+void FlowGraphCompiler::EmitJumpToStub(const Code& stub) {
+  ASSERT(!stub.IsNull());
+  if (CanPcRelativeCall(stub)) {
+    __ GenerateUnRelocatedPcRelativeTailCall();
+    AddPcRelativeTailCallStubTarget(stub);
+  } else {
+    __ LoadObject(CODE_REG, stub);
+    __ lx(TMP, compiler::FieldAddress(
+                   CODE_REG, compiler::target::Code::entry_point_offset()));
+    __ jr(TMP);
+    AddStubCallTarget(stub);
+  }
+}
+
 void FlowGraphCompiler::EmitTailCallToStub(const Code& stub) {
   ASSERT(!stub.IsNull());
   if (CanPcRelativeCall(stub)) {
-    __ LeaveDartFrame();
+    if (flow_graph().graph_entry()->NeedsFrame()) {
+      __ LeaveDartFrame();
+    }
     __ GenerateUnRelocatedPcRelativeTailCall();
     AddPcRelativeTailCallStubTarget(stub);
 #if defined(DEBUG)
@@ -384,7 +408,9 @@
 #endif
   } else {
     __ LoadObject(CODE_REG, stub);
-    __ LeaveDartFrame();
+    if (flow_graph().graph_entry()->NeedsFrame()) {
+      __ LeaveDartFrame();
+    }
     __ lx(TMP, compiler::FieldAddress(
                    CODE_REG, compiler::target::Code::entry_point_offset()));
     __ jr(TMP);
@@ -616,7 +642,7 @@
     Code::EntryKind entry_kind) {
   ASSERT(CanCallDart());
   ASSERT(!function.IsClosureFunction());
-  if (function.HasOptionalParameters() || function.IsGeneric()) {
+  if (function.PrologueNeedsArgumentsDescriptor()) {
     __ LoadObject(ARGS_DESC_REG, arguments_descriptor);
   } else {
     if (!FLAG_precompiled_mode) {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index 5ef22a0..e6c3b1e 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -369,6 +369,15 @@
       Register value_reg = slot_index == args_desc_slot ? ARGS_DESC_REG : RAX;
       __ movq(compiler::Address(RBP, slot_index * kWordSize), value_reg);
     }
+  } else if (parsed_function().suspend_state_var() != nullptr) {
+    // Initialize synthetic :suspend_state variable early
+    // as it may be accessed by GC and exception handling before
+    // InitAsync stub is called.
+    const intptr_t slot_index =
+        compiler::target::frame_layout.FrameSlotForVariable(
+            parsed_function().suspend_state_var());
+    __ LoadObject(RAX, Object::null_object());
+    __ movq(compiler::Address(RBP, slot_index * kWordSize), RAX);
   }
 
   EndCodeSourceRange(PrologueSource());
@@ -385,10 +394,25 @@
   }
 }
 
+void FlowGraphCompiler::EmitJumpToStub(const Code& stub) {
+  ASSERT(!stub.IsNull());
+  if (CanPcRelativeCall(stub)) {
+    __ GenerateUnRelocatedPcRelativeTailCall();
+    AddPcRelativeTailCallStubTarget(stub);
+  } else {
+    __ LoadObject(CODE_REG, stub);
+    __ jmp(compiler::FieldAddress(
+        CODE_REG, compiler::target::Code::entry_point_offset()));
+    AddStubCallTarget(stub);
+  }
+}
+
 void FlowGraphCompiler::EmitTailCallToStub(const Code& stub) {
   ASSERT(!stub.IsNull());
   if (CanPcRelativeCall(stub)) {
-    __ LeaveDartFrame();
+    if (flow_graph().graph_entry()->NeedsFrame()) {
+      __ LeaveDartFrame();
+    }
     __ GenerateUnRelocatedPcRelativeTailCall();
     AddPcRelativeTailCallStubTarget(stub);
 #if defined(DEBUG)
@@ -396,7 +420,9 @@
 #endif
   } else {
     __ LoadObject(CODE_REG, stub);
-    __ LeaveDartFrame();
+    if (flow_graph().graph_entry()->NeedsFrame()) {
+      __ LeaveDartFrame();
+    }
     __ jmp(compiler::FieldAddress(
         CODE_REG, compiler::target::Code::entry_point_offset()));
     AddStubCallTarget(stub);
@@ -629,7 +655,7 @@
     Code::EntryKind entry_kind) {
   ASSERT(CanCallDart());
   ASSERT(!function.IsClosureFunction());
-  if (function.HasOptionalParameters() || function.IsGeneric()) {
+  if (function.PrologueNeedsArgumentsDescriptor()) {
     __ LoadObject(R10, arguments_descriptor);
   } else {
     if (!FLAG_precompiled_mode) {
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 7e2133d..768d5c4 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -6900,6 +6900,19 @@
   compiler->assembler()->StoreMemoryValue(value_reg, base_reg, offset_);
 }
 
+const Code& ReturnInstr::GetReturnStub(FlowGraphCompiler* compiler) const {
+  ASSERT(compiler->parsed_function().function().IsCompactAsyncFunction());
+  if (!value()->Type()->CanBeFuture()) {
+    return Code::ZoneHandle(compiler->zone(),
+                            compiler->isolate_group()
+                                ->object_store()
+                                ->return_async_not_future_stub());
+  }
+  return Code::ZoneHandle(
+      compiler->zone(),
+      compiler->isolate_group()->object_store()->return_async_stub());
+}
+
 void NativeReturnInstr::EmitReturnMoves(FlowGraphCompiler* compiler) {
   const auto& dst1 = marshaller_.Location(compiler::ffi::kResultIndex);
   if (dst1.payload_type().IsVoid()) {
@@ -7209,6 +7222,55 @@
   return simd_op_information[kind()].has_mask;
 }
 
+LocationSummary* Call1ArgStubInstr::MakeLocationSummary(Zone* zone,
+                                                        bool opt) const {
+  const intptr_t kNumInputs = 1;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* locs = new (zone)
+      LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
+  switch (stub_id_) {
+    case StubId::kInitAsync:
+      locs->set_in(0, Location::RegisterLocation(
+                          InitSuspendableFunctionStubABI::kTypeArgsReg));
+      break;
+    case StubId::kAwaitAsync:
+      locs->set_in(0, Location::RegisterLocation(SuspendStubABI::kArgumentReg));
+      break;
+  }
+  locs->set_out(0, Location::RegisterLocation(CallingConventions::kReturnReg));
+  return locs;
+}
+
+void Call1ArgStubInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  ObjectStore* object_store = compiler->isolate_group()->object_store();
+  Code& stub = Code::ZoneHandle(compiler->zone());
+  switch (stub_id_) {
+    case StubId::kInitAsync:
+      stub = object_store->init_async_stub();
+      break;
+    case StubId::kAwaitAsync:
+      stub = object_store->await_async_stub();
+      break;
+  }
+  compiler->GenerateStubCall(source(), stub, UntaggedPcDescriptors::kOther,
+                             locs(), deopt_id(), env());
+
+#if defined(TARGET_ARCH_X64) || defined(TARGET_ARCH_IA32)
+  if (stub_id_ == StubId::kAwaitAsync) {
+    // On x86 (X64 and IA32) mismatch between calls and returns
+    // significantly regresses performance. So suspend stub
+    // does not return directly to the caller. Instead, a small
+    // epilogue is generated right after the call to suspend stub,
+    // and resume stub adjusts resume PC to skip this epilogue.
+    const intptr_t start = compiler->assembler()->CodeSize();
+    __ LeaveFrame();
+    __ ret();
+    RELEASE_ASSERT(compiler->assembler()->CodeSize() - start ==
+                   SuspendStubABI::kResumePcDistance);
+  }
+#endif
+}
+
 #undef __
 
 }  // namespace dart
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 08d8f81..d0bbaed 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -528,6 +528,7 @@
   M(BoxSmallInt, kNoGC)                                                        \
   M(IntConverter, kNoGC)                                                       \
   M(BitCast, kNoGC)                                                            \
+  M(Call1ArgStub, _)                                                           \
   M(LoadThread, kNoGC)                                                         \
   M(Deoptimize, kNoGC)                                                         \
   M(SimdOp, kNoGC)
@@ -3099,6 +3100,8 @@
   const intptr_t yield_index_;
   const Representation representation_;
 
+  const Code& GetReturnStub(FlowGraphCompiler* compiler) const;
+
   DISALLOW_COPY_AND_ASSIGN(ReturnInstr);
 };
 
@@ -9560,6 +9563,42 @@
   DISALLOW_COPY_AND_ASSIGN(SimdOpInstr);
 };
 
+// Generic instruction to call 1-argument stubs specified using [StubId].
+class Call1ArgStubInstr : public TemplateDefinition<1, Throws> {
+ public:
+  enum class StubId {
+    kInitAsync,
+    kAwaitAsync,
+  };
+
+  Call1ArgStubInstr(const InstructionSource& source,
+                    StubId stub_id,
+                    Value* operand,
+                    intptr_t deopt_id)
+      : TemplateDefinition(source, deopt_id),
+        stub_id_(stub_id),
+        token_pos_(source.token_pos) {
+    SetInputAt(0, operand);
+  }
+
+  Value* operand() const { return inputs_[0]; }
+  StubId stub_id() const { return stub_id_; }
+  virtual TokenPosition token_pos() const { return token_pos_; }
+
+  virtual bool CanCallDart() const { return true; }
+  virtual bool ComputeCanDeoptimize() const { return true; }
+  virtual bool HasUnknownSideEffects() const { return true; }
+
+  DECLARE_INSTRUCTION(Call1ArgStub);
+  PRINT_OPERANDS_TO_SUPPORT
+
+ private:
+  const StubId stub_id_;
+  const TokenPosition token_pos_;
+
+  DISALLOW_COPY_AND_ASSIGN(Call1ArgStubInstr);
+};
+
 #undef DECLARE_INSTRUCTION
 
 class Environment : public ZoneAllocated {
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 3bdaac0..cf3345c 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -484,6 +484,13 @@
     ASSERT(result == CallingConventions::kReturnFpuReg);
   }
 
+  if (compiler->parsed_function().function().IsCompactAsyncFunction()) {
+    ASSERT(compiler->flow_graph().graph_entry()->NeedsFrame());
+    const Code& stub = GetReturnStub(compiler);
+    compiler->EmitJumpToStub(stub);
+    return;
+  }
+
   if (!compiler->flow_graph().graph_entry()->NeedsFrame()) {
     __ Ret();
     return;
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index d1a9fe0..a6a35de 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -411,6 +411,13 @@
     ASSERT(result == CallingConventions::kReturnFpuReg);
   }
 
+  if (compiler->parsed_function().function().IsCompactAsyncFunction()) {
+    ASSERT(compiler->flow_graph().graph_entry()->NeedsFrame());
+    const Code& stub = GetReturnStub(compiler);
+    compiler->EmitJumpToStub(stub);
+    return;
+  }
+
   if (!compiler->flow_graph().graph_entry()->NeedsFrame()) {
     __ ret();
     return;
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index 06243b2..3a4a935 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -116,7 +116,7 @@
     case 4:
     case 8:
     case 16:
-      __ rep_movsl();
+      __ rep_movsd();
       break;
   }
 
@@ -233,6 +233,13 @@
   Register result = locs()->in(0).reg();
   ASSERT(result == EAX);
 
+  if (compiler->parsed_function().function().IsCompactAsyncFunction()) {
+    ASSERT(compiler->flow_graph().graph_entry()->NeedsFrame());
+    const Code& stub = GetReturnStub(compiler);
+    compiler->EmitJumpToStub(stub);
+    return;
+  }
+
   if (!compiler->flow_graph().graph_entry()->NeedsFrame()) {
     __ ret();
     return;
@@ -256,7 +263,7 @@
   if (yield_index() != UntaggedPcDescriptors::kInvalidYieldIndex) {
     compiler->EmitYieldPositionMetadata(source(), yield_index());
   }
-  __ LeaveFrame();
+  __ LeaveDartFrame();
   __ ret();
 }
 
@@ -272,8 +279,7 @@
     return_in_st0 = true;
   }
 
-  // Leave Dart frame.
-  __ LeaveFrame();
+  __ LeaveDartFrame();
 
   // EDI is the only sane choice for a temporary register here because:
   //
@@ -1139,7 +1145,7 @@
             compiler::Address(SPREG, marshaller_.RequiredStackSpaceInBytes()));
   } else {
     // Leave dummy exit frame.
-    __ LeaveFrame();
+    __ LeaveDartFrame();
 
     // Instead of returning to the "fake" return address, we just pop it.
     __ popl(temp);
diff --git a/runtime/vm/compiler/backend/il_printer.cc b/runtime/vm/compiler/backend/il_printer.cc
index cc6770b..a4ed678 100644
--- a/runtime/vm/compiler/backend/il_printer.cc
+++ b/runtime/vm/compiler/backend/il_printer.cc
@@ -1356,6 +1356,21 @@
   f->AddString(")");
 }
 
+void Call1ArgStubInstr::PrintOperandsTo(BaseTextBuffer* f) const {
+  const char* name = "";
+  switch (stub_id_) {
+    case StubId::kInitAsync:
+      name = "InitAsync";
+      break;
+    case StubId::kAwaitAsync:
+      name = "AwaitAsync";
+      break;
+  }
+  f->Printf("%s(", name);
+  operand()->PrintTo(f);
+  f->AddString(")");
+}
+
 void PushArgumentInstr::PrintOperandsTo(BaseTextBuffer* f) const {
   value()->PrintTo(f);
 }
diff --git a/runtime/vm/compiler/backend/il_riscv.cc b/runtime/vm/compiler/backend/il_riscv.cc
index a2d70f7..d646861 100644
--- a/runtime/vm/compiler/backend/il_riscv.cc
+++ b/runtime/vm/compiler/backend/il_riscv.cc
@@ -464,6 +464,13 @@
     ASSERT(result == CallingConventions::kReturnFpuReg);
   }
 
+  if (compiler->parsed_function().function().IsCompactAsyncFunction()) {
+    ASSERT(compiler->flow_graph().graph_entry()->NeedsFrame());
+    const Code& stub = GetReturnStub(compiler);
+    compiler->EmitJumpToStub(stub);
+    return;
+  }
+
   if (!compiler->flow_graph().graph_entry()->NeedsFrame()) {
     __ ret();
     return;
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index b30b025..75475b1 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -180,7 +180,7 @@
       __ rep_movsw();
       break;
     case 4:
-      __ rep_movsl();
+      __ rep_movsd();
       break;
     case 8:
     case 16:
@@ -338,6 +338,13 @@
     ASSERT(result == CallingConventions::kReturnFpuReg);
   }
 
+  if (compiler->parsed_function().function().IsCompactAsyncFunction()) {
+    ASSERT(compiler->flow_graph().graph_entry()->NeedsFrame());
+    const Code& stub = GetReturnStub(compiler);
+    compiler->EmitJumpToStub(stub);
+    return;
+  }
+
   if (!compiler->flow_graph().graph_entry()->NeedsFrame()) {
     __ ret();
     return;
diff --git a/runtime/vm/compiler/backend/linearscan.cc b/runtime/vm/compiler/backend/linearscan.cc
index de3c5b1..8438490 100644
--- a/runtime/vm/compiler/backend/linearscan.cc
+++ b/runtime/vm/compiler/backend/linearscan.cc
@@ -2082,6 +2082,41 @@
   ConvertAllUses(range);
 }
 
+void FlowGraphAllocator::AllocateSpillSlotForSuspendState() {
+  if (flow_graph_.parsed_function().suspend_state_var() == nullptr) {
+    return;
+  }
+
+  spill_slots_.Add(kMaxPosition);
+  quad_spill_slots_.Add(false);
+  untagged_spill_slots_.Add(false);
+
+#if defined(DEBUG)
+  const intptr_t stack_index =
+      -compiler::target::frame_layout.VariableIndexForFrameSlot(
+          compiler::target::frame_layout.FrameSlotForVariable(
+              flow_graph_.parsed_function().suspend_state_var()));
+  ASSERT(stack_index == spill_slots_.length() - 1);
+#endif
+}
+
+void FlowGraphAllocator::UpdateStackmapsForSuspendState() {
+  if (flow_graph_.parsed_function().suspend_state_var() == nullptr) {
+    return;
+  }
+
+  const intptr_t stack_index =
+      -compiler::target::frame_layout.VariableIndexForFrameSlot(
+          compiler::target::frame_layout.FrameSlotForVariable(
+              flow_graph_.parsed_function().suspend_state_var()));
+  ASSERT(stack_index >= 0);
+
+  for (intptr_t i = 0, n = safepoints_.length(); i < n; ++i) {
+    Instruction* safepoint_instr = safepoints_[i];
+    safepoint_instr->locs()->SetStackBit(stack_index);
+  }
+}
+
 intptr_t FlowGraphAllocator::FirstIntersectionWithAllocated(
     intptr_t reg,
     LiveRange* unallocated) {
@@ -3102,11 +3137,11 @@
     return;
   }
 
-  // Optional parameter handling needs special changes to become frameless.
+  // Copying of parameters needs special changes to become frameless.
   // Specifically we need to rebase IL instructions which directly access frame
   // ({Load,Store}IndexedUnsafeInstr) to use SP rather than FP.
   // For now just always give such functions a frame.
-  if (flow_graph_.parsed_function().function().HasOptionalParameters()) {
+  if (flow_graph_.parsed_function().function().MakesCopyOfParameters()) {
     return;
   }
 
@@ -3211,8 +3246,15 @@
 
   NumberInstructions();
 
+  // Reserve spill slot for :suspend_state synthetic variable before
+  // reserving spill slots for parameter variables.
+  AllocateSpillSlotForSuspendState();
+
   BuildLiveRanges();
 
+  // Update stackmaps after all safepoints are collected.
+  UpdateStackmapsForSuspendState();
+
   if (FLAG_print_ssa_liveranges && CompilerState::ShouldTrace()) {
     const Function& function = flow_graph_.function();
     THR_Print("-- [before ssa allocator] ranges [%s] ---------\n",
diff --git a/runtime/vm/compiler/backend/linearscan.h b/runtime/vm/compiler/backend/linearscan.h
index bc26c63..7c16c5f 100644
--- a/runtime/vm/compiler/backend/linearscan.h
+++ b/runtime/vm/compiler/backend/linearscan.h
@@ -242,6 +242,13 @@
   // Find a spill slot that can be used by the given live range.
   void AllocateSpillSlotFor(LiveRange* range);
 
+  // Allocate spill slot for synthetic :suspend_state variable.
+  void AllocateSpillSlotForSuspendState();
+
+  // Mark synthetic :suspend_state variable as object in stackmaps
+  // at all safepoints.
+  void UpdateStackmapsForSuspendState();
+
   // Allocate the given live range to a spill slot.
   void Spill(LiveRange* range);
 
diff --git a/runtime/vm/compiler/backend/range_analysis.cc b/runtime/vm/compiler/backend/range_analysis.cc
index 2c4af9c..708308f 100644
--- a/runtime/vm/compiler/backend/range_analysis.cc
+++ b/runtime/vm/compiler/backend/range_analysis.cc
@@ -2814,6 +2814,9 @@
     case Slot::Kind::kFunctionType_parameter_types:
     case Slot::Kind::kFunctionType_type_parameters:
     case Slot::Kind::kInstance_native_fields_array:
+    case Slot::Kind::kSuspendState_future:
+    case Slot::Kind::kSuspendState_then_callback:
+    case Slot::Kind::kSuspendState_error_callback:
     case Slot::Kind::kTypedDataView_typed_data:
     case Slot::Kind::kType_arguments:
     case Slot::Kind::kTypeArgumentsIndex:
diff --git a/runtime/vm/compiler/backend/slot.cc b/runtime/vm/compiler/backend/slot.cc
index 9356180..77d0153 100644
--- a/runtime/vm/compiler/backend/slot.cc
+++ b/runtime/vm/compiler/backend/slot.cc
@@ -243,6 +243,9 @@
     case Slot::Kind::kFunctionType_named_parameter_names:
     case Slot::Kind::kFunctionType_parameter_types:
     case Slot::Kind::kFunctionType_type_parameters:
+    case Slot::Kind::kSuspendState_future:
+    case Slot::Kind::kSuspendState_then_callback:
+    case Slot::Kind::kSuspendState_error_callback:
     case Slot::Kind::kType_arguments:
     case Slot::Kind::kTypeArgumentsIndex:
     case Slot::Kind::kTypeParameters_names:
diff --git a/runtime/vm/compiler/backend/slot.h b/runtime/vm/compiler/backend/slot.h
index aa0c8ad..12609d6 100644
--- a/runtime/vm/compiler/backend/slot.h
+++ b/runtime/vm/compiler/backend/slot.h
@@ -73,6 +73,9 @@
   V(ImmutableLinkedHashBase, UntaggedLinkedHashBase, index,                    \
     TypedDataUint32Array, VAR)                                                 \
   V(Instance, UntaggedInstance, native_fields_array, Dynamic, VAR)             \
+  V(SuspendState, UntaggedSuspendState, future, Dynamic, VAR)                  \
+  V(SuspendState, UntaggedSuspendState, then_callback, Closure, VAR)           \
+  V(SuspendState, UntaggedSuspendState, error_callback, Closure, VAR)          \
   V(Type, UntaggedType, arguments, TypeArguments, FINAL)                       \
   V(TypeParameters, UntaggedTypeParameters, flags, Array, FINAL)               \
   V(TypeParameters, UntaggedTypeParameters, bounds, TypeArguments, FINAL)      \
diff --git a/runtime/vm/compiler/backend/type_propagator.cc b/runtime/vm/compiler/backend/type_propagator.cc
index 859fa3f..b163fbe 100644
--- a/runtime/vm/compiler/backend/type_propagator.cc
+++ b/runtime/vm/compiler/backend/type_propagator.cc
@@ -938,6 +938,43 @@
   return CanPotentiallyBeSmi(*ToAbstractType(), /*recurse=*/true);
 }
 
+bool CompileType::CanBeFuture() {
+  IsolateGroup* isolate_group = IsolateGroup::Current();
+  ObjectStore* object_store = isolate_group->object_store();
+
+  if (cid_ != kIllegalCid && cid_ != kDynamicCid) {
+    if ((cid_ == kNullCid) || (cid_ == kNeverCid)) {
+      return false;
+    }
+    const Class& cls = Class::Handle(isolate_group->class_table()->At(cid_));
+    return Class::IsSubtypeOf(
+        cls, TypeArguments::null_type_arguments(), Nullability::kNonNullable,
+        Type::Handle(object_store->non_nullable_future_rare_type()),
+        Heap::kNew);
+  }
+
+  AbstractType& type = AbstractType::Handle(ToAbstractType()->ptr());
+  if (type.IsTypeParameter()) {
+    type = TypeParameter::Cast(type).bound();
+  }
+  if (type.IsTypeParameter()) {
+    // Type parameter bounds can be cyclic, do not bother handling them here.
+    return true;
+  }
+  const intptr_t type_class_id = type.type_class_id();
+  if (type_class_id == kDynamicCid || type_class_id == kVoidCid ||
+      type_class_id == kInstanceCid || type_class_id == kFutureOrCid) {
+    return true;
+  }
+  if ((type_class_id == kNullCid) || (type_class_id == kNeverCid)) {
+    return false;
+  }
+  Type& future_type =
+      Type::Handle(object_store->non_nullable_future_rare_type());
+  future_type = future_type.ToNullability(Nullability::kNullable, Heap::kNew);
+  return type.IsSubtypeOf(future_type, Heap::kNew);
+}
+
 void CompileType::PrintTo(BaseTextBuffer* f) const {
   const char* type_name = "?";
   if (IsNone()) {
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
index e8fe9a6..31cf456 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
@@ -284,7 +284,7 @@
 
 Fragment BaseFlowGraphBuilder::TailCall(const Code& code) {
   Value* arg_desc = Pop();
-  return Fragment(new (Z) TailCallInstr(code, arg_desc));
+  return Fragment(new (Z) TailCallInstr(code, arg_desc)).closed();
 }
 
 void BaseFlowGraphBuilder::InlineBailout(const char* reason) {
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 0af255f..ab59d68 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -647,9 +647,9 @@
       LocalVariable* variable = pf.ParameterVariable(i);
       if (variable->is_captured()) {
         LocalVariable& raw_parameter = *pf.RawParameterVariable(i);
-        ASSERT((function.HasOptionalParameters() &&
+        ASSERT((function.MakesCopyOfParameters() &&
                 raw_parameter.owner() == scope) ||
-               (!function.HasOptionalParameters() &&
+               (!function.MakesCopyOfParameters() &&
                 raw_parameter.owner() == nullptr));
         ASSERT(!raw_parameter.is_captured());
 
@@ -666,6 +666,28 @@
   return body;
 }
 
+Fragment StreamingFlowGraphBuilder::InitSuspendableFunction(
+    const Function& dart_function) {
+  Fragment body;
+  if (dart_function.IsCompactAsyncFunction()) {
+    const auto& result_type =
+        AbstractType::Handle(Z, dart_function.result_type());
+    auto& type_args = TypeArguments::ZoneHandle(Z);
+    if (result_type.IsType() &&
+        (Class::Handle(Z, result_type.type_class()).IsFutureClass() ||
+         result_type.IsFutureOrType())) {
+      ASSERT(result_type.IsFinalized());
+      type_args = result_type.arguments();
+    }
+
+    body += TranslateInstantiatedTypeArguments(type_args);
+    body += B->Call1ArgStub(TokenPosition::kNoSource,
+                            Call1ArgStubInstr::StubId::kInitAsync);
+    body += Drop();
+  }
+  return body;
+}
+
 Fragment StreamingFlowGraphBuilder::ShortcutForUserDefinedEquals(
     const Function& dart_function,
     LocalVariable* first_parameter) {
@@ -885,6 +907,7 @@
   // objects than necessary during GC.
   const Fragment body =
       ClearRawParameters(dart_function) + B->BuildNullAssertions() +
+      InitSuspendableFunction(dart_function) +
       BuildFunctionBody(dart_function, first_parameter, is_constructor);
 
   auto extra_entry_point_style = ChooseEntryPointStyle(
@@ -1220,6 +1243,8 @@
       return BuildLibraryPrefixAction(position, Symbols::LoadLibrary());
     case kCheckLibraryIsLoaded:
       return BuildLibraryPrefixAction(position, Symbols::CheckLoaded());
+    case kAwaitExpression:
+      return BuildAwaitExpression(position);
     case kConstStaticInvocation:
     case kConstConstructorInvocation:
     case kConstListLiteral:
@@ -1442,6 +1467,10 @@
   return flow_graph_builder_->stack_;
 }
 
+void StreamingFlowGraphBuilder::set_stack(Value* top) {
+  flow_graph_builder_->stack_ = top;
+}
+
 void StreamingFlowGraphBuilder::Push(Definition* definition) {
   flow_graph_builder_->Push(definition);
 }
@@ -4291,6 +4320,20 @@
   return instructions;
 }
 
+Fragment StreamingFlowGraphBuilder::BuildAwaitExpression(
+    TokenPosition* position) {
+  ASSERT(parsed_function()->function().IsCompactAsyncFunction());
+  Fragment instructions;
+
+  const TokenPosition pos = ReadPosition();  // read file offset.
+  if (position != nullptr) *position = pos;
+
+  instructions += BuildExpression();  // read operand.
+
+  instructions += B->Call1ArgStub(pos, Call1ArgStubInstr::StubId::kAwaitAsync);
+  return instructions;
+}
+
 Fragment StreamingFlowGraphBuilder::BuildExpressionStatement(
     TokenPosition* position) {
   Fragment instructions = BuildExpression(position);  // read expression.
@@ -4468,7 +4511,6 @@
 
 Fragment StreamingFlowGraphBuilder::BuildWhileStatement(
     TokenPosition* position) {
-  ASSERT(block_expression_depth() == 0);  // no while in block-expr
   loop_depth_inc();
   const TokenPosition pos = ReadPosition();  // read position.
   if (position != nullptr) *position = pos;
@@ -4485,8 +4527,7 @@
     body_entry += Goto(join);
 
     Fragment loop(join);
-    ASSERT(B->GetStackDepth() == 0);
-    loop += CheckStackOverflow(pos);
+    loop += CheckStackOverflow(pos);  // may have non-empty stack
     loop.current->LinkTo(condition.entry);
 
     entry = Goto(join).entry;
@@ -4499,7 +4540,6 @@
 }
 
 Fragment StreamingFlowGraphBuilder::BuildDoStatement(TokenPosition* position) {
-  ASSERT(block_expression_depth() == 0);  // no do-while in block-expr
   loop_depth_inc();
   const TokenPosition pos = ReadPosition();  // read position.
   if (position != nullptr) *position = pos;
@@ -4516,8 +4556,7 @@
 
   JoinEntryInstr* join = BuildJoinEntry();
   Fragment loop(join);
-  ASSERT(B->GetStackDepth() == 0);
-  loop += CheckStackOverflow(pos);
+  loop += CheckStackOverflow(pos);  // may have non-empty stack
   loop += body;
   loop <<= condition.entry;
 
@@ -5089,7 +5128,6 @@
 }
 
 Fragment StreamingFlowGraphBuilder::BuildTryFinally(TokenPosition* position) {
-  ASSERT(block_expression_depth() == 0);  // no try-finally in block-expr
   // Note on streaming:
   // We only stream this TryFinally if we can stream everything inside it,
   // so creating a "TryFinallyBlock" with a kernel binary offset instead of an
@@ -5152,6 +5190,7 @@
 
   // Fill in the body of the catch.
   catch_depth_inc();
+
   const Array& handler_types = Array::ZoneHandle(Z, Array::New(1, Heap::kOld));
   handler_types.SetAt(0, Object::dynamic_type());
   // Note: rethrow will actually force mark the handler as needing a stacktrace.
@@ -5159,6 +5198,15 @@
                                           /* needs_stacktrace = */ false,
                                           /* is_synthesized = */ true);
   SetOffset(finalizer_offset);
+
+  // Try/finally might occur in control flow collections with non-empty
+  // expression stack (via desugaring of 'await for'). Note that catch-block
+  // generated for finally always throws so there is no merge.
+  // Save and reset expression stack around catch body in order to maintain
+  // correct stack depth, as catch entry drops expression stack.
+  Value* const saved_stack_top = stack();
+  set_stack(nullptr);
+
   finally_body += BuildStatementWithBranchCoverage();  // read finalizer
   if (finally_body.is_open()) {
     finally_body += LoadLocal(CurrentException());
@@ -5167,6 +5215,9 @@
         RethrowException(TokenPosition::kNoSource, try_handler_index);
     Drop();
   }
+
+  ASSERT(stack() == nullptr);
+  set_stack(saved_stack_top);
   catch_depth_dec();
 
   return Fragment(try_body.entry, after_try);
@@ -5416,36 +5467,53 @@
           lib.AddMetadata(function, func_decl_offset);
         }
 
-        function.set_is_debuggable(function_node_helper.dart_async_marker_ ==
-                                   FunctionNodeHelper::kSync);
-        switch (function_node_helper.dart_async_marker_) {
-          case FunctionNodeHelper::kSyncStar:
-            function.set_modifier(UntaggedFunction::kSyncGen);
-            break;
-          case FunctionNodeHelper::kAsync:
-            function.set_modifier(UntaggedFunction::kAsync);
-            break;
-          case FunctionNodeHelper::kAsyncStar:
-            function.set_modifier(UntaggedFunction::kAsyncGen);
-            break;
-          default:
-            // no special modifier
-            break;
-        }
-        function.set_is_generated_body(function_node_helper.async_marker_ ==
-                                       FunctionNodeHelper::kSyncYielding);
-        // sync* functions contain two nested synthetic functions, the first of
-        // which (sync_op_gen) is a regular sync function so we need to manually
-        // label it generated:
-        if (function.parent_function() != Function::null()) {
-          const auto& parent = Function::Handle(function.parent_function());
-          if (parent.IsSyncGenerator()) {
-            function.set_is_generated_body(true);
+        if (function_node_helper.async_marker_ == FunctionNodeHelper::kAsync) {
+          if (!FLAG_precompiled_mode) {
+            FATAL("Compact async functions are only supported in AOT mode.");
           }
-        }
-        // Note: Is..() methods use the modifiers set above, so order matters.
-        if (function.IsAsyncClosure() || function.IsAsyncGenClosure()) {
-          function.set_is_inlinable(!FLAG_lazy_async_stacks);
+          function.set_modifier(UntaggedFunction::kAsync);
+          function.set_is_debuggable(true);
+          function.set_is_inlinable(false);
+          function.set_is_visible(true);
+          ASSERT(function.IsCompactAsyncFunction());
+        } else {
+          ASSERT((function_node_helper.async_marker_ ==
+                  FunctionNodeHelper::kSync) ||
+                 (function_node_helper.async_marker_ ==
+                  FunctionNodeHelper::kSyncYielding));
+          function.set_is_debuggable(function_node_helper.dart_async_marker_ ==
+                                     FunctionNodeHelper::kSync);
+          switch (function_node_helper.dart_async_marker_) {
+            case FunctionNodeHelper::kSyncStar:
+              function.set_modifier(UntaggedFunction::kSyncGen);
+              break;
+            case FunctionNodeHelper::kAsync:
+              function.set_modifier(UntaggedFunction::kAsync);
+              break;
+            case FunctionNodeHelper::kAsyncStar:
+              function.set_modifier(UntaggedFunction::kAsyncGen);
+              break;
+            default:
+              // no special modifier
+              break;
+          }
+          function.set_is_generated_body(function_node_helper.async_marker_ ==
+                                         FunctionNodeHelper::kSyncYielding);
+          // sync* functions contain two nested synthetic functions,
+          // the first of which (sync_op_gen) is a regular sync function so we
+          // need to manually label it generated:
+          if (function.parent_function() != Function::null()) {
+            const auto& parent = Function::Handle(function.parent_function());
+            if (parent.IsSyncGenerator()) {
+              function.set_is_generated_body(true);
+            }
+          }
+          // Note: Is..() methods use the modifiers set above, so order
+          // matters.
+          if (function.IsAsyncClosure() || function.IsAsyncGenClosure()) {
+            function.set_is_inlinable(!FLAG_lazy_async_stacks);
+          }
+          ASSERT(!function.IsCompactAsyncFunction());
         }
 
         // If the start token position is synthetic, the end token position
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index cc8a1f9..cd5ccb6 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -93,6 +93,7 @@
   Fragment SetAsyncStackTrace(const Function& dart_function);
   Fragment CheckStackOverflowInPrologue(const Function& dart_function);
   Fragment SetupCapturedParameters(const Function& dart_function);
+  Fragment InitSuspendableFunction(const Function& dart_function);
   Fragment ShortcutForUserDefinedEquals(const Function& dart_function,
                                         LocalVariable* first_parameter);
   Fragment TypeArgumentsHandling(const Function& dart_function);
@@ -131,6 +132,7 @@
   BreakableBlock* breakable_block();
   GrowableArray<YieldContinuation>& yield_continuations();
   Value* stack();
+  void set_stack(Value* top);
   void Push(Definition* definition);
   Value* Pop();
   Class& GetSuperOrDie();
@@ -335,6 +337,7 @@
   Fragment BuildPartialTearoffInstantiation(TokenPosition* position);
   Fragment BuildLibraryPrefixAction(TokenPosition* position,
                                     const String& selector);
+  Fragment BuildAwaitExpression(TokenPosition* position);
 
   Fragment BuildExpressionStatement(TokenPosition* position);
   Fragment BuildBlock(TokenPosition* position);
diff --git a/runtime/vm/compiler/frontend/kernel_fingerprints.cc b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
index d55f1c2..21884e4 100644
--- a/runtime/vm/compiler/frontend/kernel_fingerprints.cc
+++ b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
@@ -617,6 +617,10 @@
     case kCheckLibraryIsLoaded:
       ReadUInt();  // skip library index
       return;
+    case kAwaitExpression:
+      ReadPosition();                    // read position.
+      CalculateExpressionFingerprint();  // read operand.
+      return;
     case kConstStaticInvocation:
     case kConstConstructorInvocation:
     case kConstListLiteral:
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index a769901..6f0e43c 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -309,8 +309,7 @@
   // => We therefore create a block for the body (fresh try index) and another
   //    join block (with current try index).
   Fragment body;
-  JoinEntryInstr* entry = new (Z)
-      JoinEntryInstr(AllocateBlockId(), try_handler_index, GetNextDeoptId());
+  JoinEntryInstr* entry = BuildJoinEntry(try_handler_index);
   body += LoadLocal(parsed_function_->current_context_var());
   body += StoreLocal(TokenPosition::kNoSource, CurrentCatchContext());
   body += Drop();
@@ -835,6 +834,9 @@
   V(LinkedHashBase_getIndex, LinkedHashBase_index)                             \
   V(LinkedHashBase_getUsedData, LinkedHashBase_used_data)                      \
   V(ObjectArrayLength, Array_length)                                           \
+  V(SuspendState_getFuture, SuspendState_future)                               \
+  V(SuspendState_getThenCallback, SuspendState_then_callback)                  \
+  V(SuspendState_getErrorCallback, SuspendState_error_callback)                \
   V(TypedDataViewOffsetInBytes, TypedDataView_offset_in_bytes)                 \
   V(TypedDataViewTypedData, TypedDataView_typed_data)                          \
   V(TypedListBaseLength, TypedDataBase_length)                                 \
@@ -850,6 +852,9 @@
   V(NativeFinalizer_setCallback, NativeFinalizer_callback)                     \
   V(LinkedHashBase_setData, LinkedHashBase_data)                               \
   V(LinkedHashBase_setIndex, LinkedHashBase_index)                             \
+  V(SuspendState_setFuture, SuspendState_future)                               \
+  V(SuspendState_setThenCallback, SuspendState_then_callback)                  \
+  V(SuspendState_setErrorCallback, SuspendState_error_callback)                \
   V(WeakProperty_setKey, WeakProperty_key)                                     \
   V(WeakProperty_setValue, WeakProperty_value)                                 \
   V(WeakReference_setTarget, WeakReference_target)
@@ -864,6 +869,7 @@
   const MethodRecognizer::Kind kind = function.recognized_kind();
 
   switch (kind) {
+    case MethodRecognizer::kSuspendState_resume:
     case MethodRecognizer::kTypedData_ByteDataView_factory:
     case MethodRecognizer::kTypedData_Int8ArrayView_factory:
     case MethodRecognizer::kTypedData_Uint8ArrayView_factory:
@@ -1012,6 +1018,13 @@
 
   const MethodRecognizer::Kind kind = function.recognized_kind();
   switch (kind) {
+    case MethodRecognizer::kSuspendState_resume: {
+      const Code& resume_stub =
+          Code::ZoneHandle(Z, IG->object_store()->resume_stub());
+      body += NullConstant();
+      body += TailCall(resume_stub);
+      break;
+    }
     case MethodRecognizer::kTypedData_ByteDataView_factory:
       body += BuildTypedDataViewFactoryConstructor(function, kByteDataViewCid);
       break;
@@ -1704,7 +1717,10 @@
     }
   }
 
-  body += Return(TokenPosition::kNoSource, /* omit_result_type_check = */ true);
+  if (body.is_open()) {
+    body +=
+        Return(TokenPosition::kNoSource, /* omit_result_type_check = */ true);
+  }
 
   return new (Z) FlowGraph(*parsed_function_, graph_entry_, last_used_block_id_,
                            prologue_info);
@@ -4184,6 +4200,14 @@
   return Fragment(instr);
 }
 
+Fragment FlowGraphBuilder::Call1ArgStub(TokenPosition position,
+                                        Call1ArgStubInstr::StubId stub_id) {
+  Call1ArgStubInstr* instr = new (Z) Call1ArgStubInstr(
+      InstructionSource(position), stub_id, Pop(), GetNextDeoptId());
+  Push(instr);
+  return Fragment(instr);
+}
+
 Fragment FlowGraphBuilder::WrapTypedDataBaseInCompound(
     const AbstractType& compound_type) {
   const auto& compound_sub_class =
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.h b/runtime/vm/compiler/frontend/kernel_to_il.h
index eeab45d..c7f7478 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.h
+++ b/runtime/vm/compiler/frontend/kernel_to_il.h
@@ -416,6 +416,10 @@
   // Currently only works with equal sizes and floating point <-> integer.
   Fragment BitCast(Representation from, Representation to);
 
+  // Generates Call1ArgStub instruction.
+  Fragment Call1ArgStub(TokenPosition position,
+                        Call1ArgStubInstr::StubId stub_id);
+
   LocalVariable* LookupVariable(intptr_t kernel_offset);
 
   // Build type argument type checks for the current function.
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index 6026870..66a054c 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -2620,6 +2620,10 @@
     case kCheckLibraryIsLoaded:
       ReadUInt();  // skip library index
       return;
+    case kAwaitExpression:
+      ReadPosition();    // read position.
+      SkipExpression();  // read operand.
+      return;
     case kConstStaticInvocation:
     case kConstConstructorInvocation:
     case kConstListLiteral:
diff --git a/runtime/vm/compiler/frontend/prologue_builder.cc b/runtime/vm/compiler/frontend/prologue_builder.cc
index 635b3d9..86e6638 100644
--- a/runtime/vm/compiler/frontend/prologue_builder.cc
+++ b/runtime/vm/compiler/frontend/prologue_builder.cc
@@ -35,12 +35,12 @@
 
 bool PrologueBuilder::PrologueSkippableOnUncheckedEntry(
     const Function& function) {
-  return !function.HasOptionalParameters() &&
+  return !function.MakesCopyOfParameters() &&
          !function.IsNonImplicitClosureFunction() && !function.IsGeneric();
 }
 
 bool PrologueBuilder::HasEmptyPrologue(const Function& function) {
-  return !function.HasOptionalParameters() && !function.IsGeneric() &&
+  return !function.MakesCopyOfParameters() && !function.IsGeneric() &&
          !function.IsClosureFunction();
 }
 
@@ -51,14 +51,13 @@
 
   const intptr_t previous_block_id = last_used_block_id_;
 
-  const bool load_optional_arguments = function_.HasOptionalParameters();
+  const bool copy_parameters = function_.MakesCopyOfParameters();
   const bool expect_type_args = function_.IsGeneric();
 
   Fragment prologue = Fragment(entry);
 
-  if (load_optional_arguments) {
-    Fragment f =
-        BuildOptionalParameterHandling(parsed_function_->expression_temp_var());
+  if (copy_parameters) {
+    Fragment f = BuildParameterHandling();
     if (link) prologue += f;
   }
   if (function_.IsClosureFunction()) {
@@ -94,8 +93,7 @@
   }
 }
 
-Fragment PrologueBuilder::BuildOptionalParameterHandling(
-    LocalVariable* temp_var) {
+Fragment PrologueBuilder::BuildParameterHandling() {
   Fragment copy_args_prologue;
   const int num_fixed_params = function_.num_fixed_parameters();
   const int num_opt_pos_params = function_.NumOptionalPositionalParameters();
@@ -111,18 +109,22 @@
   // where num_pos_args is the number of positional arguments passed in.
   const int min_num_pos_args = num_fixed_params;
 
-  copy_args_prologue += LoadArgDescriptor();
-  copy_args_prologue +=
-      LoadNativeField(Slot::ArgumentsDescriptor_positional_count());
+  LocalVariable* count_var = nullptr;
+  LocalVariable* optional_count_var = nullptr;
+  if ((num_opt_pos_params > 0) || (num_opt_named_params > 0)) {
+    copy_args_prologue += LoadArgDescriptor();
+    copy_args_prologue +=
+        LoadNativeField(Slot::ArgumentsDescriptor_positional_count());
 
-  copy_args_prologue += LoadArgDescriptor();
-  copy_args_prologue += LoadNativeField(Slot::ArgumentsDescriptor_count());
-  LocalVariable* count_var = MakeTemporary();
+    copy_args_prologue += LoadArgDescriptor();
+    copy_args_prologue += LoadNativeField(Slot::ArgumentsDescriptor_count());
+    count_var = MakeTemporary();
 
-  copy_args_prologue += LoadLocal(count_var);
-  copy_args_prologue += IntConstant(min_num_pos_args);
-  copy_args_prologue += SmiBinaryOp(Token::kSUB, /* truncate= */ true);
-  LocalVariable* optional_count_var = MakeTemporary();
+    copy_args_prologue += LoadLocal(count_var);
+    copy_args_prologue += IntConstant(min_num_pos_args);
+    copy_args_prologue += SmiBinaryOp(Token::kSUB, /* truncate= */ true);
+    optional_count_var = MakeTemporary();
+  }
 
   // Copy mandatory parameters down.
   intptr_t param = 0;
@@ -157,7 +159,11 @@
              ? FlowGraph::ParameterRepresentationAt(function_, param_index)
              : kTagged);
 
-    copy_args_prologue += LoadLocal(optional_count_var);
+    if ((num_opt_pos_params > 0) || (num_opt_named_params > 0)) {
+      copy_args_prologue += LoadLocal(optional_count_var);
+    } else {
+      copy_args_prologue += IntConstant(0);
+    }
     copy_args_prologue += LoadFpRelativeSlot(
         compiler::target::kWordSize *
             (compiler::target::frame_layout.param_end_from_fp +
@@ -208,9 +214,8 @@
     }
     copy_args_prologue += Goto(next_missing /* join good/not_good flows */);
     copy_args_prologue.current = next_missing;
-  } else {
-    ASSERT(num_opt_named_params > 0);
 
+  } else if (num_opt_named_params > 0) {
     const bool check_required_params =
         IsolateGroup::Current()->use_strict_null_safety_checks();
     const intptr_t first_name_offset =
@@ -222,8 +227,9 @@
     SortOptionalNamedParametersInto(opt_param_position, num_fixed_params,
                                     num_params);
 
-    ASSERT(temp_var != nullptr);
-    LocalVariable* optional_count_vars_processed = temp_var;
+    LocalVariable* optional_count_vars_processed =
+        parsed_function_->expression_temp_var();
+    ASSERT(optional_count_vars_processed != nullptr);
     copy_args_prologue += IntConstant(0);
     copy_args_prologue +=
         StoreLocalRaw(TokenPosition::kNoSource, optional_count_vars_processed);
@@ -332,9 +338,11 @@
     }
   }
 
-  copy_args_prologue += Drop();  // optional_count_var
-  copy_args_prologue += Drop();  // count_var
-  copy_args_prologue += Drop();  // positional_count_var
+  if ((num_opt_pos_params > 0) || (num_opt_named_params > 0)) {
+    copy_args_prologue += Drop();  // optional_count_var
+    copy_args_prologue += Drop();  // count_var
+    copy_args_prologue += Drop();  // positional_count_var
+  }
 
   return copy_args_prologue;
 }
diff --git a/runtime/vm/compiler/frontend/prologue_builder.h b/runtime/vm/compiler/frontend/prologue_builder.h
index d474d72..30605ad 100644
--- a/runtime/vm/compiler/frontend/prologue_builder.h
+++ b/runtime/vm/compiler/frontend/prologue_builder.h
@@ -49,7 +49,7 @@
   BlockEntryInstr* BuildPrologue(BlockEntryInstr* entry,
                                  PrologueInfo* prologue_info);
 
-  Fragment BuildOptionalParameterHandling(LocalVariable* temp_var);
+  Fragment BuildParameterHandling();
 
   static bool HasEmptyPrologue(const Function& function);
   static bool PrologueSkippableOnUncheckedEntry(const Function& function);
diff --git a/runtime/vm/compiler/frontend/scope_builder.cc b/runtime/vm/compiler/frontend/scope_builder.cc
index f103f14..c20ee54 100644
--- a/runtime/vm/compiler/frontend/scope_builder.cc
+++ b/runtime/vm/compiler/frontend/scope_builder.cc
@@ -89,6 +89,16 @@
   scope_->set_begin_token_pos(function.token_pos());
   scope_->set_end_token_pos(function.end_token_pos());
 
+  if (function.IsCompactAsyncFunction()) {
+    LocalVariable* suspend_state_var =
+        MakeVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
+                     Symbols::SuspendStateVar(), AbstractType::dynamic_type());
+    suspend_state_var->set_is_forced_stack();
+    suspend_state_var->set_invisible(true);
+    scope_->AddVariable(suspend_state_var);
+    parsed_function_->set_suspend_state_var(suspend_state_var);
+  }
+
   // Add function type arguments variable before current context variable.
   if (function.IsGeneric() || function.HasGenericParent()) {
     LocalVariable* type_args_var = MakeVariable(
@@ -438,6 +448,12 @@
 
   parsed_function_->AllocateVariables();
 
+  // :suspend_state variable should be allocated to a fixed location in
+  // the stack frame.
+  RELEASE_ASSERT((parsed_function_->suspend_state_var() == nullptr) ||
+                 (parsed_function_->suspend_state_var()->index().value() ==
+                  SuspendState::kSuspendStateVarIndex));
+
   return result_;
 }
 
@@ -977,6 +993,10 @@
     case kCheckLibraryIsLoaded:
       helper_.ReadUInt();  // library index
       break;
+    case kAwaitExpression:
+      helper_.ReadPosition();  // read position.
+      VisitExpression();       // read operand.
+      return;
     case kConstStaticInvocation:
     case kConstConstructorInvocation:
     case kConstListLiteral:
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 0331e00..f1ce6f5 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -83,6 +83,19 @@
   V(::, copyRangeFromUint8ListToOneByteString,                                 \
     CopyRangeFromUint8ListToOneByteString, 0x19a1bf41)                         \
   V(_StringBase, _interpolate, StringBaseInterpolate, 0x7da2a580)              \
+  V(_SuspendState, get:_future, SuspendState_getFuture, 0x0e2a7e73)            \
+  V(_SuspendState, set:_future, SuspendState_setFuture, 0x179923b0)            \
+  V(_SuspendState, get:_thenCallback, SuspendState_getThenCallback,            \
+    0xff1dccec)                                                                \
+  V(_SuspendState, set:_thenCallback, SuspendState_setThenCallback,            \
+    0x6446bde9)                                                                \
+  V(_SuspendState, get:_errorCallback, SuspendState_getErrorCallback,          \
+    0x8a6eb3cf)                                                                \
+  V(_SuspendState, set:_errorCallback, SuspendState_setErrorCallback,          \
+    0x4935f88c)                                                                \
+  V(_SuspendState, _createAsyncCallbacks, SuspendState_createAsyncCallbacks,   \
+    0x4add6c13)                                                                \
+  V(_SuspendState, _resume, SuspendState_resume, 0x93d8c5e8)                   \
   V(_IntegerImplementation, toDouble, IntegerToDouble, 0x97728b46)             \
   V(_Double, _add, DoubleAdd, 0xea666327)                                      \
   V(_Double, _sub, DoubleSub, 0x28474c2e)                                      \
diff --git a/runtime/vm/compiler/runtime_api.cc b/runtime/vm/compiler/runtime_api.cc
index 5ae1b56..6ccecf7 100644
--- a/runtime/vm/compiler/runtime_api.cc
+++ b/runtime/vm/compiler/runtime_api.cc
@@ -213,9 +213,10 @@
   return Class::Handle(object_store->closure_class());
 }
 
-const Array& OneArgArgumentsDescriptor() {
+const Array& ArgumentsDescriptorBoxed(intptr_t type_args_len,
+                                      intptr_t num_arguments) {
   return Array::ZoneHandle(
-      ArgumentsDescriptor::NewBoxed(/*type_args_len=*/0, /*num_arguments=*/1));
+      ArgumentsDescriptor::NewBoxed(type_args_len, num_arguments));
 }
 
 bool IsOriginalObject(const Object& object) {
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index f2c212d..267337f 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -120,7 +120,8 @@
 const Class& Float64x2Class();
 const Class& Int32x4Class();
 const Class& ClosureClass();
-const Array& OneArgArgumentsDescriptor();
+const Array& ArgumentsDescriptorBoxed(intptr_t type_args_len,
+                                      intptr_t num_arguments);
 
 template <typename To, typename From>
 const To& CastHandle(const From& from) {
@@ -987,6 +988,21 @@
   FINAL_CLASS();
 };
 
+class SuspendState : public AllStatic {
+ public:
+  static word frame_size_offset();
+  static word pc_offset();
+  static word future_offset();
+  static word then_callback_offset();
+  static word error_callback_offset();
+  static word payload_offset();
+
+  static word HeaderSize();
+  static word InstanceSize();
+  static word InstanceSize(word payload_size);
+  FINAL_CLASS();
+};
+
 class Integer : public AllStatic {
  public:
   static word InstanceSize();
@@ -1222,6 +1238,12 @@
 
   static word random_offset();
 
+  static word suspend_state_init_async_entry_point_offset();
+  static word suspend_state_await_async_entry_point_offset();
+  static word suspend_state_return_async_entry_point_offset();
+  static word suspend_state_return_async_not_future_entry_point_offset();
+  static word suspend_state_handle_exception_entry_point_offset();
+
   static word OffsetFromThread(const dart::Object& object);
   static intptr_t OffsetFromThread(const dart::RuntimeEntry* runtime_entry);
 };
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 2e89961..738ed65 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -245,11 +245,20 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
+    SuspendState_error_callback_offset = 20;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    4;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 12;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 8;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 16;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 380;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    756;
+    780;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    760;
+    784;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
@@ -272,7 +281,7 @@
     Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 200;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 796;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 820;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 344;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
@@ -283,13 +292,13 @@
     Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 824;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 848;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 800;
+    Thread_double_truncate_round_supported_offset = 824;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 828;
+    Thread_service_extension_stream_offset = 852;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     316;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 228;
@@ -305,7 +314,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    776;
+    800;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
@@ -327,13 +336,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 376;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    764;
+    788;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    792;
+    816;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 832;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 856;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -375,11 +384,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 768;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 792;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 772;
+    Thread_saved_shadow_call_stack_offset = 796;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    780;
+    804;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
@@ -400,6 +409,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 764;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 760;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 768;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 772;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 776;
+static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 16;
@@ -413,13 +432,13 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 784;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 808;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 788;
-static constexpr dart::compiler::target::word Thread_random_offset = 808;
+    Thread_callback_stack_return_offset = 812;
+static constexpr dart::compiler::target::word Thread_random_offset = 832;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 816;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 840;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -512,7 +531,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        724, 728, 732, 736, 740, -1, 744, -1, 748, 752, -1, -1, -1, -1, -1, -1};
+        728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -585,6 +604,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     16;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 24;
 static constexpr dart::compiler::target::word String_InstanceSize = 12;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
@@ -840,11 +860,20 @@
 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
+    SuspendState_error_callback_offset = 40;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    8;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 32;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1512;
+    1560;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1520;
+    1568;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -868,7 +897,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
@@ -879,13 +908,13 @@
     Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1632;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1680;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1600;
+    Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1640;
+    Thread_service_extension_stream_offset = 1688;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
@@ -901,7 +930,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1552;
+    1600;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -923,14 +952,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1528;
+    1576;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1584;
+    1632;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -972,11 +1001,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1536;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1584;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1544;
+    Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1560;
+    1608;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -997,6 +1026,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 1528;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 1520;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 1536;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 1552;
+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 = 32;
@@ -1011,13 +1050,13 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1568;
+    1616;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1576;
-static constexpr dart::compiler::target::word Thread_random_offset = 1608;
+    Thread_callback_stack_return_offset = 1624;
+static constexpr dart::compiler::target::word Thread_random_offset = 1656;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1616;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1664;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -1112,8 +1151,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, -1,   -1,   1456, 1464,
-        1472, 1480, 1488, -1,   1496, 1504, -1,   -1};
+        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
+        1480, 1488, 1496, -1,   1504, 1512, -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_header_size = 24;
@@ -1186,6 +1225,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -1438,11 +1478,20 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
+    SuspendState_error_callback_offset = 20;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    4;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 12;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 8;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 16;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 380;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    724;
+    748;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    728;
+    752;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
@@ -1465,7 +1514,7 @@
     Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 200;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 764;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 788;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 344;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
@@ -1476,13 +1525,13 @@
     Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 792;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 816;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 768;
+    Thread_double_truncate_round_supported_offset = 792;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 796;
+    Thread_service_extension_stream_offset = 820;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     316;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 228;
@@ -1498,7 +1547,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    744;
+    768;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
@@ -1520,13 +1569,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 376;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    732;
+    756;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    760;
+    784;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 800;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 824;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -1568,11 +1617,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 736;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 740;
+    Thread_saved_shadow_call_stack_offset = 764;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    748;
+    772;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
@@ -1593,6 +1642,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 732;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 728;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 736;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 740;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 744;
+static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 16;
@@ -1606,13 +1665,13 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 752;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 776;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 756;
-static constexpr dart::compiler::target::word Thread_random_offset = 776;
+    Thread_callback_stack_return_offset = 780;
+static constexpr dart::compiler::target::word Thread_random_offset = 800;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 784;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 808;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -1775,6 +1834,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     16;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 24;
 static constexpr dart::compiler::target::word String_InstanceSize = 12;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
@@ -2030,11 +2090,20 @@
 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
+    SuspendState_error_callback_offset = 40;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    8;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 32;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1576;
+    1624;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1584;
+    1632;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -2058,7 +2127,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
@@ -2069,13 +2138,13 @@
     Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1696;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1744;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1664;
+    Thread_double_truncate_round_supported_offset = 1712;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1704;
+    Thread_service_extension_stream_offset = 1752;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
@@ -2091,7 +2160,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1616;
+    1664;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -2113,14 +2182,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1712;
+    1760;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -2162,11 +2231,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1600;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1648;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1608;
+    Thread_saved_shadow_call_stack_offset = 1656;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1624;
+    1672;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -2187,6 +2256,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 1592;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 1584;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 1600;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 1616;
+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 = 32;
@@ -2201,13 +2280,13 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1640;
-static constexpr dart::compiler::target::word Thread_random_offset = 1672;
+    Thread_callback_stack_return_offset = 1688;
+static constexpr dart::compiler::target::word Thread_random_offset = 1720;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1680;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1728;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -2302,9 +2381,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504,
-        1512, 1520, 1528, 1536, -1,   -1,   -1,   -1,   1544, 1552, -1,
-        -1,   1560, 1568, 1576, -1,   -1,   -1,   -1,   -1,   -1};
+        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
+        -1,   1568, 1576, 1584, -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_header_size = 24;
@@ -2377,6 +2456,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -2630,11 +2710,20 @@
 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
+    SuspendState_error_callback_offset = 32;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    8;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 40;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 28;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1512;
+    1560;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1520;
+    1568;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -2658,7 +2747,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
@@ -2669,13 +2758,13 @@
     Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1632;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1680;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1600;
+    Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1640;
+    Thread_service_extension_stream_offset = 1688;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
@@ -2691,7 +2780,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1552;
+    1600;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -2713,14 +2802,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1528;
+    1576;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1584;
+    1632;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -2762,11 +2851,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1536;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1584;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1544;
+    Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1560;
+    1608;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -2787,6 +2876,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 1528;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 1520;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 1536;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 1552;
+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 = 32;
@@ -2801,13 +2900,13 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1568;
+    1616;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1576;
-static constexpr dart::compiler::target::word Thread_random_offset = 1608;
+    Thread_callback_stack_return_offset = 1624;
+static constexpr dart::compiler::target::word Thread_random_offset = 1656;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1616;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1664;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -2902,8 +3001,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, -1,   -1,   1456, 1464,
-        1472, 1480, 1488, -1,   1496, 1504, -1,   -1};
+        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
+        1480, 1488, 1496, -1,   1504, 1512, -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_header_size = 16;
@@ -2976,6 +3075,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 24;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 40;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -3229,11 +3329,20 @@
 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
+    SuspendState_error_callback_offset = 32;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    8;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 40;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 28;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1576;
+    1624;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1584;
+    1632;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -3257,7 +3366,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
@@ -3268,13 +3377,13 @@
     Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1696;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1744;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1664;
+    Thread_double_truncate_round_supported_offset = 1712;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1704;
+    Thread_service_extension_stream_offset = 1752;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
@@ -3290,7 +3399,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1616;
+    1664;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -3312,14 +3421,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1712;
+    1760;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -3361,11 +3470,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1600;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1648;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1608;
+    Thread_saved_shadow_call_stack_offset = 1656;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1624;
+    1672;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -3386,6 +3495,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 1592;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 1584;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 1600;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 1616;
+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 = 32;
@@ -3400,13 +3519,13 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1640;
-static constexpr dart::compiler::target::word Thread_random_offset = 1672;
+    Thread_callback_stack_return_offset = 1688;
+static constexpr dart::compiler::target::word Thread_random_offset = 1720;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1680;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1728;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -3501,9 +3620,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504,
-        1512, 1520, 1528, 1536, -1,   -1,   -1,   -1,   1544, 1552, -1,
-        -1,   1560, 1568, 1576, -1,   -1,   -1,   -1,   -1,   -1};
+        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
+        -1,   1568, 1576, 1584, -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_header_size = 16;
@@ -3576,6 +3695,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 24;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 40;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -3828,11 +3948,20 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
+    SuspendState_error_callback_offset = 20;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    4;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 12;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 8;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 16;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 380;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    796;
+    820;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    800;
+    824;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
@@ -3855,7 +3984,7 @@
     Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 200;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 836;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 860;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 344;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
@@ -3866,13 +3995,13 @@
     Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 864;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 888;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 840;
+    Thread_double_truncate_round_supported_offset = 864;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 868;
+    Thread_service_extension_stream_offset = 892;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     316;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 228;
@@ -3888,7 +4017,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    816;
+    840;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
@@ -3910,13 +4039,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 376;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    804;
+    828;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    832;
+    856;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 872;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 896;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -3958,11 +4087,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 808;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 832;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 812;
+    Thread_saved_shadow_call_stack_offset = 836;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    820;
+    844;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
@@ -3983,6 +4112,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 804;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 800;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 808;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 812;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 816;
+static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 16;
@@ -3996,13 +4135,13 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 824;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 848;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 828;
-static constexpr dart::compiler::target::word Thread_random_offset = 848;
+    Thread_callback_stack_return_offset = 852;
+static constexpr dart::compiler::target::word Thread_random_offset = 872;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 856;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 880;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -4095,9 +4234,9 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,  -1,  -1, -1, -1, 724, 728, 732, -1,  -1,  736,
-        740, 744, -1, -1, -1, 748, 752, 756, 760, 764, 768,
-        772, 776, -1, -1, -1, -1,  780, 784, 788, 792};
+        -1,  -1,  -1, -1, -1, 728, 732, 736, -1,  -1,  740,
+        744, 748, -1, -1, -1, 752, 756, 760, 764, 768, 772,
+        776, 780, -1, -1, -1, -1,  784, 788, 792, 796};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -4170,6 +4309,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     16;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 24;
 static constexpr dart::compiler::target::word String_InstanceSize = 12;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
@@ -4425,11 +4565,20 @@
 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
+    SuspendState_error_callback_offset = 40;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    8;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 32;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1568;
+    1616;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1576;
+    1624;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -4453,7 +4602,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
@@ -4464,13 +4613,13 @@
     Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1688;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1736;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1656;
+    Thread_double_truncate_round_supported_offset = 1704;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1696;
+    Thread_service_extension_stream_offset = 1744;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
@@ -4486,7 +4635,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1608;
+    1656;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -4508,14 +4657,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1584;
+    1632;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1640;
+    1688;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1704;
+    1752;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -4557,11 +4706,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1640;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1600;
+    Thread_saved_shadow_call_stack_offset = 1648;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1616;
+    1664;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -4582,6 +4731,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 1584;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 1576;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 1592;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1600;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 1608;
+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 = 32;
@@ -4596,13 +4755,13 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1624;
+    1672;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1632;
-static constexpr dart::compiler::target::word Thread_random_offset = 1664;
+    Thread_callback_stack_return_offset = 1680;
+static constexpr dart::compiler::target::word Thread_random_offset = 1712;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1672;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1720;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -4697,9 +4856,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,   -1,   -1, -1, -1, 1424, 1432, 1440, -1,   -1,   1448,
-        1456, 1464, -1, -1, -1, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, -1, -1, -1, -1,   1536, 1544, 1552, 1560};
+        -1,   -1,   -1, -1, -1, 1432, 1440, 1448, -1,   -1,   1456,
+        1464, 1472, -1, -1, -1, 1480, 1488, 1496, 1504, 1512, 1520,
+        1528, 1536, -1, -1, -1, -1,   1544, 1552, 1560, 1568};
 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_header_size = 24;
@@ -4772,6 +4931,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -5020,11 +5180,20 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
+    SuspendState_error_callback_offset = 20;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    4;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 12;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 8;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 16;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 380;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    756;
+    780;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    760;
+    784;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
@@ -5047,7 +5216,7 @@
     Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 200;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 796;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 820;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 344;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
@@ -5058,13 +5227,13 @@
     Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 824;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 848;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 800;
+    Thread_double_truncate_round_supported_offset = 824;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 828;
+    Thread_service_extension_stream_offset = 852;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     316;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 228;
@@ -5080,7 +5249,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    776;
+    800;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
@@ -5102,13 +5271,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 376;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    764;
+    788;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    792;
+    816;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 832;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 856;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -5150,11 +5319,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 768;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 792;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 772;
+    Thread_saved_shadow_call_stack_offset = 796;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    780;
+    804;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
@@ -5175,6 +5344,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 764;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 760;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 768;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 772;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 776;
+static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 16;
@@ -5188,13 +5367,13 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 784;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 808;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 788;
-static constexpr dart::compiler::target::word Thread_random_offset = 808;
+    Thread_callback_stack_return_offset = 812;
+static constexpr dart::compiler::target::word Thread_random_offset = 832;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 816;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 840;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -5287,7 +5466,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        724, 728, 732, 736, 740, -1, 744, -1, 748, 752, -1, -1, -1, -1, -1, -1};
+        728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -5360,6 +5539,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     16;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 24;
 static constexpr dart::compiler::target::word String_InstanceSize = 12;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
@@ -5609,11 +5789,20 @@
 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
+    SuspendState_error_callback_offset = 40;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    8;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 32;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1512;
+    1560;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1520;
+    1568;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -5637,7 +5826,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
@@ -5648,13 +5837,13 @@
     Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1632;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1680;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1600;
+    Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1640;
+    Thread_service_extension_stream_offset = 1688;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
@@ -5670,7 +5859,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1552;
+    1600;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -5692,14 +5881,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1528;
+    1576;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1584;
+    1632;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -5741,11 +5930,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1536;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1584;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1544;
+    Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1560;
+    1608;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -5766,6 +5955,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 1528;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 1520;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 1536;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 1552;
+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 = 32;
@@ -5780,13 +5979,13 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1568;
+    1616;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1576;
-static constexpr dart::compiler::target::word Thread_random_offset = 1608;
+    Thread_callback_stack_return_offset = 1624;
+static constexpr dart::compiler::target::word Thread_random_offset = 1656;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1616;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1664;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -5881,8 +6080,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, -1,   -1,   1456, 1464,
-        1472, 1480, 1488, -1,   1496, 1504, -1,   -1};
+        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
+        1480, 1488, 1496, -1,   1504, 1512, -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_header_size = 24;
@@ -5955,6 +6154,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -6201,11 +6401,20 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
+    SuspendState_error_callback_offset = 20;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    4;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 12;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 8;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 16;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 380;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    724;
+    748;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    728;
+    752;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
@@ -6228,7 +6437,7 @@
     Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 200;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 764;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 788;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 344;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
@@ -6239,13 +6448,13 @@
     Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 792;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 816;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 768;
+    Thread_double_truncate_round_supported_offset = 792;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 796;
+    Thread_service_extension_stream_offset = 820;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     316;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 228;
@@ -6261,7 +6470,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    744;
+    768;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
@@ -6283,13 +6492,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 376;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    732;
+    756;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    760;
+    784;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 800;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 824;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -6331,11 +6540,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 736;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 740;
+    Thread_saved_shadow_call_stack_offset = 764;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    748;
+    772;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
@@ -6356,6 +6565,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 732;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 728;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 736;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 740;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 744;
+static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 16;
@@ -6369,13 +6588,13 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 752;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 776;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 756;
-static constexpr dart::compiler::target::word Thread_random_offset = 776;
+    Thread_callback_stack_return_offset = 780;
+static constexpr dart::compiler::target::word Thread_random_offset = 800;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 784;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 808;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -6538,6 +6757,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     16;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 24;
 static constexpr dart::compiler::target::word String_InstanceSize = 12;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
@@ -6787,11 +7007,20 @@
 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
+    SuspendState_error_callback_offset = 40;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    8;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 32;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1576;
+    1624;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1584;
+    1632;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -6815,7 +7044,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
@@ -6826,13 +7055,13 @@
     Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1696;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1744;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1664;
+    Thread_double_truncate_round_supported_offset = 1712;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1704;
+    Thread_service_extension_stream_offset = 1752;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
@@ -6848,7 +7077,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1616;
+    1664;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -6870,14 +7099,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1712;
+    1760;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -6919,11 +7148,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1600;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1648;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1608;
+    Thread_saved_shadow_call_stack_offset = 1656;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1624;
+    1672;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -6944,6 +7173,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 1592;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 1584;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 1600;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 1616;
+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 = 32;
@@ -6958,13 +7197,13 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1640;
-static constexpr dart::compiler::target::word Thread_random_offset = 1672;
+    Thread_callback_stack_return_offset = 1688;
+static constexpr dart::compiler::target::word Thread_random_offset = 1720;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1680;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1728;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -7059,9 +7298,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504,
-        1512, 1520, 1528, 1536, -1,   -1,   -1,   -1,   1544, 1552, -1,
-        -1,   1560, 1568, 1576, -1,   -1,   -1,   -1,   -1,   -1};
+        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
+        -1,   1568, 1576, 1584, -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_header_size = 24;
@@ -7134,6 +7373,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -7381,11 +7621,20 @@
 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
+    SuspendState_error_callback_offset = 32;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    8;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 40;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 28;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1512;
+    1560;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1520;
+    1568;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -7409,7 +7658,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
@@ -7420,13 +7669,13 @@
     Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1632;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1680;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1600;
+    Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1640;
+    Thread_service_extension_stream_offset = 1688;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
@@ -7442,7 +7691,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1552;
+    1600;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -7464,14 +7713,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1528;
+    1576;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1584;
+    1632;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -7513,11 +7762,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1536;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1584;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1544;
+    Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1560;
+    1608;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -7538,6 +7787,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 1528;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 1520;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 1536;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 1552;
+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 = 32;
@@ -7552,13 +7811,13 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1568;
+    1616;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1576;
-static constexpr dart::compiler::target::word Thread_random_offset = 1608;
+    Thread_callback_stack_return_offset = 1624;
+static constexpr dart::compiler::target::word Thread_random_offset = 1656;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1616;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1664;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -7653,8 +7912,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, -1,   -1,   1456, 1464,
-        1472, 1480, 1488, -1,   1496, 1504, -1,   -1};
+        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
+        1480, 1488, 1496, -1,   1504, 1512, -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_header_size = 16;
@@ -7727,6 +7986,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 24;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 40;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -7974,11 +8234,20 @@
 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
+    SuspendState_error_callback_offset = 32;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    8;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 40;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 28;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1576;
+    1624;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1584;
+    1632;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -8002,7 +8271,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
@@ -8013,13 +8282,13 @@
     Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1696;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1744;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1664;
+    Thread_double_truncate_round_supported_offset = 1712;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1704;
+    Thread_service_extension_stream_offset = 1752;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
@@ -8035,7 +8304,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1616;
+    1664;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -8057,14 +8326,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1712;
+    1760;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -8106,11 +8375,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1600;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1648;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1608;
+    Thread_saved_shadow_call_stack_offset = 1656;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1624;
+    1672;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -8131,6 +8400,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 1592;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 1584;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 1600;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 1616;
+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 = 32;
@@ -8145,13 +8424,13 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1640;
-static constexpr dart::compiler::target::word Thread_random_offset = 1672;
+    Thread_callback_stack_return_offset = 1688;
+static constexpr dart::compiler::target::word Thread_random_offset = 1720;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1680;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1728;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -8246,9 +8525,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504,
-        1512, 1520, 1528, 1536, -1,   -1,   -1,   -1,   1544, 1552, -1,
-        -1,   1560, 1568, 1576, -1,   -1,   -1,   -1,   -1,   -1};
+        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
+        -1,   1568, 1576, 1584, -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_header_size = 16;
@@ -8321,6 +8600,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 24;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 40;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -8567,11 +8847,20 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
+    SuspendState_error_callback_offset = 20;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    4;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 12;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 8;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 16;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 380;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    796;
+    820;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    800;
+    824;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
@@ -8594,7 +8883,7 @@
     Thread_allocate_object_slow_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 200;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 836;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 860;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 344;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
@@ -8605,13 +8894,13 @@
     Thread_call_to_runtime_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 140;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 864;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 888;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 840;
+    Thread_double_truncate_round_supported_offset = 864;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 868;
+    Thread_service_extension_stream_offset = 892;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     316;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 228;
@@ -8627,7 +8916,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    816;
+    840;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
@@ -8649,13 +8938,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 376;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    804;
+    828;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    832;
+    856;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 872;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 896;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -8697,11 +8986,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 808;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 832;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 812;
+    Thread_saved_shadow_call_stack_offset = 836;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    820;
+    844;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
@@ -8722,6 +9011,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 804;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 800;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 808;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 812;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 816;
+static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 72;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 16;
@@ -8735,13 +9034,13 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 824;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 848;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 828;
-static constexpr dart::compiler::target::word Thread_random_offset = 848;
+    Thread_callback_stack_return_offset = 852;
+static constexpr dart::compiler::target::word Thread_random_offset = 872;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 856;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 880;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -8834,9 +9133,9 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,  -1,  -1, -1, -1, 724, 728, 732, -1,  -1,  736,
-        740, 744, -1, -1, -1, 748, 752, 756, 760, 764, 768,
-        772, 776, -1, -1, -1, -1,  780, 784, 788, 792};
+        -1,  -1,  -1, -1, -1, 728, 732, 736, -1,  -1,  740,
+        744, 748, -1, -1, -1, 752, 756, 760, 764, 768, 772,
+        776, 780, -1, -1, -1, -1,  784, 788, 792, 796};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -8909,6 +9208,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     16;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 24;
 static constexpr dart::compiler::target::word String_InstanceSize = 12;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize = 8;
 static constexpr dart::compiler::target::word LoadingUnit_InstanceSize = 20;
@@ -9158,11 +9458,20 @@
 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
+    SuspendState_error_callback_offset = 40;
+static constexpr dart::compiler::target::word SuspendState_frame_size_offset =
+    8;
+static constexpr dart::compiler::target::word SuspendState_future_offset = 24;
+static constexpr dart::compiler::target::word SuspendState_payload_offset = 48;
+static constexpr dart::compiler::target::word SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    SuspendState_then_callback_offset = 32;
+static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1568;
+    1616;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1576;
+    1624;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -9186,7 +9495,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
@@ -9197,13 +9506,13 @@
     Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 256;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1688;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1736;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1656;
+    Thread_double_truncate_round_supported_offset = 1704;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1696;
+    Thread_service_extension_stream_offset = 1744;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 432;
@@ -9219,7 +9528,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1608;
+    1656;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -9241,14 +9550,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1584;
+    1632;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1640;
+    1688;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1704;
+    1752;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
@@ -9290,11 +9599,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1640;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1600;
+    Thread_saved_shadow_call_stack_offset = 1648;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1616;
+    1664;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -9315,6 +9624,16 @@
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_async_entry_point_offset = 1584;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_init_async_entry_point_offset = 1576;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_entry_point_offset = 1592;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1600;
+static constexpr dart::compiler::target::word
+    Thread_suspend_state_handle_exception_entry_point_offset = 1608;
+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 = 32;
@@ -9329,13 +9648,13 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1624;
+    1672;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1632;
-static constexpr dart::compiler::target::word Thread_random_offset = 1664;
+    Thread_callback_stack_return_offset = 1680;
+static constexpr dart::compiler::target::word Thread_random_offset = 1712;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1672;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1720;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -9430,9 +9749,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,   -1,   -1, -1, -1, 1424, 1432, 1440, -1,   -1,   1448,
-        1456, 1464, -1, -1, -1, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, -1, -1, -1, -1,   1536, 1544, 1552, 1560};
+        -1,   -1,   -1, -1, -1, 1432, 1440, 1448, -1,   -1,   1456,
+        1464, 1472, -1, -1, -1, 1480, 1488, 1496, 1504, 1512, 1520,
+        1528, 1536, -1, -1, -1, -1,   1544, 1552, 1560, 1568};
 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_header_size = 24;
@@ -9505,6 +9824,7 @@
 static constexpr dart::compiler::target::word SingleTargetCache_InstanceSize =
     32;
 static constexpr dart::compiler::target::word StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word String_InstanceSize = 16;
 static constexpr dart::compiler::target::word SubtypeTestCache_InstanceSize =
     16;
@@ -9789,11 +10109,22 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_error_callback_offset = 20;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_frame_size_offset = 4;
+static constexpr dart::compiler::target::word AOT_SuspendState_future_offset =
+    12;
+static constexpr dart::compiler::target::word AOT_SuspendState_payload_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_SuspendState_pc_offset = 8;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_then_callback_offset = 16;
+static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 380;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 756;
+    AOT_Thread_active_exception_offset = 780;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 760;
+    AOT_Thread_active_stacktrace_offset = 784;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
@@ -9817,7 +10148,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 200;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    796;
+    820;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 344;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -9830,13 +10161,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 140;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    824;
+    848;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 800;
+    AOT_Thread_double_truncate_round_supported_offset = 824;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 828;
+    AOT_Thread_service_extension_stream_offset = 852;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     316;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -9853,7 +10184,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 776;
+    AOT_Thread_execution_state_offset = 800;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
@@ -9875,14 +10206,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 764;
+    AOT_Thread_global_object_pool_offset = 788;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 792;
+    AOT_Thread_exit_through_ffi_offset = 816;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    832;
+    856;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
@@ -9926,11 +10257,11 @@
     112;
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 768;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 772;
+    AOT_Thread_saved_shadow_call_stack_offset = 796;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 780;
+    AOT_Thread_safepoint_state_offset = 804;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
@@ -9952,6 +10283,16 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 76;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_async_entry_point_offset = 764;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 760;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 768;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 772;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 776;
+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;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
@@ -9967,14 +10308,14 @@
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    784;
+    808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 788;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 808;
+    AOT_Thread_callback_stack_return_offset = 812;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 832;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 328;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    816;
+    840;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -10087,7 +10428,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        724, 728, 732, 736, 740, -1, 744, -1, 748, 752, -1, -1, -1, -1, -1, -1};
+        728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -10170,6 +10511,7 @@
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word AOT_SuspendState_HeaderSize = 24;
 static constexpr dart::compiler::target::word AOT_String_InstanceSize = 12;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_InstanceSize = 8;
@@ -10458,11 +10800,22 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_error_callback_offset = 40;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_frame_size_offset = 8;
+static constexpr dart::compiler::target::word AOT_SuspendState_future_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_SuspendState_payload_offset =
+    48;
+static constexpr dart::compiler::target::word AOT_SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_then_callback_offset = 32;
+static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1512;
+    AOT_Thread_active_exception_offset = 1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1520;
+    AOT_Thread_active_stacktrace_offset = 1568;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -10486,7 +10839,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -10499,13 +10852,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1600;
+    AOT_Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1640;
+    AOT_Thread_service_extension_stream_offset = 1688;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -10522,7 +10875,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1552;
+    AOT_Thread_execution_state_offset = 1600;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -10544,14 +10897,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1528;
+    AOT_Thread_global_object_pool_offset = 1576;
 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 = 1584;
+    AOT_Thread_exit_through_ffi_offset = 1632;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -10596,11 +10949,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1536;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1544;
+    AOT_Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1560;
+    AOT_Thread_safepoint_state_offset = 1608;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -10622,6 +10975,16 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_async_entry_point_offset = 1528;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1520;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1536;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1552;
+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;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
@@ -10637,14 +11000,14 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1568;
+    1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1576;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1608;
+    AOT_Thread_callback_stack_return_offset = 1624;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1656;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1616;
+    1664;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -10758,8 +11121,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, -1,   -1,   1456, 1464,
-        1472, 1480, 1488, -1,   1496, 1504, -1,   -1};
+        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
+        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -10842,6 +11205,7 @@
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_InstanceSize = 16;
@@ -11133,11 +11497,22 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_error_callback_offset = 40;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_frame_size_offset = 8;
+static constexpr dart::compiler::target::word AOT_SuspendState_future_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_SuspendState_payload_offset =
+    48;
+static constexpr dart::compiler::target::word AOT_SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_then_callback_offset = 32;
+static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1576;
+    AOT_Thread_active_exception_offset = 1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1584;
+    AOT_Thread_active_stacktrace_offset = 1632;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -11161,7 +11536,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -11174,13 +11549,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1696;
+    1744;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1664;
+    AOT_Thread_double_truncate_round_supported_offset = 1712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1704;
+    AOT_Thread_service_extension_stream_offset = 1752;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -11197,7 +11572,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1616;
+    AOT_Thread_execution_state_offset = 1664;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -11219,14 +11594,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1592;
+    AOT_Thread_global_object_pool_offset = 1640;
 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 = 1648;
+    AOT_Thread_exit_through_ffi_offset = 1696;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1712;
+    1760;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -11271,11 +11646,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1600;
+    1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1608;
+    AOT_Thread_saved_shadow_call_stack_offset = 1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1624;
+    AOT_Thread_safepoint_state_offset = 1672;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -11297,6 +11672,16 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_async_entry_point_offset = 1592;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1584;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1600;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1616;
+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;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
@@ -11312,14 +11697,14 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1640;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1672;
+    AOT_Thread_callback_stack_return_offset = 1688;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1720;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1680;
+    1728;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -11433,9 +11818,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504,
-        1512, 1520, 1528, 1536, -1,   -1,   -1,   -1,   1544, 1552, -1,
-        -1,   1560, 1568, 1576, -1,   -1,   -1,   -1,   -1,   -1};
+        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
+        -1,   1568, 1576, 1584, -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;
@@ -11518,6 +11903,7 @@
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_InstanceSize = 16;
@@ -11805,11 +12191,22 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_error_callback_offset = 32;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_frame_size_offset = 8;
+static constexpr dart::compiler::target::word AOT_SuspendState_future_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_SuspendState_payload_offset =
+    40;
+static constexpr dart::compiler::target::word AOT_SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_then_callback_offset = 28;
+static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1512;
+    AOT_Thread_active_exception_offset = 1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1520;
+    AOT_Thread_active_stacktrace_offset = 1568;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -11833,7 +12230,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -11846,13 +12243,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1600;
+    AOT_Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1640;
+    AOT_Thread_service_extension_stream_offset = 1688;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -11869,7 +12266,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1552;
+    AOT_Thread_execution_state_offset = 1600;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -11891,14 +12288,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1528;
+    AOT_Thread_global_object_pool_offset = 1576;
 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 = 1584;
+    AOT_Thread_exit_through_ffi_offset = 1632;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -11943,11 +12340,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1536;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1544;
+    AOT_Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1560;
+    AOT_Thread_safepoint_state_offset = 1608;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -11969,6 +12366,16 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_async_entry_point_offset = 1528;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1520;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1536;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1552;
+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;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
@@ -11984,14 +12391,14 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1568;
+    1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1576;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1608;
+    AOT_Thread_callback_stack_return_offset = 1624;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1656;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1616;
+    1664;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -12105,8 +12512,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, -1,   -1,   1456, 1464,
-        1472, 1480, 1488, -1,   1496, 1504, -1,   -1};
+        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
+        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -12189,6 +12596,7 @@
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_SuspendState_HeaderSize = 40;
 static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_InstanceSize = 16;
@@ -12476,11 +12884,22 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_error_callback_offset = 32;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_frame_size_offset = 8;
+static constexpr dart::compiler::target::word AOT_SuspendState_future_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_SuspendState_payload_offset =
+    40;
+static constexpr dart::compiler::target::word AOT_SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_then_callback_offset = 28;
+static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1576;
+    AOT_Thread_active_exception_offset = 1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1584;
+    AOT_Thread_active_stacktrace_offset = 1632;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -12504,7 +12923,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -12517,13 +12936,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1696;
+    1744;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1664;
+    AOT_Thread_double_truncate_round_supported_offset = 1712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1704;
+    AOT_Thread_service_extension_stream_offset = 1752;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -12540,7 +12959,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1616;
+    AOT_Thread_execution_state_offset = 1664;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -12562,14 +12981,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1592;
+    AOT_Thread_global_object_pool_offset = 1640;
 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 = 1648;
+    AOT_Thread_exit_through_ffi_offset = 1696;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1712;
+    1760;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -12614,11 +13033,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1600;
+    1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1608;
+    AOT_Thread_saved_shadow_call_stack_offset = 1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1624;
+    AOT_Thread_safepoint_state_offset = 1672;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -12640,6 +13059,16 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_async_entry_point_offset = 1592;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1584;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1600;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1616;
+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;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
@@ -12655,14 +13084,14 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1640;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1672;
+    AOT_Thread_callback_stack_return_offset = 1688;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1720;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1680;
+    1728;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -12776,9 +13205,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504,
-        1512, 1520, 1528, 1536, -1,   -1,   -1,   -1,   1544, 1552, -1,
-        -1,   1560, 1568, 1576, -1,   -1,   -1,   -1,   -1,   -1};
+        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
+        -1,   1568, 1576, 1584, -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;
@@ -12861,6 +13290,7 @@
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_SuspendState_HeaderSize = 40;
 static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_InstanceSize = 16;
@@ -13148,11 +13578,22 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_error_callback_offset = 20;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_frame_size_offset = 4;
+static constexpr dart::compiler::target::word AOT_SuspendState_future_offset =
+    12;
+static constexpr dart::compiler::target::word AOT_SuspendState_payload_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_SuspendState_pc_offset = 8;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_then_callback_offset = 16;
+static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 380;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 796;
+    AOT_Thread_active_exception_offset = 820;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 800;
+    AOT_Thread_active_stacktrace_offset = 824;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
@@ -13176,7 +13617,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 200;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    836;
+    860;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 344;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -13189,13 +13630,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 140;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    864;
+    888;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 840;
+    AOT_Thread_double_truncate_round_supported_offset = 864;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 868;
+    AOT_Thread_service_extension_stream_offset = 892;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     316;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -13212,7 +13653,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 816;
+    AOT_Thread_execution_state_offset = 840;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
@@ -13234,14 +13675,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 804;
+    AOT_Thread_global_object_pool_offset = 828;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 832;
+    AOT_Thread_exit_through_ffi_offset = 856;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    872;
+    896;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
@@ -13285,11 +13726,11 @@
     112;
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 808;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 832;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 812;
+    AOT_Thread_saved_shadow_call_stack_offset = 836;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 820;
+    AOT_Thread_safepoint_state_offset = 844;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
@@ -13311,6 +13752,16 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 76;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_async_entry_point_offset = 804;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 800;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 808;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 812;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 816;
+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;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
@@ -13326,14 +13777,14 @@
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    824;
+    848;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 828;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 848;
+    AOT_Thread_callback_stack_return_offset = 852;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 872;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 328;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    856;
+    880;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -13446,9 +13897,9 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,  -1,  -1, -1, -1, 724, 728, 732, -1,  -1,  736,
-        740, 744, -1, -1, -1, 748, 752, 756, 760, 764, 768,
-        772, 776, -1, -1, -1, -1,  780, 784, 788, 792};
+        -1,  -1,  -1, -1, -1, 728, 732, 736, -1,  -1,  740,
+        744, 748, -1, -1, -1, 752, 756, 760, 764, 768, 772,
+        776, 780, -1, -1, -1, -1,  784, 788, 792, 796};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -13531,6 +13982,7 @@
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word AOT_SuspendState_HeaderSize = 24;
 static constexpr dart::compiler::target::word AOT_String_InstanceSize = 12;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_InstanceSize = 8;
@@ -13819,11 +14271,22 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_error_callback_offset = 40;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_frame_size_offset = 8;
+static constexpr dart::compiler::target::word AOT_SuspendState_future_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_SuspendState_payload_offset =
+    48;
+static constexpr dart::compiler::target::word AOT_SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_then_callback_offset = 32;
+static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1568;
+    AOT_Thread_active_exception_offset = 1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1576;
+    AOT_Thread_active_stacktrace_offset = 1624;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -13847,7 +14310,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -13860,13 +14323,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1688;
+    1736;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1656;
+    AOT_Thread_double_truncate_round_supported_offset = 1704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1696;
+    AOT_Thread_service_extension_stream_offset = 1744;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -13883,7 +14346,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1608;
+    AOT_Thread_execution_state_offset = 1656;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -13905,14 +14368,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1584;
+    AOT_Thread_global_object_pool_offset = 1632;
 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 = 1640;
+    AOT_Thread_exit_through_ffi_offset = 1688;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1704;
+    1752;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -13957,11 +14420,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1600;
+    AOT_Thread_saved_shadow_call_stack_offset = 1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1616;
+    AOT_Thread_safepoint_state_offset = 1664;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -13983,6 +14446,16 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_async_entry_point_offset = 1584;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1576;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1592;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1600;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1608;
+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;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
@@ -13998,14 +14471,14 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1624;
+    1672;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1632;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1664;
+    AOT_Thread_callback_stack_return_offset = 1680;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1712;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1672;
+    1720;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -14119,9 +14592,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,   -1,   -1, -1, -1, 1424, 1432, 1440, -1,   -1,   1448,
-        1456, 1464, -1, -1, -1, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, -1, -1, -1, -1,   1536, 1544, 1552, 1560};
+        -1,   -1,   -1, -1, -1, 1432, 1440, 1448, -1,   -1,   1456,
+        1464, 1472, -1, -1, -1, 1480, 1488, 1496, 1504, 1512, 1520,
+        1528, 1536, -1, -1, -1, -1,   1544, 1552, 1560, 1568};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -14204,6 +14677,7 @@
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_InstanceSize = 16;
@@ -14486,11 +14960,22 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_error_callback_offset = 20;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_frame_size_offset = 4;
+static constexpr dart::compiler::target::word AOT_SuspendState_future_offset =
+    12;
+static constexpr dart::compiler::target::word AOT_SuspendState_payload_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_SuspendState_pc_offset = 8;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_then_callback_offset = 16;
+static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 380;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 756;
+    AOT_Thread_active_exception_offset = 780;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 760;
+    AOT_Thread_active_stacktrace_offset = 784;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
@@ -14514,7 +14999,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 200;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    796;
+    820;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 344;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -14527,13 +15012,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 140;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    824;
+    848;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 800;
+    AOT_Thread_double_truncate_round_supported_offset = 824;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 828;
+    AOT_Thread_service_extension_stream_offset = 852;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     316;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -14550,7 +15035,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 776;
+    AOT_Thread_execution_state_offset = 800;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
@@ -14572,14 +15057,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 764;
+    AOT_Thread_global_object_pool_offset = 788;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 792;
+    AOT_Thread_exit_through_ffi_offset = 816;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    832;
+    856;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
@@ -14623,11 +15108,11 @@
     112;
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 768;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 772;
+    AOT_Thread_saved_shadow_call_stack_offset = 796;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 780;
+    AOT_Thread_safepoint_state_offset = 804;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
@@ -14649,6 +15134,16 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 76;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_async_entry_point_offset = 764;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 760;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 768;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 772;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 776;
+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;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
@@ -14664,14 +15159,14 @@
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    784;
+    808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 788;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 808;
+    AOT_Thread_callback_stack_return_offset = 812;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 832;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 328;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    816;
+    840;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -14784,7 +15279,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        724, 728, 732, 736, 740, -1, 744, -1, 748, 752, -1, -1, -1, -1, -1, -1};
+        728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -14867,6 +15362,7 @@
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word AOT_SuspendState_HeaderSize = 24;
 static constexpr dart::compiler::target::word AOT_String_InstanceSize = 12;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_InstanceSize = 8;
@@ -15148,11 +15644,22 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_error_callback_offset = 40;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_frame_size_offset = 8;
+static constexpr dart::compiler::target::word AOT_SuspendState_future_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_SuspendState_payload_offset =
+    48;
+static constexpr dart::compiler::target::word AOT_SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_then_callback_offset = 32;
+static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1512;
+    AOT_Thread_active_exception_offset = 1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1520;
+    AOT_Thread_active_stacktrace_offset = 1568;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -15176,7 +15683,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -15189,13 +15696,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1600;
+    AOT_Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1640;
+    AOT_Thread_service_extension_stream_offset = 1688;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -15212,7 +15719,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1552;
+    AOT_Thread_execution_state_offset = 1600;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -15234,14 +15741,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1528;
+    AOT_Thread_global_object_pool_offset = 1576;
 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 = 1584;
+    AOT_Thread_exit_through_ffi_offset = 1632;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -15286,11 +15793,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1536;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1544;
+    AOT_Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1560;
+    AOT_Thread_safepoint_state_offset = 1608;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -15312,6 +15819,16 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_async_entry_point_offset = 1528;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1520;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1536;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1552;
+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;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
@@ -15327,14 +15844,14 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1568;
+    1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1576;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1608;
+    AOT_Thread_callback_stack_return_offset = 1624;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1656;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1616;
+    1664;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -15448,8 +15965,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, -1,   -1,   1456, 1464,
-        1472, 1480, 1488, -1,   1496, 1504, -1,   -1};
+        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
+        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -15532,6 +16049,7 @@
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_InstanceSize = 16;
@@ -15816,11 +16334,22 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_error_callback_offset = 40;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_frame_size_offset = 8;
+static constexpr dart::compiler::target::word AOT_SuspendState_future_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_SuspendState_payload_offset =
+    48;
+static constexpr dart::compiler::target::word AOT_SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_then_callback_offset = 32;
+static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1576;
+    AOT_Thread_active_exception_offset = 1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1584;
+    AOT_Thread_active_stacktrace_offset = 1632;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -15844,7 +16373,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -15857,13 +16386,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1696;
+    1744;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1664;
+    AOT_Thread_double_truncate_round_supported_offset = 1712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1704;
+    AOT_Thread_service_extension_stream_offset = 1752;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -15880,7 +16409,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1616;
+    AOT_Thread_execution_state_offset = 1664;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -15902,14 +16431,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1592;
+    AOT_Thread_global_object_pool_offset = 1640;
 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 = 1648;
+    AOT_Thread_exit_through_ffi_offset = 1696;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1712;
+    1760;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -15954,11 +16483,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1600;
+    1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1608;
+    AOT_Thread_saved_shadow_call_stack_offset = 1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1624;
+    AOT_Thread_safepoint_state_offset = 1672;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -15980,6 +16509,16 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_async_entry_point_offset = 1592;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1584;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1600;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1616;
+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;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
@@ -15995,14 +16534,14 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1640;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1672;
+    AOT_Thread_callback_stack_return_offset = 1688;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1720;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1680;
+    1728;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -16116,9 +16655,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504,
-        1512, 1520, 1528, 1536, -1,   -1,   -1,   -1,   1544, 1552, -1,
-        -1,   1560, 1568, 1576, -1,   -1,   -1,   -1,   -1,   -1};
+        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
+        -1,   1568, 1576, 1584, -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;
@@ -16201,6 +16740,7 @@
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_InstanceSize = 16;
@@ -16481,11 +17021,22 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_error_callback_offset = 32;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_frame_size_offset = 8;
+static constexpr dart::compiler::target::word AOT_SuspendState_future_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_SuspendState_payload_offset =
+    40;
+static constexpr dart::compiler::target::word AOT_SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_then_callback_offset = 28;
+static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1512;
+    AOT_Thread_active_exception_offset = 1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1520;
+    AOT_Thread_active_stacktrace_offset = 1568;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -16509,7 +17060,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -16522,13 +17073,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1600;
+    AOT_Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1640;
+    AOT_Thread_service_extension_stream_offset = 1688;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -16545,7 +17096,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1552;
+    AOT_Thread_execution_state_offset = 1600;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -16567,14 +17118,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1528;
+    AOT_Thread_global_object_pool_offset = 1576;
 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 = 1584;
+    AOT_Thread_exit_through_ffi_offset = 1632;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -16619,11 +17170,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1536;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1544;
+    AOT_Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1560;
+    AOT_Thread_safepoint_state_offset = 1608;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -16645,6 +17196,16 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_async_entry_point_offset = 1528;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1520;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1536;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1544;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1552;
+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;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
@@ -16660,14 +17221,14 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1568;
+    1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1576;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1608;
+    AOT_Thread_callback_stack_return_offset = 1624;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1656;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1616;
+    1664;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -16781,8 +17342,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, -1,   -1,   1456, 1464,
-        1472, 1480, 1488, -1,   1496, 1504, -1,   -1};
+        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
+        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -16865,6 +17426,7 @@
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_SuspendState_HeaderSize = 40;
 static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_InstanceSize = 16;
@@ -17145,11 +17707,22 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_error_callback_offset = 32;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_frame_size_offset = 8;
+static constexpr dart::compiler::target::word AOT_SuspendState_future_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_SuspendState_payload_offset =
+    40;
+static constexpr dart::compiler::target::word AOT_SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_then_callback_offset = 28;
+static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1576;
+    AOT_Thread_active_exception_offset = 1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1584;
+    AOT_Thread_active_stacktrace_offset = 1632;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -17173,7 +17746,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1656;
+    1704;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -17186,13 +17759,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1696;
+    1744;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1664;
+    AOT_Thread_double_truncate_round_supported_offset = 1712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1704;
+    AOT_Thread_service_extension_stream_offset = 1752;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -17209,7 +17782,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1616;
+    AOT_Thread_execution_state_offset = 1664;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -17231,14 +17804,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1592;
+    AOT_Thread_global_object_pool_offset = 1640;
 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 = 1648;
+    AOT_Thread_exit_through_ffi_offset = 1696;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1712;
+    1760;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -17283,11 +17856,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1600;
+    1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1608;
+    AOT_Thread_saved_shadow_call_stack_offset = 1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1624;
+    AOT_Thread_safepoint_state_offset = 1672;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -17309,6 +17882,16 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_async_entry_point_offset = 1592;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1584;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1600;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1608;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1616;
+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;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
@@ -17324,14 +17907,14 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1632;
+    1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1640;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1672;
+    AOT_Thread_callback_stack_return_offset = 1688;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1720;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1680;
+    1728;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -17445,9 +18028,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504,
-        1512, 1520, 1528, 1536, -1,   -1,   -1,   -1,   1544, 1552, -1,
-        -1,   1560, 1568, 1576, -1,   -1,   -1,   -1,   -1,   -1};
+        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
+        -1,   1568, 1576, 1584, -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;
@@ -17530,6 +18113,7 @@
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_SuspendState_HeaderSize = 40;
 static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_InstanceSize = 16;
@@ -17810,11 +18394,22 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_error_callback_offset = 20;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_frame_size_offset = 4;
+static constexpr dart::compiler::target::word AOT_SuspendState_future_offset =
+    12;
+static constexpr dart::compiler::target::word AOT_SuspendState_payload_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_SuspendState_pc_offset = 8;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_then_callback_offset = 16;
+static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 380;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 796;
+    AOT_Thread_active_exception_offset = 820;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 800;
+    AOT_Thread_active_stacktrace_offset = 824;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
@@ -17838,7 +18433,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 200;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    836;
+    860;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 344;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -17851,13 +18446,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 140;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    864;
+    888;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 840;
+    AOT_Thread_double_truncate_round_supported_offset = 864;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 868;
+    AOT_Thread_service_extension_stream_offset = 892;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     316;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -17874,7 +18469,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 816;
+    AOT_Thread_execution_state_offset = 840;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 256;
 static constexpr dart::compiler::target::word
@@ -17896,14 +18491,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 804;
+    AOT_Thread_global_object_pool_offset = 828;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 136;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 832;
+    AOT_Thread_exit_through_ffi_offset = 856;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    872;
+    896;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
@@ -17947,11 +18542,11 @@
     112;
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 808;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 832;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 812;
+    AOT_Thread_saved_shadow_call_stack_offset = 836;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 820;
+    AOT_Thread_safepoint_state_offset = 844;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
@@ -17973,6 +18568,16 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 76;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_async_entry_point_offset = 804;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 800;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 808;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 812;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 816;
+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;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
@@ -17988,14 +18593,14 @@
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    824;
+    848;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 828;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 848;
+    AOT_Thread_callback_stack_return_offset = 852;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 872;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 328;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    856;
+    880;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -18108,9 +18713,9 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,  -1,  -1, -1, -1, 724, 728, 732, -1,  -1,  736,
-        740, 744, -1, -1, -1, 748, 752, 756, 760, 764, 768,
-        772, 776, -1, -1, -1, -1,  780, 784, 788, 792};
+        -1,  -1,  -1, -1, -1, 728, 732, 736, -1,  -1,  740,
+        744, 748, -1, -1, -1, 752, 756, 760, 764, 768, 772,
+        776, 780, -1, -1, -1, -1,  784, 788, 792, 796};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -18193,6 +18798,7 @@
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 20;
+static constexpr dart::compiler::target::word AOT_SuspendState_HeaderSize = 24;
 static constexpr dart::compiler::target::word AOT_String_InstanceSize = 12;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_InstanceSize = 8;
@@ -18474,11 +19080,22 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
+    AOT_SuspendState_error_callback_offset = 40;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_frame_size_offset = 8;
+static constexpr dart::compiler::target::word AOT_SuspendState_future_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_SuspendState_payload_offset =
+    48;
+static constexpr dart::compiler::target::word AOT_SuspendState_pc_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_SuspendState_then_callback_offset = 32;
+static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1568;
+    AOT_Thread_active_exception_offset = 1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1576;
+    AOT_Thread_active_stacktrace_offset = 1624;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
@@ -18502,7 +19119,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 376;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1648;
+    1696;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -18515,13 +19132,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 256;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1688;
+    1736;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1656;
+    AOT_Thread_double_truncate_round_supported_offset = 1704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1696;
+    AOT_Thread_service_extension_stream_offset = 1744;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     608;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -18538,7 +19155,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1608;
+    AOT_Thread_execution_state_offset = 1656;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
@@ -18560,14 +19177,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1584;
+    AOT_Thread_global_object_pool_offset = 1632;
 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 = 1640;
+    AOT_Thread_exit_through_ffi_offset = 1688;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1704;
+    1752;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
@@ -18612,11 +19229,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 672;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1592;
+    1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1600;
+    AOT_Thread_saved_shadow_call_stack_offset = 1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1616;
+    AOT_Thread_safepoint_state_offset = 1664;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
@@ -18638,6 +19255,16 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_async_entry_point_offset = 1584;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_init_async_entry_point_offset = 1576;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1592;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1600;
+static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1608;
+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;
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
@@ -18653,14 +19280,14 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1624;
+    1672;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1632;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1664;
+    AOT_Thread_callback_stack_return_offset = 1680;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1712;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1672;
+    1720;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -18774,9 +19401,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,   -1,   -1, -1, -1, 1424, 1432, 1440, -1,   -1,   1448,
-        1456, 1464, -1, -1, -1, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, -1, -1, -1, -1,   1536, 1544, 1552, 1560};
+        -1,   -1,   -1, -1, -1, 1432, 1440, 1448, -1,   -1,   1456,
+        1464, 1472, -1, -1, -1, 1480, 1488, 1496, 1504, 1512, 1520,
+        1528, 1536, -1, -1, -1, -1,   1544, 1552, 1560, 1568};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -18859,6 +19486,7 @@
 static constexpr dart::compiler::target::word
     AOT_SingleTargetCache_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_StackTrace_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_SuspendState_HeaderSize = 48;
 static constexpr dart::compiler::target::word AOT_String_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_InstanceSize = 16;
diff --git a/runtime/vm/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h
index 65982cf..8fa14a3 100644
--- a/runtime/vm/compiler/runtime_offsets_list.h
+++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -190,6 +190,12 @@
   FIELD(String, hash_offset)                                                   \
   FIELD(String, length_offset)                                                 \
   FIELD(SubtypeTestCache, cache_offset)                                        \
+  FIELD(SuspendState, error_callback_offset)                                   \
+  FIELD(SuspendState, frame_size_offset)                                       \
+  FIELD(SuspendState, future_offset)                                           \
+  FIELD(SuspendState, payload_offset)                                          \
+  FIELD(SuspendState, pc_offset)                                               \
+  FIELD(SuspendState, then_callback_offset)                                    \
   FIELD(Thread, AllocateArray_entry_point_offset)                              \
   FIELD(Thread, active_exception_offset)                                       \
   FIELD(Thread, active_stacktrace_offset)                                      \
@@ -275,6 +281,11 @@
                                                                                \
   FIELD(Thread, stack_overflow_shared_without_fpu_regs_stub_offset)            \
   FIELD(Thread, store_buffer_block_offset)                                     \
+  FIELD(Thread, suspend_state_await_async_entry_point_offset)                  \
+  FIELD(Thread, suspend_state_init_async_entry_point_offset)                   \
+  FIELD(Thread, suspend_state_return_async_entry_point_offset)                 \
+  FIELD(Thread, suspend_state_return_async_not_future_entry_point_offset)      \
+  FIELD(Thread, suspend_state_handle_exception_entry_point_offset)             \
   FIELD(Thread, top_exit_frame_info_offset)                                    \
   FIELD(Thread, top_offset)                                                    \
   FIELD(Thread, top_resource_offset)                                           \
@@ -416,6 +427,7 @@
   SIZEOF(Sentinel, InstanceSize, UntaggedSentinel)                             \
   SIZEOF(SingleTargetCache, InstanceSize, UntaggedSingleTargetCache)           \
   SIZEOF(StackTrace, InstanceSize, UntaggedStackTrace)                         \
+  SIZEOF(SuspendState, HeaderSize, UntaggedSuspendState)                       \
   SIZEOF(String, InstanceSize, UntaggedString)                                 \
   SIZEOF(SubtypeTestCache, InstanceSize, UntaggedSubtypeTestCache)             \
   SIZEOF(LoadingUnit, InstanceSize, UntaggedLoadingUnit)                       \
@@ -439,6 +451,7 @@
   PAYLOAD_SIZEOF(CompressedStackMaps, InstanceSize, HeaderSize)                \
   PAYLOAD_SIZEOF(InstructionsSection, InstanceSize, HeaderSize)                \
   PAYLOAD_SIZEOF(PcDescriptors, InstanceSize, HeaderSize)                      \
+  PAYLOAD_SIZEOF(SuspendState, InstanceSize, HeaderSize)                       \
   PAYLOAD_SIZEOF(TypedData, InstanceSize, HeaderSize)
 
 #define JIT_OFFSETS_LIST(FIELD, ARRAY, SIZEOF, ARRAY_SIZEOF, PAYLOAD_SIZEOF,   \
diff --git a/runtime/vm/compiler/stub_code_compiler.cc b/runtime/vm/compiler/stub_code_compiler.cc
index 2f3601c..9a145c4 100644
--- a/runtime/vm/compiler/stub_code_compiler.cc
+++ b/runtime/vm/compiler/stub_code_compiler.cc
@@ -15,6 +15,7 @@
 
 #include "vm/compiler/api/type_check_mode.h"
 #include "vm/compiler/assembler/assembler.h"
+#include "vm/stack_frame.h"
 
 #define __ assembler->
 
@@ -1273,6 +1274,434 @@
   __ Ret();
 }
 
+static intptr_t SuspendStateFpOffset() {
+  return compiler::target::frame_layout.FrameSlotForVariableIndex(
+             SuspendState::kSuspendStateVarIndex) *
+         compiler::target::kWordSize;
+}
+
+void StubCodeCompiler::GenerateSuspendStub(
+    Assembler* assembler,
+    intptr_t suspend_entry_point_offset) {
+  const Register kArgument = SuspendStubABI::kArgumentReg;
+  const Register kTemp = SuspendStubABI::kTempReg;
+  const Register kFrameSize = SuspendStubABI::kFrameSizeReg;
+  const Register kSuspendState = SuspendStubABI::kSuspendStateReg;
+  const Register kFuture = SuspendStubABI::kFutureReg;
+  const Register kSrcFrame = SuspendStubABI::kSrcFrameReg;
+  const Register kDstFrame = SuspendStubABI::kDstFrameReg;
+  Label alloc_slow_case, alloc_done, init_done, old_gen_object, call_await;
+
+#if defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
+  SPILLS_LR_TO_FRAME({});  // Simulate entering the caller (Dart) frame.
+#endif
+
+  __ LoadFromOffset(kSuspendState, Address(FPREG, SuspendStateFpOffset()));
+
+  __ AddImmediate(
+      kFrameSize, FPREG,
+      -target::frame_layout.last_param_from_entry_sp * target::kWordSize);
+  __ SubRegisters(kFrameSize, SPREG);
+
+  __ EnterStubFrame();
+
+  __ CompareClassId(kSuspendState, kSuspendStateCid, kTemp);
+  __ BranchIf(EQUAL, &init_done);
+
+  __ MoveRegister(kFuture, kSuspendState);
+  __ Comment("Allocate SuspendState");
+
+  // Check for allocation tracing.
+  NOT_IN_PRODUCT(
+      __ MaybeTraceAllocation(kSuspendStateCid, &alloc_slow_case, kTemp));
+
+  // Compute the rounded instance size.
+  const intptr_t fixed_size_plus_alignment_padding =
+      (target::SuspendState::HeaderSize() +
+       target::ObjectAlignment::kObjectAlignment - 1);
+  __ AddImmediate(kTemp, kFrameSize, fixed_size_plus_alignment_padding);
+  __ AndImmediate(kTemp, -target::ObjectAlignment::kObjectAlignment);
+
+  // Now allocate the object.
+  __ LoadFromOffset(kSuspendState, Address(THR, target::Thread::top_offset()));
+  __ AddRegisters(kTemp, kSuspendState);
+  // Check if the allocation fits into the remaining space.
+  __ CompareWithMemoryValue(kTemp, Address(THR, target::Thread::end_offset()));
+  __ BranchIf(UNSIGNED_GREATER_EQUAL, &alloc_slow_case);
+
+  // Successfully allocated the object, now update top to point to
+  // next object start and initialize the object.
+  __ StoreToOffset(kTemp, Address(THR, target::Thread::top_offset()));
+  __ SubRegisters(kTemp, kSuspendState);
+  __ AddImmediate(kSuspendState, kHeapObjectTag);
+
+  // Calculate the size tag.
+  {
+    Label size_tag_overflow, done;
+    __ CompareImmediate(kTemp, target::UntaggedObject::kSizeTagMaxSizeTag);
+    __ BranchIf(UNSIGNED_GREATER, &size_tag_overflow, Assembler::kNearJump);
+    __ LslImmediate(kTemp, target::UntaggedObject::kTagBitsSizeTagPos -
+                               target::ObjectAlignment::kObjectAlignmentLog2);
+    __ Jump(&done, Assembler::kNearJump);
+
+    __ Bind(&size_tag_overflow);
+    // Set overflow size tag value.
+    __ LoadImmediate(kTemp, 0);
+
+    __ Bind(&done);
+    uword tags = target::MakeTagWordForNewSpaceObject(kSuspendStateCid, 0);
+    __ OrImmediate(kTemp, tags);
+    __ StoreToOffset(
+        kTemp,
+        FieldAddress(kSuspendState, target::Object::tags_offset()));  // Tags.
+  }
+
+  __ StoreToOffset(
+      kFrameSize,
+      FieldAddress(kSuspendState, target::SuspendState::frame_size_offset()));
+  __ StoreCompressedIntoObjectNoBarrier(
+      kSuspendState,
+      FieldAddress(kSuspendState, target::SuspendState::future_offset()),
+      kFuture);
+
+  {
+#if defined(TARGET_ARCH_ARM64) || defined(TARGET_ARCH_RISCV32) ||              \
+    defined(TARGET_ARCH_RISCV64)
+    const Register kNullReg = NULL_REG;
+#else
+    const Register kNullReg = kTemp;
+    __ LoadObject(kNullReg, NullObject());
+#endif
+    __ StoreCompressedIntoObjectNoBarrier(
+        kSuspendState,
+        FieldAddress(kSuspendState,
+                     target::SuspendState::then_callback_offset()),
+        kNullReg);
+    __ StoreCompressedIntoObjectNoBarrier(
+        kSuspendState,
+        FieldAddress(kSuspendState,
+                     target::SuspendState::error_callback_offset()),
+        kNullReg);
+  }
+
+  __ Bind(&alloc_done);
+
+  __ Comment("Save SuspendState to frame");
+  __ LoadFromOffset(kTemp, Address(FPREG, kSavedCallerFpSlotFromFp *
+                                              compiler::target::kWordSize));
+  __ StoreToOffset(kSuspendState, Address(kTemp, SuspendStateFpOffset()));
+
+  __ Bind(&init_done);
+  __ Comment("Copy frame to SuspendState");
+
+  __ LoadFromOffset(
+      kTemp, Address(FPREG, kSavedCallerPcSlotFromFp * target::kWordSize));
+  __ StoreToOffset(
+      kTemp, FieldAddress(kSuspendState, target::SuspendState::pc_offset()));
+
+  if (kSrcFrame == THR) {
+    __ PushRegister(THR);
+  }
+  __ AddImmediate(kSrcFrame, FPREG, kCallerSpSlotFromFp * target::kWordSize);
+  __ AddImmediate(kDstFrame, kSuspendState,
+                  target::SuspendState::payload_offset() - kHeapObjectTag);
+  __ CopyMemoryWords(kSrcFrame, kDstFrame, kFrameSize, kTemp);
+  if (kSrcFrame == THR) {
+    __ PopRegister(THR);
+  }
+
+#ifdef DEBUG
+  {
+    Label okay;
+    __ LoadFromOffset(
+        kTemp,
+        FieldAddress(kSuspendState, target::SuspendState::frame_size_offset()));
+    __ AddRegisters(kTemp, kSuspendState);
+    __ LoadFromOffset(
+        kTemp, FieldAddress(kTemp, target::SuspendState::payload_offset() +
+                                       SuspendStateFpOffset()));
+    __ CompareRegisters(kTemp, kSuspendState);
+    __ BranchIf(EQUAL, &okay);
+    __ Breakpoint();
+    __ Bind(&okay);
+  }
+#endif
+
+  // Push arguments for _SuspendState._await* method.
+  __ PushRegister(kSuspendState);
+  __ PushRegister(kArgument);
+
+  // Write barrier.
+  __ BranchIfBit(kSuspendState, target::ObjectAlignment::kNewObjectBitPosition,
+                 ZERO, &old_gen_object);
+
+  __ Bind(&call_await);
+  __ Comment("Call _SuspendState._await method");
+  __ Call(Address(THR, suspend_entry_point_offset));
+
+  __ LeaveStubFrame();
+#if !defined(TARGET_ARCH_X64) && !defined(TARGET_ARCH_IA32)
+  // Drop caller frame on all architectures except x86 which needs to maintain
+  // call/return balance to avoid performance regressions.
+  __ LeaveDartFrame();
+#endif
+  __ Ret();
+
+#if defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
+  // Slow path is executed with Dart and stub frames still on the stack.
+  SPILLS_LR_TO_FRAME({});
+  SPILLS_LR_TO_FRAME({});
+#endif
+  __ Bind(&alloc_slow_case);
+  __ Comment("SuspendState Allocation slow case");
+  __ PushRegister(kArgument);   // Save argument.
+  __ PushRegister(kFrameSize);  // Save frame size.
+  __ PushObject(NullObject());  // Make space on stack for the return value.
+  __ SmiTag(kFrameSize);
+  __ PushRegister(kFrameSize);  // Pass frame size to runtime entry.
+  __ PushRegister(kFuture);     // Pass future.
+  __ CallRuntime(kAllocateSuspendStateRuntimeEntry, 2);
+  __ Drop(2);                     // Drop arguments
+  __ PopRegister(kSuspendState);  // Get result.
+  __ PopRegister(kFrameSize);     // Restore frame size.
+  __ PopRegister(kArgument);      // Restore argument.
+  __ Jump(&alloc_done);
+
+  __ Bind(&old_gen_object);
+  __ Comment("Old gen SuspendState slow case");
+  {
+#if defined(TARGET_ARCH_IA32)
+    LeafRuntimeScope rt(assembler, /*frame_size=*/2 * target::kWordSize,
+                        /*preserve_registers=*/false);
+    __ movl(Address(ESP, 1 * target::kWordSize), THR);
+    __ movl(Address(ESP, 0 * target::kWordSize), kSuspendState);
+#else
+    LeafRuntimeScope rt(assembler, /*frame_size=*/0,
+                        /*preserve_registers=*/false);
+    __ MoveRegister(CallingConventions::ArgumentRegisters[0], kSuspendState);
+    __ MoveRegister(CallingConventions::ArgumentRegisters[1], THR);
+#endif
+    rt.Call(kEnsureRememberedAndMarkingDeferredRuntimeEntry, 2);
+  }
+  __ Jump(&call_await);
+}
+
+void StubCodeCompiler::GenerateAwaitAsyncStub(Assembler* assembler) {
+  GenerateSuspendStub(
+      assembler,
+      target::Thread::suspend_state_await_async_entry_point_offset());
+}
+
+void StubCodeCompiler::GenerateInitSuspendableFunctionStub(
+    Assembler* assembler,
+    intptr_t init_entry_point_offset) {
+  const Register kTypeArgs = InitSuspendableFunctionStubABI::kTypeArgsReg;
+
+  __ EnterStubFrame();
+  __ LoadObject(ARGS_DESC_REG, ArgumentsDescriptorBoxed(/*type_args_len=*/1,
+                                                        /*num_arguments=*/0));
+  __ PushRegister(kTypeArgs);
+  __ Call(Address(THR, init_entry_point_offset));
+  __ LeaveStubFrame();
+
+  // Set :suspend_state in the caller frame.
+  __ StoreToOffset(CallingConventions::kReturnReg,
+                   Address(FPREG, SuspendStateFpOffset()));
+  __ Ret();
+}
+
+void StubCodeCompiler::GenerateInitAsyncStub(Assembler* assembler) {
+  GenerateInitSuspendableFunctionStub(
+      assembler, target::Thread::suspend_state_init_async_entry_point_offset());
+}
+
+void StubCodeCompiler::GenerateResumeStub(Assembler* assembler) {
+  const Register kSuspendState = ResumeStubABI::kSuspendStateReg;
+  const Register kTemp = ResumeStubABI::kTempReg;
+  const Register kFrameSize = ResumeStubABI::kFrameSizeReg;
+  const Register kSrcFrame = ResumeStubABI::kSrcFrameReg;
+  const Register kDstFrame = ResumeStubABI::kDstFrameReg;
+  const Register kResumePc = ResumeStubABI::kResumePcReg;
+  const Register kException = ResumeStubABI::kExceptionReg;
+  const Register kStackTrace = ResumeStubABI::kStackTraceReg;
+  Label rethrow_exception;
+
+  // Top of the stack on entry:
+  // ... [SuspendState] [value] [exception] [stackTrace] [ReturnAddress]
+
+  __ EnterDartFrame(0);
+
+  const intptr_t param_offset =
+      target::frame_layout.param_end_from_fp * target::kWordSize;
+  __ LoadFromOffset(kSuspendState,
+                    Address(FPREG, param_offset + 4 * target::kWordSize));
+#ifdef DEBUG
+  {
+    Label okay;
+    __ CompareClassId(kSuspendState, kSuspendStateCid, kTemp);
+    __ BranchIf(EQUAL, &okay);
+    __ Breakpoint();
+    __ Bind(&okay);
+  }
+#endif
+
+  __ LoadFromOffset(
+      kFrameSize,
+      FieldAddress(kSuspendState, target::SuspendState::frame_size_offset()));
+#ifdef DEBUG
+  {
+    Label okay;
+    __ MoveRegister(kTemp, kFrameSize);
+    __ AddRegisters(kTemp, kSuspendState);
+    __ LoadFromOffset(
+        kTemp, FieldAddress(kTemp, target::SuspendState::payload_offset() +
+                                       SuspendStateFpOffset()));
+    __ CompareRegisters(kTemp, kSuspendState);
+    __ BranchIf(EQUAL, &okay);
+    __ Breakpoint();
+    __ Bind(&okay);
+  }
+#endif
+  // Do not copy fixed frame between the first local and FP.
+  __ AddImmediate(kFrameSize, (target::frame_layout.first_local_from_fp + 1) *
+                                  target::kWordSize);
+  __ SubRegisters(SPREG, kFrameSize);
+
+  __ Comment("Copy frame from SuspendState");
+  __ AddImmediate(kSrcFrame, kSuspendState,
+                  target::SuspendState::payload_offset() - kHeapObjectTag);
+  __ MoveRegister(kDstFrame, SPREG);
+  __ CopyMemoryWords(kSrcFrame, kDstFrame, kFrameSize, kTemp);
+
+  __ Comment("Transfer control");
+
+  __ LoadFromOffset(kResumePc, FieldAddress(kSuspendState,
+                                            target::SuspendState::pc_offset()));
+  __ StoreZero(FieldAddress(kSuspendState, target::SuspendState::pc_offset()),
+               kTemp);
+
+  __ LoadFromOffset(kException,
+                    Address(FPREG, param_offset + 2 * target::kWordSize));
+  __ CompareObject(kException, NullObject());
+  __ BranchIf(NOT_EQUAL, &rethrow_exception);
+
+#if defined(TARGET_ARCH_X64) || defined(TARGET_ARCH_IA32)
+  // Adjust resume PC to skip extra epilogue generated on x86
+  // right after the call to suspend stub in order to maintain
+  // call/return balance.
+  __ AddImmediate(kResumePc, SuspendStubABI::kResumePcDistance);
+#endif
+
+  __ LoadFromOffset(CallingConventions::kReturnReg,
+                    Address(FPREG, param_offset + 3 * target::kWordSize));
+
+  __ Jump(kResumePc);
+
+  __ Comment("Rethrow exception");
+  __ Bind(&rethrow_exception);
+
+  __ LoadFromOffset(kStackTrace,
+                    Address(FPREG, param_offset + 1 * target::kWordSize));
+
+  // Adjust stack/LR/RA as if suspended Dart function called
+  // stub with kResumePc as a return address.
+#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
+  __ PushRegister(kResumePc);
+#elif defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
+  RESTORES_RETURN_ADDRESS_FROM_REGISTER_TO_LR(__ MoveRegister(LR, kResumePc));
+#elif defined(TARGET_ARCH_RISCV32) || defined(TARGET_ARCH_RISCV64)
+  __ MoveRegister(RA, kResumePc);
+#else
+#error Unknown target
+#endif
+
+#if !defined(TARGET_ARCH_IA32)
+  __ set_constant_pool_allowed(false);
+#endif
+  __ EnterStubFrame();
+  __ PushObject(NullObject());  // Make room for (unused) result.
+  __ PushRegister(kException);
+  __ PushRegister(kStackTrace);
+  __ CallRuntime(kReThrowRuntimeEntry, /*argument_count=*/2);
+  __ Breakpoint();
+}
+
+void StubCodeCompiler::GenerateReturnStub(Assembler* assembler,
+                                          intptr_t return_entry_point_offset) {
+  const Register kSuspendState = ReturnStubABI::kSuspendStateReg;
+
+#if defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
+  SPILLS_LR_TO_FRAME({});  // Simulate entering the caller (Dart) frame.
+#endif
+
+  __ LoadFromOffset(kSuspendState, Address(FPREG, SuspendStateFpOffset()));
+  __ LeaveDartFrame();
+
+  __ EnterStubFrame();
+  __ PushRegister(kSuspendState);
+  __ PushRegister(CallingConventions::kReturnReg);
+  __ Call(Address(THR, return_entry_point_offset));
+  __ LeaveStubFrame();
+  __ Ret();
+}
+
+void StubCodeCompiler::GenerateReturnAsyncStub(Assembler* assembler) {
+  GenerateReturnStub(
+      assembler,
+      target::Thread::suspend_state_return_async_entry_point_offset());
+}
+
+void StubCodeCompiler::GenerateReturnAsyncNotFutureStub(Assembler* assembler) {
+  GenerateReturnStub(
+      assembler,
+      target::Thread::
+          suspend_state_return_async_not_future_entry_point_offset());
+}
+
+void StubCodeCompiler::GenerateAsyncExceptionHandlerStub(Assembler* assembler) {
+  const Register kSuspendState = AsyncExceptionHandlerStubABI::kSuspendStateReg;
+  ASSERT(kSuspendState != kExceptionObjectReg);
+  ASSERT(kSuspendState != kStackTraceObjectReg);
+  Label rethrow_exception;
+
+#if defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
+  SPILLS_LR_TO_FRAME({});  // Simulate entering the caller (Dart) frame.
+#endif
+
+  __ LoadFromOffset(kSuspendState, Address(FPREG, SuspendStateFpOffset()));
+
+  // Check if suspend_state is initialized. Otherwise
+  // exception was thrown from the prologue code and
+  // should be synchronuously propagated.
+  __ CompareObject(kSuspendState, NullObject());
+  __ BranchIf(EQUAL, &rethrow_exception);
+
+  __ LeaveDartFrame();
+  __ EnterStubFrame();
+  __ PushRegister(kSuspendState);
+  __ PushRegister(kExceptionObjectReg);
+  __ PushRegister(kStackTraceObjectReg);
+  __ Call(Address(
+      THR,
+      target::Thread::suspend_state_handle_exception_entry_point_offset()));
+  __ LeaveStubFrame();
+  __ Ret();
+
+#if defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
+  // Rethrow case is used when Dart frame is still on the stack.
+  SPILLS_LR_TO_FRAME({});
+#endif
+  __ Comment("Rethrow exception");
+  __ Bind(&rethrow_exception);
+  __ LeaveDartFrame();
+  __ EnterStubFrame();
+  __ PushObject(NullObject());  // Make room for (unused) result.
+  __ PushRegister(kExceptionObjectReg);
+  __ PushRegister(kStackTraceObjectReg);
+  __ CallRuntime(kReThrowRuntimeEntry, /*argument_count=*/2);
+  __ Breakpoint();
+}
+
 }  // namespace compiler
 
 }  // namespace dart
diff --git a/runtime/vm/compiler/stub_code_compiler.h b/runtime/vm/compiler/stub_code_compiler.h
index 7dd9e8f..7cd39e1 100644
--- a/runtime/vm/compiler/stub_code_compiler.h
+++ b/runtime/vm/compiler/stub_code_compiler.h
@@ -198,6 +198,14 @@
                                               bool with_fpu_regs);
 
   static void GenerateRangeError(Assembler* assembler, bool with_fpu_regs);
+
+  static void GenerateSuspendStub(Assembler* assembler,
+                                  intptr_t suspend_entry_point_offset);
+  static void GenerateInitSuspendableFunctionStub(
+      Assembler* assembler,
+      intptr_t init_entry_point_offset);
+  static void GenerateReturnStub(Assembler* assembler,
+                                 intptr_t return_entry_point_offset);
 };
 
 }  // namespace compiler
diff --git a/runtime/vm/compiler/stub_code_compiler_arm.cc b/runtime/vm/compiler/stub_code_compiler_arm.cc
index dda5901..177186a 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm.cc
@@ -1040,8 +1040,7 @@
     __ b(&slow_case, HI);
 
     const intptr_t cid = kArrayCid;
-    NOT_IN_PRODUCT(__ LoadAllocationStatsAddress(R4, cid));
-    NOT_IN_PRODUCT(__ MaybeTraceAllocation(R4, &slow_case));
+    NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, &slow_case, R4));
 
     const intptr_t fixed_size_plus_alignment_padding =
         target::Array::header_size() +
@@ -1346,8 +1345,7 @@
   ASSERT(kSmiTagShift == 1);
   __ bic(R2, R2, Operand(target::ObjectAlignment::kObjectAlignment - 1));
 
-  NOT_IN_PRODUCT(__ LoadAllocationStatsAddress(R8, kContextCid));
-  NOT_IN_PRODUCT(__ MaybeTraceAllocation(R8, slow_case));
+  NOT_IN_PRODUCT(__ MaybeTraceAllocation(kContextCid, slow_case, R8));
   // Now allocate the object.
   // R1: number of context variables.
   // R2: object size.
@@ -3432,8 +3430,7 @@
 
   if (!FLAG_use_slow_path && FLAG_inline_alloc) {
     Label call_runtime;
-    NOT_IN_PRODUCT(__ LoadAllocationStatsAddress(R2, cid));
-    NOT_IN_PRODUCT(__ MaybeTraceAllocation(R2, &call_runtime));
+    NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, &call_runtime, R2));
     __ mov(R2, Operand(AllocateTypedDataArrayABI::kLengthReg));
     /* Check that length is a positive Smi. */
     /* R2: requested array length argument. */
diff --git a/runtime/vm/compiler/stub_code_compiler_arm64.cc b/runtime/vm/compiler/stub_code_compiler_arm64.cc
index 3a5737b..a3cb533 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm64.cc
@@ -1285,7 +1285,7 @@
     __ b(&slow_case, HI);
 
     const intptr_t cid = kArrayCid;
-    NOT_IN_PRODUCT(__ MaybeTraceAllocation(kArrayCid, R4, &slow_case));
+    NOT_IN_PRODUCT(__ MaybeTraceAllocation(kArrayCid, &slow_case, R4));
 
     // Calculate and align allocation size.
     // Load new object start and calculate next object start.
@@ -1630,7 +1630,7 @@
   ASSERT(kSmiTagShift == 1);
   __ andi(R2, R2, Immediate(~(target::ObjectAlignment::kObjectAlignment - 1)));
 
-  NOT_IN_PRODUCT(__ MaybeTraceAllocation(kContextCid, R4, slow_case));
+  NOT_IN_PRODUCT(__ MaybeTraceAllocation(kContextCid, slow_case, R4));
   // Now allocate the object.
   // R1: number of context variables.
   // R2: object size.
@@ -3784,7 +3784,7 @@
 
   if (!FLAG_use_slow_path && FLAG_inline_alloc) {
     Label call_runtime;
-    NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, R2, &call_runtime));
+    NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, &call_runtime, R2));
     __ mov(R2, AllocateTypedDataArrayABI::kLengthReg);
     /* Check that length is a positive Smi. */
     /* R2: requested array length argument. */
diff --git a/runtime/vm/compiler/stub_code_compiler_ia32.cc b/runtime/vm/compiler/stub_code_compiler_ia32.cc
index 05c9646..60760eb 100644
--- a/runtime/vm/compiler/stub_code_compiler_ia32.cc
+++ b/runtime/vm/compiler/stub_code_compiler_ia32.cc
@@ -673,7 +673,7 @@
             Address(EBP, saved_stacktrace_slot_from_fp * target::kWordSize));
   }
 
-  __ LeaveFrame();
+  __ LeaveDartFrame();
   __ popl(EDX);       // Preserve return address.
   __ movl(ESP, EBP);  // Discard optimized frame.
   __ subl(ESP, EAX);  // Reserve space for deoptimized frame.
@@ -706,7 +706,7 @@
                                   target::kWordSize));
   }
   // Code above cannot cause GC.
-  __ LeaveFrame();
+  __ LeaveDartFrame();
 
   // Frame is fully rewritten at this point and it is safe to perform a GC.
   // Materialize any objects that were deferred by FillFrame because they
@@ -730,7 +730,7 @@
     __ popl(EDX);  // Restore exception.
     __ popl(EAX);  // Restore stacktrace.
   }
-  __ LeaveFrame();
+  __ LeaveStubFrame();
 
   __ popl(ECX);       // Pop return address.
   __ addl(ESP, EBX);  // Remove materialization arguments.
@@ -838,9 +838,8 @@
     __ cmpl(AllocateArrayABI::kLengthReg, max_len);
     __ j(ABOVE, &slow_case);
 
-    NOT_IN_PRODUCT(__ MaybeTraceAllocation(kArrayCid,
-                                           AllocateArrayABI::kResultReg,
-                                           &slow_case, Assembler::kFarJump));
+    NOT_IN_PRODUCT(__ MaybeTraceAllocation(kArrayCid, &slow_case,
+                                           AllocateArrayABI::kResultReg));
 
     const intptr_t fixed_size_plus_alignment_padding =
         target::Array::header_size() +
@@ -1116,8 +1115,7 @@
   __ leal(EBX, Address(EDX, TIMES_4, fixed_size_plus_alignment_padding));
   __ andl(EBX, Immediate(-target::ObjectAlignment::kObjectAlignment));
 
-  NOT_IN_PRODUCT(__ MaybeTraceAllocation(kContextCid, EAX, slow_case,
-                                         Assembler::kFarJump));
+  NOT_IN_PRODUCT(__ MaybeTraceAllocation(kContextCid, slow_case, EAX));
 
   // Now allocate the object.
   // EDX: number of context variables.
@@ -2988,8 +2986,7 @@
     Label call_runtime;
     __ pushl(AllocateTypedDataArrayABI::kLengthReg);
 
-    NOT_IN_PRODUCT(
-        __ MaybeTraceAllocation(cid, ECX, &call_runtime, Assembler::kFarJump));
+    NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, &call_runtime, ECX));
     __ movl(EDI, AllocateTypedDataArrayABI::kLengthReg);
     /* Check that length is a positive Smi. */
     /* EDI: requested array length argument. */
diff --git a/runtime/vm/compiler/stub_code_compiler_riscv.cc b/runtime/vm/compiler/stub_code_compiler_riscv.cc
index b9b67fd..55fc441 100644
--- a/runtime/vm/compiler/stub_code_compiler_riscv.cc
+++ b/runtime/vm/compiler/stub_code_compiler_riscv.cc
@@ -1103,7 +1103,7 @@
     __ BranchIf(HI, &slow_case);
 
     const intptr_t cid = kArrayCid;
-    NOT_IN_PRODUCT(__ MaybeTraceAllocation(kArrayCid, T4, &slow_case));
+    NOT_IN_PRODUCT(__ MaybeTraceAllocation(kArrayCid, &slow_case, T4));
 
     // Calculate and align allocation size.
     // Load new object start and calculate next object start.
@@ -1431,7 +1431,7 @@
   __ AddImmediate(T2, fixed_size_plus_alignment_padding);
   __ andi(T2, T2, ~(target::ObjectAlignment::kObjectAlignment - 1));
 
-  NOT_IN_PRODUCT(__ MaybeTraceAllocation(kContextCid, T4, slow_case));
+  NOT_IN_PRODUCT(__ MaybeTraceAllocation(kContextCid, slow_case, T4));
   // Now allocate the object.
   // T1: number of context variables.
   // T2: object size.
@@ -3562,7 +3562,7 @@
 
   if (!FLAG_use_slow_path && FLAG_inline_alloc) {
     Label call_runtime;
-    NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, T3, &call_runtime));
+    NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, &call_runtime, T3));
     __ mv(T3, AllocateTypedDataArrayABI::kLengthReg);
     /* Check that length is a positive Smi. */
     /* T3: requested array length argument. */
diff --git a/runtime/vm/compiler/stub_code_compiler_x64.cc b/runtime/vm/compiler/stub_code_compiler_x64.cc
index c549f75..0dc8e25 100644
--- a/runtime/vm/compiler/stub_code_compiler_x64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_x64.cc
@@ -1207,8 +1207,7 @@
     __ j(ABOVE, &slow_case);
 
     // Check for allocation tracing.
-    NOT_IN_PRODUCT(
-        __ MaybeTraceAllocation(kArrayCid, &slow_case, Assembler::kFarJump));
+    NOT_IN_PRODUCT(__ MaybeTraceAllocation(kArrayCid, &slow_case));
 
     const intptr_t fixed_size_plus_alignment_padding =
         target::Array::header_size() +
@@ -1542,8 +1541,7 @@
   __ andq(R13, Immediate(-target::ObjectAlignment::kObjectAlignment));
 
   // Check for allocation tracing.
-  NOT_IN_PRODUCT(
-      __ MaybeTraceAllocation(kContextCid, slow_case, Assembler::kFarJump));
+  NOT_IN_PRODUCT(__ MaybeTraceAllocation(kContextCid, slow_case));
 
   // Now allocate the object.
   // R10: number of context variables.
@@ -3691,8 +3689,7 @@
     Label call_runtime;
     __ pushq(AllocateTypedDataArrayABI::kLengthReg);
 
-    NOT_IN_PRODUCT(
-        __ MaybeTraceAllocation(cid, &call_runtime, Assembler::kFarJump));
+    NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, &call_runtime));
     __ movq(RDI, AllocateTypedDataArrayABI::kLengthReg);
     /* Check that length is a positive Smi. */
     /* RDI: requested array length argument. */
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index e3dc87a..722f126 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -532,6 +532,47 @@
   static const Register kResultReg = R0;
 };
 
+// ABI for SuspendStub (AwaitAsyncStub).
+struct SuspendStubABI {
+  static const Register kArgumentReg = R0;
+  static const Register kTempReg = R1;
+  static const Register kFrameSizeReg = R2;
+  static const Register kSuspendStateReg = R3;
+  static const Register kFutureReg = R4;
+  static const Register kSrcFrameReg = R8;
+  static const Register kDstFrameReg = R9;
+};
+
+// ABI for InitSuspendableFunctionStub (InitAsyncStub).
+struct InitSuspendableFunctionStubABI {
+  static const Register kTypeArgsReg = R0;
+};
+
+// ABI for ResumeStub
+struct ResumeStubABI {
+  static const Register kSuspendStateReg = R2;
+  static const Register kTempReg = R0;
+  // Registers for the frame copying (the 1st part).
+  static const Register kFrameSizeReg = R1;
+  static const Register kSrcFrameReg = R3;
+  static const Register kDstFrameReg = R4;
+  // Registers for control transfer.
+  // (the 2nd part, can reuse registers from the 1st part)
+  static const Register kResumePcReg = R1;
+  static const Register kExceptionReg = R3;
+  static const Register kStackTraceReg = R4;
+};
+
+// ABI for ReturnStub (ReturnAsyncStub, ReturnAsyncNotFutureStub).
+struct ReturnStubABI {
+  static const Register kSuspendStateReg = R2;
+};
+
+// ABI for AsyncExceptionHandlerStub.
+struct AsyncExceptionHandlerStubABI {
+  static const Register kSuspendStateReg = R2;
+};
+
 // ABI for DispatchTableNullErrorStub and consequently for all dispatch
 // table calls (though normal functions will not expect or use this
 // register). This ABI is added to distinguish memory corruption errors from
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index 03fc499..da0c132 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -366,6 +366,47 @@
   static const Register kResultReg = R0;
 };
 
+// ABI for SuspendStub (AwaitAsyncStub).
+struct SuspendStubABI {
+  static const Register kArgumentReg = R0;
+  static const Register kTempReg = R1;
+  static const Register kFrameSizeReg = R2;
+  static const Register kSuspendStateReg = R3;
+  static const Register kFutureReg = R4;
+  static const Register kSrcFrameReg = R5;
+  static const Register kDstFrameReg = R6;
+};
+
+// ABI for InitSuspendableFunctionStub (InitAsyncStub).
+struct InitSuspendableFunctionStubABI {
+  static const Register kTypeArgsReg = R0;
+};
+
+// ABI for ResumeStub
+struct ResumeStubABI {
+  static const Register kSuspendStateReg = R2;
+  static const Register kTempReg = R0;
+  // Registers for the frame copying (the 1st part).
+  static const Register kFrameSizeReg = R1;
+  static const Register kSrcFrameReg = R3;
+  static const Register kDstFrameReg = R4;
+  // Registers for control transfer.
+  // (the 2nd part, can reuse registers from the 1st part)
+  static const Register kResumePcReg = R1;
+  static const Register kExceptionReg = R3;
+  static const Register kStackTraceReg = R4;
+};
+
+// ABI for ReturnStub (ReturnAsyncStub, ReturnAsyncNotFutureStub).
+struct ReturnStubABI {
+  static const Register kSuspendStateReg = R2;
+};
+
+// ABI for AsyncExceptionHandlerStub.
+struct AsyncExceptionHandlerStubABI {
+  static const Register kSuspendStateReg = R2;
+};
+
 // ABI for DispatchTableNullErrorStub and consequently for all dispatch
 // table calls (though normal functions will not expect or use this
 // register). This ABI is added to distinguish memory corruption errors from
diff --git a/runtime/vm/constants_ia32.h b/runtime/vm/constants_ia32.h
index ab67693..2fa9890 100644
--- a/runtime/vm/constants_ia32.h
+++ b/runtime/vm/constants_ia32.h
@@ -260,6 +260,54 @@
   static const Register kResultReg = EAX;
 };
 
+// ABI for SuspendStub (AwaitAsyncStub).
+struct SuspendStubABI {
+  static const Register kArgumentReg = EAX;
+  static const Register kTempReg = EDX;
+  static const Register kFrameSizeReg = ECX;
+  static const Register kSuspendStateReg = EBX;
+  static const Register kFutureReg = EDI;
+  // Can reuse THR.
+  static const Register kSrcFrameReg = ESI;
+  // Can reuse kFutureReg.
+  static const Register kDstFrameReg = EDI;
+
+  // Number of bytes to skip after
+  // suspend stub return address in order to resume.
+  // IA32: mov esp, ebp; pop ebp; ret
+  static const intptr_t kResumePcDistance = 5;
+};
+
+// ABI for InitSuspendableFunctionStub (InitAsyncStub).
+struct InitSuspendableFunctionStubABI {
+  static const Register kTypeArgsReg = EAX;
+};
+
+// ABI for ResumeStub
+struct ResumeStubABI {
+  static const Register kSuspendStateReg = EBX;
+  static const Register kTempReg = EDX;
+  // Registers for the frame copying (the 1st part).
+  static const Register kFrameSizeReg = ECX;
+  static const Register kSrcFrameReg = ESI;
+  static const Register kDstFrameReg = EDI;
+  // Registers for control transfer.
+  // (the 2nd part, can reuse registers from the 1st part)
+  static const Register kResumePcReg = ECX;
+  static const Register kExceptionReg = ESI;
+  static const Register kStackTraceReg = EDI;
+};
+
+// ABI for ReturnStub (ReturnAsyncStub, ReturnAsyncNotFutureStub).
+struct ReturnStubABI {
+  static const Register kSuspendStateReg = EBX;
+};
+
+// ABI for AsyncExceptionHandlerStub.
+struct AsyncExceptionHandlerStubABI {
+  static const Register kSuspendStateReg = EBX;
+};
+
 // ABI for DispatchTableNullErrorStub and consequently for all dispatch
 // table calls (though normal functions will not expect or use this
 // register). This ABI is added to distinguish memory corruption errors from
diff --git a/runtime/vm/constants_riscv.h b/runtime/vm/constants_riscv.h
index 707caf7..8d7a085 100644
--- a/runtime/vm/constants_riscv.h
+++ b/runtime/vm/constants_riscv.h
@@ -378,6 +378,47 @@
   static constexpr Register kResultReg = A0;
 };
 
+// ABI for SuspendStub (AwaitAsyncStub).
+struct SuspendStubABI {
+  static const Register kArgumentReg = A0;
+  static const Register kTempReg = T0;
+  static const Register kFrameSizeReg = T1;
+  static const Register kSuspendStateReg = T2;
+  static const Register kFutureReg = T3;
+  static const Register kSrcFrameReg = T4;
+  static const Register kDstFrameReg = T5;
+};
+
+// ABI for InitSuspendableFunctionStub (InitAsyncStub).
+struct InitSuspendableFunctionStubABI {
+  static const Register kTypeArgsReg = A0;
+};
+
+// ABI for ResumeStub
+struct ResumeStubABI {
+  static const Register kSuspendStateReg = T1;
+  static const Register kTempReg = T0;
+  // Registers for the frame copying (the 1st part).
+  static const Register kFrameSizeReg = T2;
+  static const Register kSrcFrameReg = T3;
+  static const Register kDstFrameReg = T4;
+  // Registers for control transfer.
+  // (the 2nd part, can reuse registers from the 1st part)
+  static const Register kResumePcReg = T2;
+  static const Register kExceptionReg = T3;
+  static const Register kStackTraceReg = T4;
+};
+
+// ABI for ReturnStub (ReturnAsyncStub, ReturnAsyncNotFutureStub).
+struct ReturnStubABI {
+  static const Register kSuspendStateReg = T1;
+};
+
+// ABI for AsyncExceptionHandlerStub.
+struct AsyncExceptionHandlerStubABI {
+  static const Register kSuspendStateReg = T1;
+};
+
 // ABI for DispatchTableNullErrorStub and consequently for all dispatch
 // table calls (though normal functions will not expect or use this
 // register). This ABI is added to distinguish memory corruption errors from
diff --git a/runtime/vm/constants_x64.h b/runtime/vm/constants_x64.h
index 9b8e5c2..1f22126 100644
--- a/runtime/vm/constants_x64.h
+++ b/runtime/vm/constants_x64.h
@@ -335,6 +335,52 @@
   static const Register kResultReg = RAX;
 };
 
+// ABI for SuspendStub (AwaitAsyncStub).
+struct SuspendStubABI {
+  static const Register kArgumentReg = RAX;
+  static const Register kTempReg = RDX;
+  static const Register kFrameSizeReg = RCX;
+  static const Register kSuspendStateReg = RBX;
+  static const Register kFutureReg = R8;
+  static const Register kSrcFrameReg = RSI;
+  static const Register kDstFrameReg = RDI;
+
+  // Number of bytes to skip after
+  // suspend stub return address in order to resume.
+  // X64: mov rsp, rbp; pop rbp; ret
+  static const intptr_t kResumePcDistance = 5;
+};
+
+// ABI for InitSuspendableFunctionStub (InitAsyncStub).
+struct InitSuspendableFunctionStubABI {
+  static const Register kTypeArgsReg = RAX;
+};
+
+// ABI for ResumeStub
+struct ResumeStubABI {
+  static const Register kSuspendStateReg = RBX;
+  static const Register kTempReg = RDX;
+  // Registers for the frame copying (the 1st part).
+  static const Register kFrameSizeReg = RCX;
+  static const Register kSrcFrameReg = RSI;
+  static const Register kDstFrameReg = RDI;
+  // Registers for control transfer.
+  // (the 2nd part, can reuse registers from the 1st part)
+  static const Register kResumePcReg = RCX;
+  static const Register kExceptionReg = RSI;
+  static const Register kStackTraceReg = RDI;
+};
+
+// ABI for ReturnStub (ReturnAsyncStub, ReturnAsyncNotFutureStub).
+struct ReturnStubABI {
+  static const Register kSuspendStateReg = RBX;
+};
+
+// ABI for AsyncExceptionHandlerStub.
+struct AsyncExceptionHandlerStubABI {
+  static const Register kSuspendStateReg = RBX;
+};
+
 // ABI for DispatchTableNullErrorStub and consequently for all dispatch
 // table calls (though normal functions will not expect or use this
 // register). This ABI is added to distinguish memory corruption errors from
diff --git a/runtime/vm/datastream.h b/runtime/vm/datastream.h
index 09ec2e7..974cb88 100644
--- a/runtime/vm/datastream.h
+++ b/runtime/vm/datastream.h
@@ -313,10 +313,14 @@
   }
 
  private:
+  ReadStream(const uint8_t* buffer, const uint8_t* current, const uint8_t* end)
+      : buffer_(buffer), current_(current), end_(end) {}
+
   const uint8_t* buffer_;
   const uint8_t* current_;
   const uint8_t* end_;
 
+  friend class Deserializer;
   DISALLOW_COPY_AND_ASSIGN(ReadStream);
 };
 
diff --git a/runtime/vm/deopt_instructions.cc b/runtime/vm/deopt_instructions.cc
index 76ee165c..11e6086 100644
--- a/runtime/vm/deopt_instructions.cc
+++ b/runtime/vm/deopt_instructions.cc
@@ -71,12 +71,12 @@
   // Do not include incoming arguments if there are optional arguments
   // (they are copied into local space at method entry).
   num_args_ =
-      function.HasOptionalParameters() ? 0 : function.num_fixed_parameters();
+      function.MakesCopyOfParameters() ? 0 : function.num_fixed_parameters();
 
-// The fixed size section of the (fake) Dart frame called via a stub by the
-// optimized function contains FP, PP (ARM only), PC-marker and
-// return-address. This section is copied as well, so that its contained
-// values can be updated before returning to the deoptimized function.
+  // The fixed size section of the (fake) Dart frame called via a stub by the
+  // optimized function contains FP, PP (ARM only), PC-marker and
+  // return-address. This section is copied as well, so that its contained
+  // values can be updated before returning to the deoptimized function.
   ASSERT(frame->fp() >= frame->sp());
   const intptr_t frame_size = (frame->fp() - frame->sp()) / kWordSize;
 
@@ -326,7 +326,7 @@
 
   Function& function = Function::Handle(zone(), code.function());
   intptr_t params =
-      function.HasOptionalParameters() ? 0 : function.num_fixed_parameters();
+      function.MakesCopyOfParameters() ? 0 : function.num_fixed_parameters();
   for (intptr_t i = 0; i < num_vars; i++) {
     const intptr_t len = deopt_instructions.length();
     intptr_t slot = i < params ? i
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index aeb4640..8d08c18 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -149,7 +149,9 @@
             handler_pc = temp_handler_pc;
             handler_sp = frame->sp();
             handler_fp = frame->fp();
-            if (is_optimized) {
+            if (is_optimized &&
+                (handler_pc !=
+                 StubCode::AsyncExceptionHandler().EntryPoint())) {
               pc_ = frame->pc();
               code_ = &Code::Handle(frame->LookupDartCode());
               CatchEntryMovesRefPtr* cached_catch_entry_moves =
diff --git a/runtime/vm/heap/compactor.cc b/runtime/vm/heap/compactor.cc
index 2051b0c..e5a5c3e 100644
--- a/runtime/vm/heap/compactor.cc
+++ b/runtime/vm/heap/compactor.cc
@@ -313,6 +313,19 @@
     ForwardStackPointers();
   }
 
+  {
+    TIMELINE_FUNCTION_GC_DURATION(thread(),
+                                  "ForwardPostponedSuspendStatePointers");
+    // After heap sliding is complete and ObjectStore pointers are forwarded
+    // it is finally safe to visit SuspendState objects with copied frames.
+    can_visit_stack_frames_ = true;
+    const intptr_t length = postponed_suspend_states_.length();
+    for (intptr_t i = 0; i < length; ++i) {
+      auto suspend_state = postponed_suspend_states_[i];
+      suspend_state->untag()->VisitPointers(this);
+    }
+  }
+
   heap_->old_space()->VisitRoots(this);
 
   {
@@ -741,6 +754,21 @@
   }
 }
 
+bool GCCompactor::CanVisitSuspendStatePointers(SuspendStatePtr suspend_state) {
+  if ((suspend_state->untag()->pc() != 0) && !can_visit_stack_frames_) {
+    // Visiting pointers of SuspendState objects with copied stack frame
+    // needs to query stack map, which can touch other Dart objects
+    // (such as GrowableObjectArray of InstructionsTable).
+    // Those objects may have an inconsistent state during compaction,
+    // so processing of SuspendState objects is postponed to the later
+    // stage of compaction.
+    MutexLocker ml(&postponed_suspend_states_mutex_);
+    postponed_suspend_states_.Add(suspend_state);
+    return false;
+  }
+  return true;
+}
+
 void GCCompactor::VisitHandle(uword addr) {
   FinalizablePersistentHandle* handle =
       reinterpret_cast<FinalizablePersistentHandle*>(addr);
diff --git a/runtime/vm/heap/compactor.h b/runtime/vm/heap/compactor.h
index 164c214..cff7736 100644
--- a/runtime/vm/heap/compactor.h
+++ b/runtime/vm/heap/compactor.h
@@ -41,12 +41,13 @@
   void ForwardCompressedPointer(uword heap_base, CompressedObjectPtr* ptr);
   void VisitTypedDataViewPointers(TypedDataViewPtr view,
                                   CompressedObjectPtr* first,
-                                  CompressedObjectPtr* last);
-  void VisitPointers(ObjectPtr* first, ObjectPtr* last);
+                                  CompressedObjectPtr* last) override;
+  void VisitPointers(ObjectPtr* first, ObjectPtr* last) override;
   void VisitCompressedPointers(uword heap_base,
                                CompressedObjectPtr* first,
-                               CompressedObjectPtr* last);
-  void VisitHandle(uword addr);
+                               CompressedObjectPtr* last) override;
+  bool CanVisitSuspendStatePointers(SuspendStatePtr suspend_state) override;
+  void VisitHandle(uword addr) override;
 
   Heap* heap_;
 
@@ -71,6 +72,12 @@
   // complete.
   Mutex typed_data_view_mutex_;
   MallocGrowableArray<TypedDataViewPtr> typed_data_views_;
+
+  // SuspendState objects with copied frame must be updated after sliding is
+  // complete.
+  bool can_visit_stack_frames_ = false;
+  Mutex postponed_suspend_states_mutex_;
+  MallocGrowableArray<SuspendStatePtr> postponed_suspend_states_;
 };
 
 }  // namespace dart
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index ae4909f..3fa948a 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -48,6 +48,7 @@
 #include "vm/stub_code.h"
 #include "vm/symbols.h"
 #include "vm/tags.h"
+#include "vm/thread.h"
 #include "vm/thread_interrupter.h"
 #include "vm/thread_registry.h"
 #include "vm/timeline.h"
@@ -613,6 +614,12 @@
     thread->isolate_ = nullptr;
     thread->isolate_group_ = this;
     thread->field_table_values_ = nullptr;
+    if (object_store() != nullptr) {
+#define INIT_ENTRY_POINT(name)                                                 \
+  thread->name##_entry_point_ = Function::EntryPointOf(object_store()->name());
+      CACHED_FUNCTION_ENTRY_POINTS_LIST(INIT_ENTRY_POINT)
+#undef INIT_ENTRY_POINT
+    }
     ASSERT(heap() != nullptr);
     thread->heap_ = heap();
     thread->set_os_thread(os_thread);
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 269048c..ffb8a64 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -574,7 +574,7 @@
   void IncreaseMutatorCount(Isolate* mutator, bool is_nested_reenter);
   void DecreaseMutatorCount(Isolate* mutator, bool is_nested_exit);
   intptr_t MutatorCount() const {
-    ASSERT(Thread::Current()->IsAtSafepoint());  // Otherwise lock is needed.
+    MonitorLocker ml(active_mutators_monitor_.get());
     return active_mutators_;
   }
 
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index f5e8986..3dcbc81 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -2030,28 +2030,40 @@
 
   FunctionNodeHelper function_node_helper(&helper_);
   function_node_helper.ReadUntilIncluding(FunctionNodeHelper::kDartAsyncMarker);
-  function.set_is_debuggable(function_node_helper.dart_async_marker_ ==
-                             FunctionNodeHelper::kSync);
-  switch (function_node_helper.dart_async_marker_) {
-    case FunctionNodeHelper::kSyncStar:
-      function.set_modifier(UntaggedFunction::kSyncGen);
-      function.set_is_visible(!FLAG_lazy_async_stacks);
-      break;
-    case FunctionNodeHelper::kAsync:
-      function.set_modifier(UntaggedFunction::kAsync);
-      function.set_is_inlinable(!FLAG_lazy_async_stacks);
-      function.set_is_visible(!FLAG_lazy_async_stacks);
-      break;
-    case FunctionNodeHelper::kAsyncStar:
-      function.set_modifier(UntaggedFunction::kAsyncGen);
-      function.set_is_inlinable(!FLAG_lazy_async_stacks);
-      function.set_is_visible(!FLAG_lazy_async_stacks);
-      break;
-    default:
-      // no special modifier
-      break;
+  if (function_node_helper.async_marker_ == FunctionNodeHelper::kAsync) {
+    if (!FLAG_precompiled_mode) {
+      FATAL("Compact async functions are only supported in AOT mode.");
+    }
+    function.set_modifier(UntaggedFunction::kAsync);
+    function.set_is_debuggable(true);
+    function.set_is_inlinable(false);
+    function.set_is_visible(true);
+    ASSERT(function.IsCompactAsyncFunction());
+  } else {
+    ASSERT(function_node_helper.async_marker_ == FunctionNodeHelper::kSync);
+    function.set_is_debuggable(function_node_helper.dart_async_marker_ ==
+                               FunctionNodeHelper::kSync);
+    switch (function_node_helper.dart_async_marker_) {
+      case FunctionNodeHelper::kSyncStar:
+        function.set_modifier(UntaggedFunction::kSyncGen);
+        function.set_is_visible(!FLAG_lazy_async_stacks);
+        break;
+      case FunctionNodeHelper::kAsync:
+        function.set_modifier(UntaggedFunction::kAsync);
+        function.set_is_inlinable(!FLAG_lazy_async_stacks);
+        function.set_is_visible(!FLAG_lazy_async_stacks);
+        break;
+      case FunctionNodeHelper::kAsyncStar:
+        function.set_modifier(UntaggedFunction::kAsyncGen);
+        function.set_is_inlinable(!FLAG_lazy_async_stacks);
+        function.set_is_visible(!FLAG_lazy_async_stacks);
+        break;
+      default:
+        // no special modifier
+        break;
+    }
+    ASSERT(!function.IsCompactAsyncFunction());
   }
-  ASSERT(function_node_helper.async_marker_ == FunctionNodeHelper::kSync);
 
   if (!native_name.IsNull()) {
     function.set_native_name(native_name);
diff --git a/runtime/vm/message_snapshot.cc b/runtime/vm/message_snapshot.cc
index 9bd1a91..48f6aec 100644
--- a/runtime/vm/message_snapshot.cc
+++ b/runtime/vm/message_snapshot.cc
@@ -3241,6 +3241,7 @@
     ILLEGAL(MirrorReference)
     ILLEGAL(ReceivePort)
     ILLEGAL(StackTrace)
+    ILLEGAL(SuspendState)
     ILLEGAL(UserTag)
 
     // From "dart:ffi" we handle only Pointer/DynamicLibrary specially, since
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index bc8a1fe..a9fffe2 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -55,6 +55,7 @@
 #include "vm/regexp.h"
 #include "vm/resolver.h"
 #include "vm/reusable_handles.h"
+#include "vm/reverse_pc_lookup_cache.h"
 #include "vm/runtime_entry.h"
 #include "vm/scopes.h"
 #include "vm/stack_frame.h"
@@ -949,6 +950,8 @@
   cls.set_type_arguments_field_offset(Array::type_arguments_offset(),
                                       RTN::Array::type_arguments_offset());
   cls.set_num_type_arguments_unsafe(1);
+  // In order to be able to canonicalize arguments descriptors early.
+  cls.set_is_prefinalized();
   cls =
       Class::New<GrowableObjectArray, RTN::GrowableObjectArray>(isolate_group);
   isolate_group->object_store()->set_growable_object_array_class(cls);
@@ -1090,10 +1093,26 @@
         empty_exception_handlers_,
         static_cast<ExceptionHandlersPtr>(address + kHeapObjectTag));
     empty_exception_handlers_->StoreNonPointer(
-        &empty_exception_handlers_->untag()->num_entries_, 0);
+        &empty_exception_handlers_->untag()->packed_fields_, 0);
     empty_exception_handlers_->SetCanonical();
   }
 
+  // Empty exception handlers for async/async* functions.
+  {
+    uword address =
+        heap->Allocate(thread, ExceptionHandlers::InstanceSize(0), Heap::kOld);
+    InitializeObject(address, kExceptionHandlersCid,
+                     ExceptionHandlers::InstanceSize(0),
+                     ExceptionHandlers::ContainsCompressedPointers());
+    ExceptionHandlers::initializeHandle(
+        empty_async_exception_handlers_,
+        static_cast<ExceptionHandlersPtr>(address + kHeapObjectTag));
+    empty_async_exception_handlers_->StoreNonPointer(
+        &empty_async_exception_handlers_->untag()->packed_fields_,
+        UntaggedExceptionHandlers::AsyncHandlerBit::update(true, 0));
+    empty_async_exception_handlers_->SetCanonical();
+  }
+
   // Allocate and initialize the canonical empty type arguments object.
   {
     uword address =
@@ -1239,6 +1258,8 @@
   ASSERT(empty_var_descriptors_->IsLocalVarDescriptors());
   ASSERT(!empty_exception_handlers_->IsSmi());
   ASSERT(empty_exception_handlers_->IsExceptionHandlers());
+  ASSERT(!empty_async_exception_handlers_->IsSmi());
+  ASSERT(empty_async_exception_handlers_->IsExceptionHandlers());
   ASSERT(!sentinel_->IsSmi());
   ASSERT(sentinel_->IsSentinel());
   ASSERT(!transition_sentinel_->IsSmi());
@@ -2039,6 +2060,10 @@
     RegisterClass(cls, Symbols::FutureOr(), lib);
     pending_classes.Add(cls);
 
+    cls = Class::New<SuspendState, RTN::SuspendState>(isolate_group);
+    RegisterPrivateClass(cls, Symbols::_SuspendState(), lib);
+    pending_classes.Add(cls);
+
     // Pre-register the developer library so we can place the vm class
     // UserTag there rather than the core library.
     lib = Library::LookupLibrary(thread, Symbols::DartDeveloper());
@@ -2542,6 +2567,7 @@
     cls = Class::New<ReceivePort, RTN::ReceivePort>(isolate_group);
     cls = Class::New<SendPort, RTN::SendPort>(isolate_group);
     cls = Class::New<StackTrace, RTN::StackTrace>(isolate_group);
+    cls = Class::New<SuspendState, RTN::SuspendState>(isolate_group);
     cls = Class::New<RegExp, RTN::RegExp>(isolate_group);
     cls = Class::New<Number, RTN::Number>(isolate_group);
 
@@ -3592,10 +3618,21 @@
   auto& cache = Array::Handle(zone, invocation_dispatcher_cache());
   InvocationDispatcherTable dispatchers(cache);
   intptr_t i = 0;
-  for (auto dispatcher : dispatchers) {
-    if (dispatcher.Get<kInvocationDispatcherName>() == String::null()) {
+#if defined(DEBUG)
+  auto& function = Function::Handle();
+#endif
+  for (auto entry : dispatchers) {
+    if (entry.Get<kInvocationDispatcherName>() == String::null()) {
       break;
     }
+
+#if defined(DEBUG)
+    // Check for duplicate entries in the cache.
+    function = entry.Get<kInvocationDispatcherFunction>();
+    ASSERT(entry.Get<kInvocationDispatcherName>() != target_name.ptr() ||
+           function.kind() != dispatcher.kind() ||
+           entry.Get<kInvocationDispatcherArgsDesc>() != args_desc.ptr());
+#endif  // defined(DEBUG)
     i++;
   }
   if (i == dispatchers.Length()) {
@@ -3973,8 +4010,12 @@
 
   const bool needs_dyn_forwarder =
       kernel::NeedsDynamicInvocationForwarder(*this);
+  if (!needs_dyn_forwarder) {
+    return ptr();
+  }
+
   if (!allow_add) {
-    return needs_dyn_forwarder ? Function::null() : ptr();
+    return Function::null();
   }
 
   // If we failed to find it and possibly need to create it, use a write lock.
@@ -3988,10 +4029,8 @@
   if (!result.IsNull()) return result.ptr();
 
   // Otherwise create it & add it.
-  result = needs_dyn_forwarder ? CreateDynamicInvocationForwarder(mangled_name)
-                               : ptr();
+  result = CreateDynamicInvocationForwarder(mangled_name);
   owner.AddInvocationDispatcher(mangled_name, Array::null_array(), result);
-
   return result.ptr();
 }
 
@@ -13260,6 +13299,10 @@
   untag()->set_exported_names(Array::null());
   untag()->set_loaded_scripts(Array::null());
   untag()->set_dependencies(Array::null());
+#if defined(PRODUCT)
+  // used_scripts is only used by vm-service.
+  untag()->set_used_scripts(GrowableObjectArray::null());
+#endif
 }
 
 void Library::AddImport(const Namespace& ns) const {
@@ -15341,7 +15384,18 @@
 }
 
 intptr_t ExceptionHandlers::num_entries() const {
-  return untag()->num_entries_;
+  return untag()->num_entries();
+}
+
+bool ExceptionHandlers::has_async_handler() const {
+  return UntaggedExceptionHandlers::AsyncHandlerBit::decode(
+      untag()->packed_fields_);
+}
+
+void ExceptionHandlers::set_has_async_handler(bool value) const {
+  StoreNonPointer(&untag()->packed_fields_,
+                  UntaggedExceptionHandlers::AsyncHandlerBit::update(
+                      value, untag()->packed_fields_));
 }
 
 void ExceptionHandlers::SetHandlerInfo(intptr_t try_index,
@@ -15433,7 +15487,9 @@
                          ExceptionHandlers::ContainsCompressedPointers());
     NoSafepointScope no_safepoint;
     result ^= raw;
-    result.StoreNonPointer(&result.untag()->num_entries_, num_handlers);
+    result.StoreNonPointer(
+        &result.untag()->packed_fields_,
+        UntaggedExceptionHandlers::NumEntriesBits::update(num_handlers, 0));
   }
   const Array& handled_types_data =
       (num_handlers == 0) ? Object::empty_array()
@@ -15459,7 +15515,9 @@
                          ExceptionHandlers::ContainsCompressedPointers());
     NoSafepointScope no_safepoint;
     result ^= raw;
-    result.StoreNonPointer(&result.untag()->num_entries_, num_handlers);
+    result.StoreNonPointer(
+        &result.untag()->packed_fields_,
+        UntaggedExceptionHandlers::NumEntriesBits::update(num_handlers, 0));
   }
   result.set_handled_types_data(handled_types_data);
   return result.ptr();
@@ -15468,8 +15526,11 @@
 const char* ExceptionHandlers::ToCString() const {
 #define FORMAT1 "%" Pd " => %#x  (%" Pd " types) (outer %d)%s%s\n"
 #define FORMAT2 "  %d. %s\n"
+#define FORMAT3 "<async handler>\n"
   if (num_entries() == 0) {
-    return "empty ExceptionHandlers\n";
+    return has_async_handler()
+               ? "empty ExceptionHandlers (with <async handler>)\n"
+               : "empty ExceptionHandlers\n";
   }
   auto& handled_types = Array::Handle();
   auto& type = AbstractType::Handle();
@@ -15492,6 +15553,9 @@
       len += Utils::SNPrint(NULL, 0, FORMAT2, k, type.ToCString());
     }
   }
+  if (has_async_handler()) {
+    len += Utils::SNPrint(NULL, 0, FORMAT3);
+  }
   // Allocate the buffer.
   char* buffer = Thread::Current()->zone()->Alloc<char>(len);
   // Layout the fields in the buffer.
@@ -15512,9 +15576,14 @@
                                   FORMAT2, k, type.ToCString());
     }
   }
+  if (has_async_handler()) {
+    num_chars +=
+        Utils::SNPrint((buffer + num_chars), (len - num_chars), FORMAT3);
+  }
   return buffer;
 #undef FORMAT1
 #undef FORMAT2
+#undef FORMAT3
 }
 
 void SingleTargetCache::set_target(const Code& value) const {
@@ -25966,6 +26035,54 @@
                     "Omit CodeSourceMaps in precompiled snapshots and don't "
                     "symbolize stack traces in the precompiled runtime.");
 
+SuspendStatePtr SuspendState::New(intptr_t frame_size,
+                                  const Instance& future,
+                                  Heap::Space space) {
+  SuspendState& result = SuspendState::Handle();
+  {
+    ObjectPtr raw = Object::Allocate(
+        SuspendState::kClassId, SuspendState::InstanceSize(frame_size), space,
+        SuspendState::ContainsCompressedPointers());
+    NoSafepointScope no_safepoint;
+    result ^= raw;
+    result.set_frame_size(frame_size);
+    result.set_pc(0);
+    result.set_future(future);
+  }
+  return result.ptr();
+}
+
+void SuspendState::set_frame_size(intptr_t frame_size) const {
+  ASSERT(frame_size >= 0);
+  StoreNonPointer(&untag()->frame_size_, frame_size);
+}
+
+void SuspendState::set_pc(uword pc) const {
+  StoreNonPointer(&untag()->pc_, pc);
+}
+
+void SuspendState::set_future(const Instance& future) const {
+  untag()->set_future(future.ptr());
+}
+
+const char* SuspendState::ToCString() const {
+  return "SuspendState";
+}
+
+CodePtr SuspendState::GetCodeObject() const {
+  ASSERT(pc() != 0);
+#if defined(DART_PRECOMPILED_RUNTIME)
+  NoSafepointScope no_safepoint;
+  CodePtr code = ReversePc::Lookup(IsolateGroup::Current(), pc(),
+                                   /*is_return_address=*/true);
+  ASSERT(code != Code::null());
+  return code;
+#else
+  UNIMPLEMENTED();
+  return Code::null();
+#endif  // defined(DART_PRECOMPILED_RUNTIME)
+}
+
 void RegExp::set_pattern(const String& pattern) const {
   untag()->set_pattern(pattern.ptr());
 }
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 3bd1912..0ea4197 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -447,6 +447,7 @@
   V(PcDescriptors, empty_descriptors)                                          \
   V(LocalVarDescriptors, empty_var_descriptors)                                \
   V(ExceptionHandlers, empty_exception_handlers)                               \
+  V(ExceptionHandlers, empty_async_exception_handlers)                         \
   V(Array, extractor_parameter_types)                                          \
   V(Array, extractor_parameter_names)                                          \
   V(Sentinel, sentinel)                                                        \
@@ -2891,7 +2892,12 @@
 
   static intptr_t code_offset() { return OFFSET_OF(UntaggedFunction, code_); }
 
-  uword entry_point() const { return untag()->entry_point_; }
+  uword entry_point() const {
+    return EntryPointOf(ptr());
+  }
+  static uword EntryPointOf(const FunctionPtr function) {
+    return function->untag()->entry_point_;
+  }
 
   static intptr_t entry_point_offset(
       CodeEntryKind entry_kind = CodeEntryKind::kNormal) {
@@ -3162,6 +3168,12 @@
   // Returns the number of implicit parameters, e.g., this for instance methods.
   intptr_t NumImplicitParameters() const;
 
+  // Returns true if parameters of this function are copied into the frame
+  // in the function prologue.
+  bool MakesCopyOfParameters() const {
+    return HasOptionalParameters() || IsCompactAsyncFunction();
+  }
+
 #if defined(DART_PRECOMPILED_RUNTIME)
 #define DEFINE_GETTERS_AND_SETTERS(return_type, type, name)                    \
   static intptr_t name##_offset() {                                            \
@@ -3558,6 +3570,12 @@
     return modifier() == UntaggedFunction::kAsync;
   }
 
+  // TODO(alexmarkov): replace this predicate with IsAsyncFunction() after
+  // old async functions are removed.
+  bool IsCompactAsyncFunction() const {
+    return IsAsyncFunction() && is_debuggable();
+  }
+
   // Recognise synthetic sync-yielding functions like the inner-most:
   //   user_func /* was async */ {
   //      :async_op(..) yielding {
@@ -6220,6 +6238,9 @@
 
   intptr_t num_entries() const;
 
+  bool has_async_handler() const;
+  void set_has_async_handler(bool value) const;
+
   void GetHandlerInfo(intptr_t try_index, ExceptionHandlerInfo* info) const;
 
   uword HandlerPCOffset(intptr_t try_index) const;
@@ -11763,6 +11784,63 @@
   friend class DebuggerStackTrace;
 };
 
+class SuspendState : public Instance {
+ public:
+  // :suspend_state local variable index
+  static constexpr intptr_t kSuspendStateVarIndex = 0;
+
+  static intptr_t HeaderSize() { return sizeof(UntaggedSuspendState); }
+  static intptr_t UnroundedSize(SuspendStatePtr ptr) {
+    return UnroundedSize(ptr->untag()->frame_size_);
+  }
+  static intptr_t UnroundedSize(intptr_t frame_size) {
+    return HeaderSize() + frame_size;
+  }
+  static intptr_t InstanceSize() {
+    ASSERT_EQUAL(sizeof(UntaggedSuspendState),
+                 OFFSET_OF_RETURNED_VALUE(UntaggedSuspendState, payload));
+    return 0;
+  }
+  static intptr_t InstanceSize(intptr_t frame_size) {
+    return RoundedAllocationSize(UnroundedSize(frame_size));
+  }
+
+  static intptr_t frame_size_offset() {
+    return OFFSET_OF(UntaggedSuspendState, frame_size_);
+  }
+  static intptr_t pc_offset() { return OFFSET_OF(UntaggedSuspendState, pc_); }
+  static intptr_t future_offset() {
+    return OFFSET_OF(UntaggedSuspendState, future_);
+  }
+  static intptr_t then_callback_offset() {
+    return OFFSET_OF(UntaggedSuspendState, then_callback_);
+  }
+  static intptr_t error_callback_offset() {
+    return OFFSET_OF(UntaggedSuspendState, error_callback_);
+  }
+  static intptr_t payload_offset() {
+    return UntaggedSuspendState::payload_offset();
+  }
+
+  static SuspendStatePtr New(intptr_t frame_size,
+                             const Instance& future,
+                             Heap::Space space = Heap::kNew);
+
+  InstancePtr future() const { return untag()->future(); }
+  uword pc() const { return untag()->pc_; }
+
+  // Returns Code object corresponding to the suspended function.
+  CodePtr GetCodeObject() const;
+
+ private:
+  void set_frame_size(intptr_t frame_size) const;
+  void set_pc(uword pc) const;
+  void set_future(const Instance& future) const;
+
+  FINAL_HEAP_OBJECT_IMPLEMENTATION(SuspendState, Instance);
+  friend class Class;
+};
+
 class RegExpFlags {
  public:
   // Flags are passed to a regex object as follows:
diff --git a/runtime/vm/object_graph_copy.cc b/runtime/vm/object_graph_copy.cc
index 66ebd79..c49af9a 100644
--- a/runtime/vm/object_graph_copy.cc
+++ b/runtime/vm/object_graph_copy.cc
@@ -74,6 +74,7 @@
   V(Smi)                                                                       \
   V(StackTrace)                                                                \
   V(SubtypeTestCache)                                                          \
+  V(SuspendState)                                                              \
   V(Type)                                                                      \
   V(TypeArguments)                                                             \
   V(TypeParameter)                                                             \
@@ -619,6 +620,7 @@
       HANDLE_ILLEGAL_CASE(MirrorReference)
       HANDLE_ILLEGAL_CASE(Pointer)
       HANDLE_ILLEGAL_CASE(ReceivePort)
+      HANDLE_ILLEGAL_CASE(SuspendState)
       HANDLE_ILLEGAL_CASE(UserTag)
       default:
         return true;
diff --git a/runtime/vm/object_service.cc b/runtime/vm/object_service.cc
index eab9078..0653fe4 100644
--- a/runtime/vm/object_service.cc
+++ b/runtime/vm/object_service.cc
@@ -1760,6 +1760,10 @@
   Instance::PrintJSONImpl(stream, ref);
 }
 
+void SuspendState::PrintJSONImpl(JSONStream* stream, bool ref) const {
+  Instance::PrintJSONImpl(stream, ref);
+}
+
 #endif
 
 }  // namespace dart
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc
index 056d9e6..7cc7f02 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -301,6 +301,31 @@
     }
   }
 
+  cls = async_lib.LookupClassAllowPrivate(Symbols::_SuspendState());
+  ASSERT(!cls.IsNull());
+  const auto& error = cls.EnsureIsFinalized(thread);
+  ASSERT(error == Error::null());
+
+  function = cls.LookupFunctionAllowPrivate(Symbols::_initAsync());
+  ASSERT(!function.IsNull());
+  set_suspend_state_init_async(function);
+
+  function = cls.LookupFunctionAllowPrivate(Symbols::_awaitAsync());
+  ASSERT(!function.IsNull());
+  set_suspend_state_await_async(function);
+
+  function = cls.LookupFunctionAllowPrivate(Symbols::_returnAsync());
+  ASSERT(!function.IsNull());
+  set_suspend_state_return_async(function);
+
+  function = cls.LookupFunctionAllowPrivate(Symbols::_returnAsyncNotFuture());
+  ASSERT(!function.IsNull());
+  set_suspend_state_return_async_not_future(function);
+
+  function = cls.LookupFunctionAllowPrivate(Symbols::_handleException());
+  ASSERT(!function.IsNull());
+  set_suspend_state_handle_exception(function);
+
   const Library& core_lib = Library::Handle(zone, core_library());
   cls = core_lib.LookupClassAllowPrivate(Symbols::_CompileTimeError());
   ASSERT(!cls.IsNull());
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index b9ba248..ee7844a 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -168,6 +168,11 @@
   RW(Function, complete_on_async_return)                                       \
   RW(Function, complete_with_no_future_on_async_return)                        \
   RW(Function, complete_on_async_error)                                        \
+  RW(Function, suspend_state_init_async)                                       \
+  RW(Function, suspend_state_await_async)                                      \
+  RW(Function, suspend_state_return_async)                                     \
+  RW(Function, suspend_state_return_async_not_future)                          \
+  RW(Function, suspend_state_handle_exception)                                 \
   RW(Class, async_star_stream_controller)                                      \
   ARW_RELAXED(Smi, future_timeout_future_index)                                \
   ARW_RELAXED(Smi, future_wait_future_index)                                   \
@@ -239,6 +244,11 @@
   RW(Code, type_parameter_tts_stub)                                            \
   RW(Code, unreachable_tts_stub)                                               \
   RW(Code, slow_tts_stub)                                                      \
+  RW(Code, await_async_stub)                                                   \
+  RW(Code, init_async_stub)                                                    \
+  RW(Code, resume_stub)                                                        \
+  RW(Code, return_async_stub)                                                  \
+  RW(Code, return_async_not_future_stub)                                       \
   RW(Array, dispatch_table_code_entries)                                       \
   RW(GrowableObjectArray, instructions_tables)                                 \
   RW(Array, obfuscation_map)                                                   \
@@ -314,6 +324,11 @@
   DO(init_instance_field_stub, InitInstanceField)                              \
   DO(init_late_instance_field_stub, InitLateInstanceField)                     \
   DO(init_late_final_instance_field_stub, InitLateFinalInstanceField)          \
+  DO(await_async_stub, AwaitAsync)                                             \
+  DO(init_async_stub, InitAsync)                                               \
+  DO(resume_stub, Resume)                                                      \
+  DO(return_async_stub, ReturnAsync)                                           \
+  DO(return_async_not_future_stub, ReturnAsyncNotFuture)                       \
   DO(instance_of_stub, InstanceOf)
 
 #define ISOLATE_OBJECT_STORE_FIELD_LIST(R_, RW)                                \
diff --git a/runtime/vm/os.h b/runtime/vm/os.h
index aab5c4d..ccc0bf7 100644
--- a/runtime/vm/os.h
+++ b/runtime/vm/os.h
@@ -63,6 +63,9 @@
   // NOTE: This function will return -1 on OSs that are not supported.
   static int64_t GetCurrentThreadCPUMicros();
 
+  // If the tracing/timeline configuration on takes timestamps as input, returns
+  // the same value as |GetCurrentMonotonicMicros|. Otherwise, returns -1.
+  static int64_t GetCurrentMonotonicMicrosForTimeline();
   // If the tracing/timeline configuration on the current OS supports thread
   // timestamps, returns the same value as |GetCurrentThreadCPUMicros|.
   // Otherwise, returns -1.
diff --git a/runtime/vm/os_android.cc b/runtime/vm/os_android.cc
index 3a32eec..adc2a06 100644
--- a/runtime/vm/os_android.cc
+++ b/runtime/vm/os_android.cc
@@ -21,6 +21,7 @@
 #include "vm/code_observers.h"
 #include "vm/dart.h"
 #include "vm/isolate.h"
+#include "vm/timeline.h"
 #include "vm/zone.h"
 
 namespace dart {
@@ -177,8 +178,22 @@
   return result;
 }
 
+int64_t OS::GetCurrentMonotonicMicrosForTimeline() {
+#if defined(SUPPORT_TIMELINE)
+  if (Timeline::recorder_discards_clock_values()) return -1;
+  return GetCurrentMonotonicMicros();
+#else
+  return -1;
+#endif
+}
+
 int64_t OS::GetCurrentThreadCPUMicrosForTimeline() {
+#if defined(SUPPORT_TIMELINE)
+  if (Timeline::recorder_discards_clock_values()) return -1;
   return OS::GetCurrentThreadCPUMicros();
+#else
+  return -1;
+#endif
 }
 
 // TODO(5411554):  May need to hoist these architecture dependent code
diff --git a/runtime/vm/os_fuchsia.cc b/runtime/vm/os_fuchsia.cc
index 84bf154..aa9684c 100644
--- a/runtime/vm/os_fuchsia.cc
+++ b/runtime/vm/os_fuchsia.cc
@@ -453,6 +453,14 @@
   return status == ZX_OK ? info.total_runtime / kNanosecondsPerMicrosecond : 0;
 }
 
+int64_t OS::GetCurrentMonotonicMicrosForTimeline() {
+#if defined(SUPPORT_TIMELINE)
+  return OS::GetCurrentMonotonicMicros();
+#else
+  return -1;
+#endif
+}
+
 // On Fuchsia, thread timestamp values are not used in the tracing/timeline
 // integration. Because of this, we try to avoid querying them, since doing so
 // has both a runtime and trace buffer storage cost.
diff --git a/runtime/vm/os_linux.cc b/runtime/vm/os_linux.cc
index aed7558..782cd0e 100644
--- a/runtime/vm/os_linux.cc
+++ b/runtime/vm/os_linux.cc
@@ -29,6 +29,7 @@
 #include "vm/isolate.h"
 #include "vm/lockers.h"
 #include "vm/os_thread.h"
+#include "vm/timeline.h"
 #include "vm/zone.h"
 
 namespace dart {
@@ -496,10 +497,23 @@
   return result;
 }
 
-int64_t OS::GetCurrentThreadCPUMicrosForTimeline() {
-  return OS::GetCurrentThreadCPUMicros();
+int64_t OS::GetCurrentMonotonicMicrosForTimeline() {
+#if defined(SUPPORT_TIMELINE)
+  if (Timeline::recorder_discards_clock_values()) return -1;
+  return GetCurrentMonotonicMicros();
+#else
+  return -1;
+#endif
 }
 
+int64_t OS::GetCurrentThreadCPUMicrosForTimeline() {
+#if defined(SUPPORT_TIMELINE)
+  if (Timeline::recorder_discards_clock_values()) return -1;
+  return OS::GetCurrentThreadCPUMicros();
+#else
+  return -1;
+#endif
+}
 // TODO(5411554):  May need to hoist these architecture dependent code
 // into a architecture specific file e.g: os_ia32_linux.cc
 intptr_t OS::ActivationFrameAlignment() {
diff --git a/runtime/vm/os_macos.cc b/runtime/vm/os_macos.cc
index 05f9ee4..97090fc 100644
--- a/runtime/vm/os_macos.cc
+++ b/runtime/vm/os_macos.cc
@@ -21,6 +21,7 @@
 
 #include "platform/utils.h"
 #include "vm/isolate.h"
+#include "vm/timeline.h"
 #include "vm/zone.h"
 
 namespace dart {
@@ -127,8 +128,22 @@
   return thread_cpu_micros;
 }
 
+int64_t OS::GetCurrentMonotonicMicrosForTimeline() {
+#if defined(SUPPORT_TIMELINE)
+  if (Timeline::recorder_discards_clock_values()) return -1;
+  return GetCurrentMonotonicMicros();
+#else
+  return -1;
+#endif
+}
+
 int64_t OS::GetCurrentThreadCPUMicrosForTimeline() {
+#if defined(SUPPORT_TIMELINE)
+  if (Timeline::recorder_discards_clock_values()) return -1;
   return OS::GetCurrentThreadCPUMicros();
+#else
+  return -1;
+#endif
 }
 
 intptr_t OS::ActivationFrameAlignment() {
diff --git a/runtime/vm/os_win.cc b/runtime/vm/os_win.cc
index 3eb9be0..5a4b01c 100644
--- a/runtime/vm/os_win.cc
+++ b/runtime/vm/os_win.cc
@@ -174,8 +174,20 @@
   return -1;
 }
 
+int64_t OS::GetCurrentMonotonicMicrosForTimeline() {
+#if defined(SUPPORT_TIMELINE)
+  return OS::GetCurrentMonotonicMicros();
+#else
+  return -1;
+#endif
+}
+
 int64_t OS::GetCurrentThreadCPUMicrosForTimeline() {
+#if defined(SUPPORT_TIMELINE)
   return OS::GetCurrentThreadCPUMicros();
+#else
+  return -1;
+#endif
 }
 
 intptr_t OS::ActivationFrameAlignment() {
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 7c6592f..7b89702 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -187,6 +187,7 @@
   const intptr_t num_fixed_params = function().num_fixed_parameters();
   const intptr_t num_opt_params = function().NumOptionalParameters();
   const intptr_t num_params = num_fixed_params + num_opt_params;
+  const bool copy_parameters = function().MakesCopyOfParameters();
 
   // Before we start allocating indices to variables, we'll setup the
   // parameters array, which can be used to access the raw parameters (i.e. not
@@ -212,7 +213,7 @@
         raw_parameter->set_needs_covariant_check_in_method();
       }
       raw_parameter->set_type_check_mode(variable->type_check_mode());
-      if (function().HasOptionalParameters()) {
+      if (copy_parameters) {
         bool ok = scope->AddVariable(raw_parameter);
         ASSERT(ok);
 
@@ -261,33 +262,30 @@
 
   // The copy parameters implementation will still write to local variables
   // which we assign indices as with the old CopyParams implementation.
-  VariableIndex parameter_index_start;
-  VariableIndex reamining_local_variables_start;
+  VariableIndex first_local_index;
   {
     // Compute start indices to parameters and locals, and the number of
     // parameters to copy.
-    if (num_opt_params == 0) {
-      parameter_index_start = first_parameter_index_ =
-          VariableIndex(num_params);
-      reamining_local_variables_start = VariableIndex(0);
+    if (!copy_parameters) {
+      ASSERT(suspend_state_var() == nullptr);
+      first_parameter_index_ = VariableIndex(num_params);
+      first_local_index = VariableIndex(0);
     } else {
-      parameter_index_start = first_parameter_index_ = VariableIndex(0);
-      reamining_local_variables_start = VariableIndex(-num_params);
+      // :suspend_state variable is inserted at the fixed slot
+      // before the copied parameters.
+      const intptr_t reserved_var_slot_count =
+          (suspend_state_var() != nullptr) ? 1 : 0;
+      first_parameter_index_ = VariableIndex(-reserved_var_slot_count);
+      first_local_index =
+          VariableIndex(first_parameter_index_.value() - num_params);
     }
   }
 
-  if (function_type_arguments_ != NULL && num_opt_params > 0) {
-    reamining_local_variables_start =
-        VariableIndex(reamining_local_variables_start.value() - 1);
-  }
-
   // Allocate parameters and local variables, either in the local frame or
   // in the context(s).
   bool found_captured_variables = false;
-  VariableIndex first_local_index =
-      VariableIndex(parameter_index_start.value() > 0 ? 0 : -num_params);
   VariableIndex next_free_index = scope->AllocateVariables(
-      function(), parameter_index_start, num_params, first_local_index, NULL,
+      function(), first_parameter_index_, num_params, first_local_index, NULL,
       &found_captured_variables);
 
   num_stack_locals_ = -next_free_index.value();
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index 2a6d1b8..fde06a9 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -74,6 +74,12 @@
     parent_type_arguments_ = parent_type_arguments;
   }
 
+  LocalVariable* suspend_state_var() const { return suspend_state_var_; }
+  void set_suspend_state_var(LocalVariable* suspend_state_var) {
+    ASSERT(suspend_state_var != nullptr);
+    suspend_state_var_ = suspend_state_var;
+  }
+
   void set_default_parameter_values(ZoneGrowableArray<const Instance*>* list) {
     default_parameter_values_ = list;
 #if defined(DEBUG)
@@ -260,6 +266,7 @@
   RegExpCompileData* regexp_compile_data_;
   LocalVariable* function_type_arguments_;
   LocalVariable* parent_type_arguments_;
+  LocalVariable* suspend_state_var_ = nullptr;
   LocalVariable* current_context_var_;
   LocalVariable* arg_desc_var_;
   LocalVariable* receiver_var_ = nullptr;
diff --git a/runtime/vm/program_visitor.cc b/runtime/vm/program_visitor.cc
index d813ce9..1b22693 100644
--- a/runtime/vm/program_visitor.cc
+++ b/runtime/vm/program_visitor.cc
@@ -218,13 +218,11 @@
   auto const heap = isolate_group->heap();
   ProgramWalker walker(zone, heap, visitor);
 
-  // Walk through the libraries and patches, looking for visitable objects.
+  // Walk through the libraries looking for visitable objects.
   const auto& libraries =
       GrowableObjectArray::Handle(zone, object_store->libraries());
   auto& lib = Library::Handle(zone);
   auto& cls = Class::Handle(zone);
-  auto& entry = Object::Handle(zone);
-  auto& patches = GrowableObjectArray::Handle(zone);
 
   for (intptr_t i = 0; i < libraries.Length(); i++) {
     lib ^= libraries.At(i);
@@ -233,11 +231,6 @@
       cls = it.GetNextClass();
       walker.AddToWorklist(cls);
     }
-    patches = lib.used_scripts();
-    for (intptr_t j = 0; j < patches.Length(); j++) {
-      entry = patches.At(j);
-      walker.AddToWorklist(entry);
-    }
   }
 
   // If there's a global object pool, add any visitable objects.
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index 80c1008..07b74a2 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -12,6 +12,7 @@
 #include "vm/isolate_reload.h"
 #include "vm/object.h"
 #include "vm/runtime_entry.h"
+#include "vm/stack_frame.h"
 #include "vm/visitor.h"
 
 namespace dart {
@@ -170,6 +171,13 @@
     case kPointerCid:
       instance_size = Pointer::InstanceSize();
       break;
+    case kSuspendStateCid: {
+      const SuspendStatePtr raw_suspend_state =
+          static_cast<const SuspendStatePtr>(this);
+      intptr_t frame_size = raw_suspend_state->untag()->frame_size_;
+      instance_size = SuspendState::InstanceSize(frame_size);
+      break;
+    }
     case kTypeArgumentsCid: {
       const TypeArgumentsPtr raw_array =
           static_cast<const TypeArgumentsPtr>(this);
@@ -208,7 +216,7 @@
     case kExceptionHandlersCid: {
       const ExceptionHandlersPtr raw_handlers =
           static_cast<const ExceptionHandlersPtr>(this);
-      intptr_t num_handlers = raw_handlers->untag()->num_entries_;
+      intptr_t num_handlers = raw_handlers->untag()->num_entries();
       instance_size = ExceptionHandlers::InstanceSize(num_handlers);
       break;
     }
@@ -563,7 +571,7 @@
 VARIABLE_COMPRESSED_VISITOR(TypeArguments,
                             Smi::Value(raw_obj->untag()->length()))
 VARIABLE_COMPRESSED_VISITOR(LocalVarDescriptors, raw_obj->untag()->num_entries_)
-VARIABLE_COMPRESSED_VISITOR(ExceptionHandlers, raw_obj->untag()->num_entries_)
+VARIABLE_COMPRESSED_VISITOR(ExceptionHandlers, raw_obj->untag()->num_entries())
 VARIABLE_COMPRESSED_VISITOR(Context, raw_obj->untag()->num_variables_)
 VARIABLE_COMPRESSED_VISITOR(Array, Smi::Value(raw_obj->untag()->length()))
 VARIABLE_COMPRESSED_VISITOR(
@@ -626,6 +634,33 @@
   return Field::InstanceSize();
 }
 
+intptr_t UntaggedSuspendState::VisitSuspendStatePointers(
+    SuspendStatePtr raw_obj,
+    ObjectPointerVisitor* visitor) {
+  ASSERT(raw_obj->IsHeapObject());
+  ASSERT_COMPRESSED(SuspendState);
+
+  if (visitor->CanVisitSuspendStatePointers(raw_obj)) {
+    visitor->VisitCompressedPointers(
+        raw_obj->heap_base(), raw_obj->untag()->from(), raw_obj->untag()->to());
+
+    const uword pc = raw_obj->untag()->pc_;
+    if (pc != 0) {
+      Thread* thread = Thread::Current();
+      ASSERT(thread != nullptr);
+      ASSERT(thread->isolate_group() == visitor->isolate_group());
+      const uword sp = reinterpret_cast<uword>(raw_obj->untag()->payload());
+      StackFrame frame(thread);
+      frame.pc_ = pc;
+      frame.sp_ = sp;
+      frame.fp_ = sp + raw_obj->untag()->frame_size_;
+      frame.VisitObjectPointers(visitor);
+    }
+  }
+
+  return SuspendState::InstanceSize(raw_obj->untag()->frame_size_);
+}
+
 bool UntaggedCode::ContainsPC(const ObjectPtr raw_obj, uword pc) {
   if (!raw_obj->IsCode()) return false;
   auto const raw_code = static_cast<const CodePtr>(raw_obj);
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 8e50977..5677ff9 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -2249,16 +2249,30 @@
  private:
   RAW_HEAP_OBJECT_IMPLEMENTATION(ExceptionHandlers);
 
-  // Number of exception handler entries.
-  int32_t num_entries_;
+  // Number of exception handler entries and
+  // async handler.
+  uint32_t packed_fields_;
 
-  // Array with [num_entries_] entries. Each entry is an array of all handled
+  // Async handler is used in the async/async* functions.
+  // It's an implicit exception handler (stub) which runs when
+  // exception is not handled within the function.
+  using AsyncHandlerBit = BitField<decltype(packed_fields_), bool, 0, 1>;
+  using NumEntriesBits = BitField<decltype(packed_fields_),
+                                  uint32_t,
+                                  AsyncHandlerBit::kNextBit,
+                                  31>;
+
+  intptr_t num_entries() const {
+    return NumEntriesBits::decode(packed_fields_);
+  }
+
+  // Array with [num_entries] entries. Each entry is an array of all handled
   // exception types.
   COMPRESSED_POINTER_FIELD(ArrayPtr, handled_types_data)
   VISIT_FROM(handled_types_data)
   VISIT_TO(handled_types_data)
 
-  // Exception handler info of length [num_entries_].
+  // Exception handler info of length [num_entries].
   const ExceptionHandlerInfo* data() const {
     OPEN_ARRAY_START(ExceptionHandlerInfo, intptr_t);
   }
@@ -3272,6 +3286,30 @@
   bool skip_sync_start_in_parent_stack;
 };
 
+class UntaggedSuspendState : public UntaggedInstance {
+  RAW_HEAP_OBJECT_IMPLEMENTATION(SuspendState);
+
+  intptr_t frame_size_;
+  uword pc_;
+
+  COMPRESSED_POINTER_FIELD(InstancePtr, future)
+  COMPRESSED_POINTER_FIELD(ClosurePtr, then_callback)
+  COMPRESSED_POINTER_FIELD(ClosurePtr, error_callback)
+  VISIT_FROM(future)
+  VISIT_TO(error_callback)
+
+ public:
+  uword pc() const { return pc_; }
+
+  static intptr_t payload_offset() {
+    return OFFSET_OF_RETURNED_VALUE(UntaggedSuspendState, payload);
+  }
+
+  // Variable length payload follows here.
+  uint8_t* payload() { OPEN_ARRAY_START(uint8_t, uint8_t); }
+  const uint8_t* payload() const { OPEN_ARRAY_START(uint8_t, uint8_t); }
+};
+
 // VM type for capturing JS regular expressions.
 class UntaggedRegExp : public UntaggedInstance {
   RAW_HEAP_OBJECT_IMPLEMENTATION(RegExp);
diff --git a/runtime/vm/raw_object_fields.cc b/runtime/vm/raw_object_fields.cc
index d62f9ef..749e1d2 100644
--- a/runtime/vm/raw_object_fields.cc
+++ b/runtime/vm/raw_object_fields.cc
@@ -191,6 +191,9 @@
   F(RegExp, two_byte_sticky_)                                                  \
   F(RegExp, external_one_byte_sticky_)                                         \
   F(RegExp, external_two_byte_sticky_)                                         \
+  F(SuspendState, future_)                                                     \
+  F(SuspendState, then_callback_)                                              \
+  F(SuspendState, error_callback_)                                             \
   F(WeakProperty, key_)                                                        \
   F(WeakProperty, value_)                                                      \
   F(WeakReference, target_)                                                    \
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 99601df..b1b3345 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -709,6 +709,19 @@
   arguments.SetReturn(cloned_ctx);
 }
 
+// Allocate a SuspendState object.
+// Arg0: frame size.
+// Arg1: future.
+// Return value: newly allocated object.
+DEFINE_RUNTIME_ENTRY(AllocateSuspendState, 2) {
+  const Smi& frame_size = Smi::CheckedHandle(zone, arguments.ArgAt(0));
+  const Instance& future = Instance::CheckedHandle(zone, arguments.ArgAt(1));
+  const SuspendState& result = SuspendState::Handle(
+      zone, SuspendState::New(frame_size.Value(), future,
+                              SpaceForRuntimeAllocation()));
+  arguments.SetReturn(result);
+}
+
 // Helper routine for tracing a type check.
 static void PrintTypeCheck(const char* message,
                            const Instance& instance,
diff --git a/runtime/vm/runtime_entry_list.h b/runtime/vm/runtime_entry_list.h
index 857784b..685c56d 100644
--- a/runtime/vm/runtime_entry_list.h
+++ b/runtime/vm/runtime_entry_list.h
@@ -18,6 +18,7 @@
   V(AllocateClosure)                                                           \
   V(AllocateContext)                                                           \
   V(AllocateObject)                                                            \
+  V(AllocateSuspendState)                                                      \
   V(BoxDouble)                                                                 \
   V(BreakpointRuntimeHandler)                                                  \
   V(SingleStepHandler)                                                         \
diff --git a/runtime/vm/scopes.cc b/runtime/vm/scopes.cc
index b155a46..412c3b3 100644
--- a/runtime/vm/scopes.cc
+++ b/runtime/vm/scopes.cc
@@ -149,6 +149,7 @@
   LocalVariable* controller = nullptr;
   LocalVariable* chained_future = nullptr;
   LocalVariable* is_sync = nullptr;
+  LocalVariable* suspend_state_var = nullptr;
   for (intptr_t i = 0; i < num_variables(); i++) {
     LocalVariable* variable = VariableAt(i);
     if (variable->owner() == this) {
@@ -164,6 +165,10 @@
         } else if (variable->name().Equals(Symbols::is_sync())) {
           is_sync = variable;
         }
+      } else {
+        if (variable->name().Equals(Symbols::SuspendStateVar())) {
+          suspend_state_var = variable;
+        }
       }
     }
   }
@@ -218,6 +223,12 @@
     ASSERT(is_sync->index().value() == Context::kIsSyncIndex);
   }
 
+  if (suspend_state_var != nullptr) {
+    suspend_state_var->set_index(
+        VariableIndex(SuspendState::kSuspendStateVarIndex));
+    ASSERT(next_index.value() == SuspendState::kSuspendStateVarIndex - 1);
+  }
+
   while (pos < num_parameters) {
     LocalVariable* parameter = VariableAt(pos);
     pos++;
@@ -253,8 +264,10 @@
           *found_captured_variables = true;
         }
       } else {
-        variable->set_index(next_index);
-        next_index = VariableIndex(next_index.value() - 1);
+        if (variable != suspend_state_var) {
+          variable->set_index(next_index);
+          next_index = VariableIndex(next_index.value() - 1);
+        }
       }
     }
     pos++;
diff --git a/runtime/vm/stack_frame.cc b/runtime/vm/stack_frame.cc
index 7a43ea7..ad22d03 100644
--- a/runtime/vm/stack_frame.cc
+++ b/runtime/vm/stack_frame.cc
@@ -394,21 +394,25 @@
     return true;
   }
 
-  if (handlers.num_entries() == 0) {
-    return false;
-  }
-
   intptr_t try_index = -1;
-  uword pc_offset = pc() - code.PayloadStart();
-  PcDescriptors::Iterator iter(descriptors, UntaggedPcDescriptors::kAnyKind);
-  while (iter.MoveNext()) {
-    const intptr_t current_try_index = iter.TryIndex();
-    if ((iter.PcOffset() == pc_offset) && (current_try_index != -1)) {
-      try_index = current_try_index;
-      break;
+  if (handlers.num_entries() != 0) {
+    uword pc_offset = pc() - code.PayloadStart();
+    PcDescriptors::Iterator iter(descriptors, UntaggedPcDescriptors::kAnyKind);
+    while (iter.MoveNext()) {
+      const intptr_t current_try_index = iter.TryIndex();
+      if ((iter.PcOffset() == pc_offset) && (current_try_index != -1)) {
+        try_index = current_try_index;
+        break;
+      }
     }
   }
   if (try_index == -1) {
+    if (handlers.has_async_handler()) {
+      *handler_pc = StubCode::AsyncExceptionHandler().EntryPoint();
+      *needs_stacktrace = true;
+      *has_catch_all = true;
+      return true;
+    }
     return false;
   }
   ExceptionHandlerInfo handler_info;
diff --git a/runtime/vm/stack_frame.h b/runtime/vm/stack_frame.h
index 3574ec3..c25e0cd 100644
--- a/runtime/vm/stack_frame.h
+++ b/runtime/vm/stack_frame.h
@@ -159,6 +159,9 @@
   // fields fp_ and sp_ when they return the respective frame objects.
   friend class FrameSetIterator;
   friend class StackFrameIterator;
+  // UntaggedSuspendState::VisitSuspendStatePointers creates a temporary
+  // StackFrame objects for the copied frames of the suspended functions.
+  friend class UntaggedSuspendState;
   friend class ProfilerDartStackWalker;
   DISALLOW_COPY_AND_ASSIGN(StackFrame);
 };
diff --git a/runtime/vm/stack_trace.cc b/runtime/vm/stack_trace.cc
index eee21f8..d172704 100644
--- a/runtime/vm/stack_trace.cc
+++ b/runtime/vm/stack_trace.cc
@@ -59,6 +59,7 @@
       receiver_context_(Context::Handle(zone)),
       receiver_function_(Function::Handle(zone)),
       parent_function_(Function::Handle(zone)),
+      suspend_state_(SuspendState::Handle(zone)),
       context_entry_(Object::Handle(zone)),
       future_(Object::Handle(zone)),
       listener_(Object::Handle(zone)),
@@ -266,6 +267,12 @@
   return UnwrapAsyncThen(closure_);
 }
 
+ClosurePtr CallerClosureFinder::FindCallerFromSuspendState(
+    const SuspendState& suspend_state) {
+  future_ = suspend_state.future();
+  return GetCallerInFutureImpl(future_);
+}
+
 ClosurePtr CallerClosureFinder::UnwrapAsyncThen(const Closure& closure) {
   if (closure.IsNull()) return closure.ptr();
 
@@ -280,11 +287,31 @@
   return closure.ptr();
 }
 
+bool CallerClosureFinder::IsCompactAsyncCallback(const Function& function) {
+  parent_function_ = function.parent_function();
+  return parent_function_.recognized_kind() ==
+         MethodRecognizer::kSuspendState_createAsyncCallbacks;
+}
+
+SuspendStatePtr CallerClosureFinder::GetSuspendStateFromAsyncCallback(
+    const Closure& closure) {
+  ASSERT(IsCompactAsyncCallback(Function::Handle(closure.function())));
+  // Async handler only captures the receiver (SuspendState).
+  receiver_context_ = closure.context();
+  RELEASE_ASSERT(receiver_context_.num_variables() == 1);
+  return SuspendState::RawCast(receiver_context_.At(0));
+}
+
 ClosurePtr CallerClosureFinder::FindCallerInternal(
     const Closure& receiver_closure) {
   receiver_function_ = receiver_closure.function();
   receiver_context_ = receiver_closure.context();
 
+  if (IsCompactAsyncCallback(receiver_function_)) {
+    suspend_state_ = GetSuspendStateFromAsyncCallback(receiver_closure);
+    return FindCallerFromSuspendState(suspend_state_);
+  }
+
   if (receiver_function_.IsAsyncGenClosure()) {
     return FindCallerInAsyncGenClosure(receiver_context_);
   }
@@ -442,6 +469,21 @@
     return Closure::null();
   }
 
+  if (function.IsCompactAsyncFunction()) {
+    auto& suspend_state = Object::Handle(
+        zone, *reinterpret_cast<ObjectPtr*>(LocalVarAddress(
+                  frame->fp(), runtime_frame_layout.FrameSlotForVariableIndex(
+                                   SuspendState::kSuspendStateVarIndex))));
+    if (suspend_state.IsSuspendState()) {
+      *is_async = true;
+      return caller_closure_finder->FindCallerFromSuspendState(
+          SuspendState::Cast(suspend_state));
+    }
+
+    // Still running the sync part before the first await.
+    return Closure::null();
+  }
+
   if (function.IsAsyncClosure() || function.IsAsyncGenClosure()) {
     // Next, look up caller's closure on the stack and walk backwards
     // through the yields.
@@ -506,6 +548,7 @@
   auto& function = Function::Handle(zone);
   auto& closure = Closure::Handle(zone, leaf_closure.ptr());
   auto& pc_descs = PcDescriptors::Handle(zone);
+  auto& suspend_state = SuspendState::Handle(zone);
 
   // Inject async suspension marker.
   code_array.Add(StubCode::AsynchronousGapMarker());
@@ -518,16 +561,31 @@
     if (function.IsNull()) {
       continue;
     }
-    // In hot-reload-test-mode we sometimes have to do this:
-    code = function.EnsureHasCode();
-    RELEASE_ASSERT(!code.IsNull());
-    code_array.Add(code);
-    pc_descs = code.pc_descriptors();
-    const intptr_t pc_offset = 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);
+    if (caller_closure_finder->IsCompactAsyncCallback(function)) {
+      suspend_state =
+          caller_closure_finder->GetSuspendStateFromAsyncCallback(closure);
+      const uword pc = suspend_state.pc();
+      if (pc == 0) {
+        // Async function is already resumed.
+        continue;
+      }
+      code = suspend_state.GetCodeObject();
+      code_array.Add(code);
+      const uword pc_offset = pc - code.PayloadStart();
+      ASSERT(pc_offset > 0 && pc_offset <= code.Size());
+      pc_offset_array->Add(pc_offset);
+    } else {
+      // In hot-reload-test-mode we sometimes have to do this:
+      code = function.EnsureHasCode();
+      RELEASE_ASSERT(!code.IsNull());
+      code_array.Add(code);
+      pc_descs = code.pc_descriptors();
+      const intptr_t pc_offset = 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);
+    }
 
     // Inject async suspension marker.
     code_array.Add(StubCode::AsynchronousGapMarker());
diff --git a/runtime/vm/stack_trace.h b/runtime/vm/stack_trace.h
index 58a4cba..bab4fd1 100644
--- a/runtime/vm/stack_trace.h
+++ b/runtime/vm/stack_trace.h
@@ -36,6 +36,17 @@
   // we can do this by finding and following their awaited Futures.
   ClosurePtr FindCaller(const Closure& receiver_closure);
 
+  // Find caller closure from a SuspendState of a resumed async function.
+  ClosurePtr FindCallerFromSuspendState(const SuspendState& suspend_state);
+
+  // Returns true if given closure function is a Future callback
+  // corresponding to an async function.
+  bool IsCompactAsyncCallback(const Function& function);
+
+  // Returns SuspendState from the given Future callback which corresponds
+  // to an async function.
+  SuspendStatePtr GetSuspendStateFromAsyncCallback(const Closure& closure);
+
   // Finds the awaited Future from an async function receiver closure.
   ObjectPtr GetAsyncFuture(const Closure& receiver_closure);
 
@@ -64,6 +75,7 @@
   Context& receiver_context_;
   Function& receiver_function_;
   Function& parent_function_;
+  SuspendState& suspend_state_;
 
   Object& context_entry_;
   Object& future_;
diff --git a/runtime/vm/stub_code_list.h b/runtime/vm/stub_code_list.h
index 7ac3cde..b035700 100644
--- a/runtime/vm/stub_code_list.h
+++ b/runtime/vm/stub_code_list.h
@@ -149,6 +149,12 @@
   V(InstantiateTypeArgumentsMayShareInstantiatorTA)                            \
   V(InstantiateTypeArgumentsMayShareFunctionTA)                                \
   V(NoSuchMethodDispatcher)                                                    \
+  V(AwaitAsync)                                                                \
+  V(InitAsync)                                                                 \
+  V(Resume)                                                                    \
+  V(ReturnAsync)                                                               \
+  V(ReturnAsyncNotFuture)                                                      \
+  V(AsyncExceptionHandler)                                                     \
   V(UnknownDartCode)
 
 }  // namespace dart
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index f96d8d3..34053dc 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -244,6 +244,7 @@
   V(StringBase, "_StringBase")                                                 \
   V(Struct, "Struct")                                                          \
   V(SubtypeTestCache, "SubtypeTestCache")                                      \
+  V(SuspendStateVar, ":suspend_state_var")                                     \
   V(LoadingUnit, "LoadingUnit")                                                \
   V(SwitchExpr, ":switch_expr")                                                \
   V(Symbol, "Symbol")                                                          \
@@ -379,6 +380,7 @@
   V(_StreamController, "_StreamController")                                    \
   V(_StreamIterator, "_StreamIterator")                                        \
   V(_String, "String")                                                         \
+  V(_SuspendState, "_SuspendState")                                            \
   V(_SyncIterator, "_SyncIterator")                                            \
   V(_SyncStreamController, "_SyncStreamController")                            \
   V(_TransferableTypedDataImpl, "_TransferableTypedDataImpl")                  \
@@ -408,13 +410,16 @@
   V(_WeakProperty, "_WeakProperty")                                            \
   V(_WeakReferenceImpl, "_WeakReferenceImpl")                                  \
   V(_typedDataBase, "_typedDataBase")                                          \
+  V(_awaitAsync, "_awaitAsync")                                                \
   V(_classRangeCheck, "_classRangeCheck")                                      \
   V(_ensureScheduleImmediate, "_ensureScheduleImmediate")                      \
   V(_future, "_future")                                                        \
+  V(_handleException, "_handleException")                                      \
   V(_handleMessage, "_handleMessage")                                          \
   V(_handleFinalizerMessage, "_handleFinalizerMessage")                        \
   V(_handleNativeFinalizerMessage, "_handleNativeFinalizerMessage")            \
   V(_hasValue, "_hasValue")                                                    \
+  V(_initAsync, "_initAsync")                                                  \
   V(_instanceOf, "_instanceOf")                                                \
   V(_listGetAt, "_listGetAt")                                                  \
   V(_listLength, "_listLength")                                                \
@@ -432,6 +437,8 @@
   V(_onData, "_onData")                                                        \
   V(_rehashObjects, "_rehashObjects")                                          \
   V(_resultOrListeners, "_resultOrListeners")                                  \
+  V(_returnAsync, "_returnAsync")                                              \
+  V(_returnAsyncNotFuture, "_returnAsyncNotFuture")                            \
   V(_runExtension, "_runExtension")                                            \
   V(_runPendingImmediateCallback, "_runPendingImmediateCallback")              \
   V(_scanFlags, "_scanFlags")                                                  \
diff --git a/runtime/vm/tagged_pointer.h b/runtime/vm/tagged_pointer.h
index 09968d4..172831f 100644
--- a/runtime/vm/tagged_pointer.h
+++ b/runtime/vm/tagged_pointer.h
@@ -410,6 +410,7 @@
 DEFINE_TAGGED_POINTER(ReceivePort, Instance)
 DEFINE_TAGGED_POINTER(TransferableTypedData, Instance)
 DEFINE_TAGGED_POINTER(StackTrace, Instance)
+DEFINE_TAGGED_POINTER(SuspendState, Instance)
 DEFINE_TAGGED_POINTER(RegExp, Instance)
 DEFINE_TAGGED_POINTER(WeakProperty, Instance)
 DEFINE_TAGGED_POINTER(WeakReference, Instance)
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index f742cd0..32dc3ba 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -166,6 +166,13 @@
   CACHED_NON_VM_STUB_LIST(V)                                                   \
   CACHED_VM_STUBS_LIST(V)
 
+#define CACHED_FUNCTION_ENTRY_POINTS_LIST(V)                                   \
+  V(suspend_state_init_async)                                                  \
+  V(suspend_state_await_async)                                                 \
+  V(suspend_state_return_async)                                                \
+  V(suspend_state_return_async_not_future)                                     \
+  V(suspend_state_handle_exception)
+
 // This assertion marks places which assume that boolean false immediate
 // follows bool true in the CACHED_VM_OBJECTS_LIST
 #define ASSERT_BOOL_FALSE_FOLLOWS_BOOL_TRUE()                                  \
@@ -724,6 +731,13 @@
   static bool ObjectAtOffset(intptr_t offset, Object* object);
   static intptr_t OffsetFromThread(const RuntimeEntry* runtime_entry);
 
+#define DEFINE_OFFSET_METHOD(name)                                             \
+  static intptr_t name##_entry_point_offset() {                                \
+    return OFFSET_OF(Thread, name##_entry_point_);                             \
+  }
+  CACHED_FUNCTION_ENTRY_POINTS_LIST(DEFINE_OFFSET_METHOD)
+#undef DEFINE_OFFSET_METHOD
+
 #if defined(DEBUG)
   // For asserts only. Has false positives when running with a simulator or
   // SafeStack.
@@ -1153,6 +1167,10 @@
   uword write_barrier_wrappers_entry_points_[kNumberOfDartAvailableCpuRegs];
 #endif
 
+#define DECLARE_MEMBERS(name) uword name##_entry_point_ = 0;
+  CACHED_FUNCTION_ENTRY_POINTS_LIST(DECLARE_MEMBERS)
+#undef DECLARE_MEMBERS
+
   // JumpToExceptionHandler state:
   ObjectPtr active_exception_;
   ObjectPtr active_stacktrace_;
diff --git a/runtime/vm/timeline.cc b/runtime/vm/timeline.cc
index fc57084..ed63079 100644
--- a/runtime/vm/timeline.cc
+++ b/runtime/vm/timeline.cc
@@ -232,10 +232,6 @@
   }
 }
 
-TimelineEventRecorder* Timeline::recorder() {
-  return recorder_;
-}
-
 void Timeline::ReclaimCachedBlocksFromThreads() {
   RecorderLockScope rl;
   TimelineEventRecorder* recorder = Timeline::recorder();
@@ -389,6 +385,7 @@
 
 TimelineEventRecorder* Timeline::recorder_ = NULL;
 MallocGrowableArray<char*>* Timeline::enabled_streams_ = NULL;
+bool Timeline::recorder_discards_clock_values_ = false;
 
 #define TIMELINE_STREAM_DEFINE(name, fuchsia_name)                             \
   TimelineStream Timeline::stream_##name##_(#name, fuchsia_name, false);
@@ -739,7 +736,7 @@
 int64_t TimelineEvent::TimeDuration() const {
   if (timestamp1_ == 0) {
     // This duration is still open, use current time as end.
-    return OS::GetCurrentMonotonicMicros() - timestamp0_;
+    return OS::GetCurrentMonotonicMicrosForTimeline() - timestamp0_;
   }
   return timestamp1_ - timestamp0_;
 }
@@ -1681,7 +1678,7 @@
   ASSERT((phase[0] == 'n') || (phase[0] == 'b') || (phase[0] == 'e') ||
          (phase[0] == 'B') || (phase[0] == 'E'));
   ASSERT(phase[1] == '\0');
-  const int64_t start = OS::GetCurrentMonotonicMicros();
+  const int64_t start = OS::GetCurrentMonotonicMicrosForTimeline();
   const int64_t start_cpu = OS::GetCurrentThreadCPUMicrosForTimeline();
   switch (phase[0]) {
     case 'n':
@@ -1713,7 +1710,7 @@
                                                int64_t type,
                                                int64_t flow_id,
                                                char* args) {
-  const int64_t start = OS::GetCurrentMonotonicMicros();
+  const int64_t start = OS::GetCurrentMonotonicMicrosForTimeline();
   TimelineEvent::EventType event_type =
       static_cast<TimelineEvent::EventType>(type);
   switch (event_type) {
@@ -1739,7 +1736,7 @@
                                                   const char* category,
                                                   char* name,
                                                   char* args) {
-  const int64_t start = OS::GetCurrentMonotonicMicros();
+  const int64_t start = OS::GetCurrentMonotonicMicrosForTimeline();
   event->Instant(name, start);
   event->set_owns_label(true);
   event->CompleteWithPreSerializedArgs(args);
diff --git a/runtime/vm/timeline.h b/runtime/vm/timeline.h
index 8f1df56..7456aab 100644
--- a/runtime/vm/timeline.h
+++ b/runtime/vm/timeline.h
@@ -174,7 +174,14 @@
   static void Cleanup();
 
   // Access the global recorder. Not thread safe.
-  static TimelineEventRecorder* recorder();
+  static TimelineEventRecorder* recorder() { return recorder_; }
+
+  static bool recorder_discards_clock_values() {
+    return recorder_discards_clock_values_;
+  }
+  static void set_recorder_discards_clock_values(bool value) {
+    recorder_discards_clock_values_ = value;
+  }
 
   // Reclaim all |TimelineEventBlocks|s that are cached by threads.
   static void ReclaimCachedBlocksFromThreads();
@@ -204,6 +211,7 @@
  private:
   static TimelineEventRecorder* recorder_;
   static MallocGrowableArray<char*>* enabled_streams_;
+  static bool recorder_discards_clock_values_;
 
 #define TIMELINE_STREAM_DECLARE(name, fuchsia_name)                            \
   static TimelineStream stream_##name##_;
@@ -293,26 +301,27 @@
   // Marks the beginning of an asynchronous operation with |async_id|.
   void AsyncBegin(const char* label,
                   int64_t async_id,
-                  int64_t micros = OS::GetCurrentMonotonicMicros());
+                  int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline());
   // Marks an instantaneous event associated with |async_id|.
-  void AsyncInstant(const char* label,
-                    int64_t async_id,
-                    int64_t micros = OS::GetCurrentMonotonicMicros());
+  void AsyncInstant(
+      const char* label,
+      int64_t async_id,
+      int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline());
   // Marks the end of an asynchronous operation associated with |async_id|.
   void AsyncEnd(const char* label,
                 int64_t async_id,
-                int64_t micros = OS::GetCurrentMonotonicMicros());
+                int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline());
 
   void DurationBegin(
       const char* label,
-      int64_t micros = OS::GetCurrentMonotonicMicros(),
+      int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline(),
       int64_t thread_micros = OS::GetCurrentThreadCPUMicrosForTimeline());
   void DurationEnd(
-      int64_t micros = OS::GetCurrentMonotonicMicros(),
+      int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline(),
       int64_t thread_micros = OS::GetCurrentThreadCPUMicrosForTimeline());
 
   void Instant(const char* label,
-               int64_t micros = OS::GetCurrentMonotonicMicros());
+               int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline());
 
   void Duration(const char* label,
                 int64_t start_micros,
@@ -322,28 +331,28 @@
 
   void Begin(
       const char* label,
-      int64_t micros = OS::GetCurrentMonotonicMicros(),
+      int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline(),
       int64_t thread_micros = OS::GetCurrentThreadCPUMicrosForTimeline());
 
   void End(const char* label,
-           int64_t micros = OS::GetCurrentMonotonicMicros(),
+           int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline(),
            int64_t thread_micros = OS::GetCurrentThreadCPUMicrosForTimeline());
 
   void Counter(const char* label,
-               int64_t micros = OS::GetCurrentMonotonicMicros());
+               int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline());
 
   void FlowBegin(const char* label,
                  int64_t async_id,
-                 int64_t micros = OS::GetCurrentMonotonicMicros());
+                 int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline());
   void FlowStep(const char* label,
                 int64_t async_id,
-                int64_t micros = OS::GetCurrentMonotonicMicros());
+                int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline());
   void FlowEnd(const char* label,
                int64_t async_id,
-               int64_t micros = OS::GetCurrentMonotonicMicros());
+               int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline());
 
   void Metadata(const char* label,
-                int64_t micros = OS::GetCurrentMonotonicMicros());
+                int64_t micros = OS::GetCurrentMonotonicMicrosForTimeline());
 
   void CompleteWithPreSerializedArgs(char* args_json);
 
diff --git a/runtime/vm/timeline_android.cc b/runtime/vm/timeline_android.cc
index 93e2faa..f91ee42 100644
--- a/runtime/vm/timeline_android.cc
+++ b/runtime/vm/timeline_android.cc
@@ -41,7 +41,9 @@
 }
 
 TimelineEventSystraceRecorder::TimelineEventSystraceRecorder()
-    : TimelineEventPlatformRecorder(), systrace_fd_(OpenTraceFD()) {}
+    : TimelineEventPlatformRecorder(), systrace_fd_(OpenTraceFD()) {
+  Timeline::set_recorder_discards_clock_values(true);
+}
 
 TimelineEventSystraceRecorder::~TimelineEventSystraceRecorder() {
   if (systrace_fd_ >= 0) {
diff --git a/runtime/vm/timeline_linux.cc b/runtime/vm/timeline_linux.cc
index f685df2..a85f9e5 100644
--- a/runtime/vm/timeline_linux.cc
+++ b/runtime/vm/timeline_linux.cc
@@ -41,7 +41,9 @@
 }
 
 TimelineEventSystraceRecorder::TimelineEventSystraceRecorder()
-    : TimelineEventPlatformRecorder(), systrace_fd_(OpenTraceFD()) {}
+    : TimelineEventPlatformRecorder(), systrace_fd_(OpenTraceFD()) {
+  Timeline::set_recorder_discards_clock_values(true);
+}
 
 TimelineEventSystraceRecorder::~TimelineEventSystraceRecorder() {
   if (systrace_fd_ >= 0) {
diff --git a/runtime/vm/timeline_macos.cc b/runtime/vm/timeline_macos.cc
index 1bda7e5..cbb2efa 100644
--- a/runtime/vm/timeline_macos.cc
+++ b/runtime/vm/timeline_macos.cc
@@ -12,7 +12,9 @@
 
 // Only available on iOS 12.0, macOS 10.14 or above
 TimelineEventMacosRecorder::TimelineEventMacosRecorder()
-    : TimelineEventPlatformRecorder() {}
+    : TimelineEventPlatformRecorder() {
+  Timeline::set_recorder_discards_clock_values(true);
+}
 
 TimelineEventMacosRecorder::~TimelineEventMacosRecorder() {}
 
diff --git a/runtime/vm/visitor.h b/runtime/vm/visitor.h
index fd2a78c..2ed6547 100644
--- a/runtime/vm/visitor.h
+++ b/runtime/vm/visitor.h
@@ -64,6 +64,15 @@
     return shared_class_table_;
   }
 
+  // Returns true if pointers of the given SuspendState object can be visited.
+  // Compactor overrides this method in order to postpone visiting SuspendState
+  // objects with evacuated frames, as visiting them may touch other Dart
+  // objects (array of InstructionsTables) which have inconsistent state
+  // until compaction is finished.
+  virtual bool CanVisitSuspendStatePointers(SuspendStatePtr suspend_state) {
+    return true;
+  }
+
  private:
   IsolateGroup* isolate_group_;
   const char* gc_root_type_;
diff --git a/sdk/lib/_internal/vm/lib/async_patch.dart b/sdk/lib/_internal/vm/lib/async_patch.dart
index 3d4b20b..27eb7e6 100644
--- a/sdk/lib/_internal/vm/lib/async_patch.dart
+++ b/sdk/lib/_internal/vm/lib/async_patch.dart
@@ -7,7 +7,7 @@
 /// by patches of that library. We plan to change this when we have a shared
 /// front end and simply use parts.
 
-import "dart:_internal" show VMLibraryHooks, patch;
+import "dart:_internal" show VMLibraryHooks, patch, unsafeCast;
 
 /// These are the additional parts of this patch library:
 // part "deferred_load_patch.dart";
@@ -70,8 +70,8 @@
 ///
 /// Returns the result of registering with `.then`.
 Future _awaitHelper(var object, dynamic Function(dynamic) thenCallback,
-    dynamic Function(dynamic, StackTrace) errorCallback) {
-  late _Future future;
+    dynamic Function(Object, StackTrace) errorCallback) {
+  _Future future;
   if (object is _Future) {
     future = object;
   } else if (object is! Future) {
@@ -318,3 +318,154 @@
 
 @pragma("vm:external-name", "AsyncStarMoveNext_debuggerStepCheck")
 external void _moveNextDebuggerStepCheck(Function async_op);
+
+@pragma("vm:entry-point")
+class _SuspendState {
+  static const bool _trace = false;
+
+  @pragma("vm:entry-point", "call")
+  @pragma("vm:invisible")
+  static Object? _initAsync<T>() {
+    if (_trace) print('_initAsync<$T>');
+    return new _Future<T>();
+  }
+
+  @pragma("vm:invisible")
+  @pragma("vm:recognized", "other")
+  void _createAsyncCallbacks() {
+    if (_trace) print('_createAsyncCallbacks');
+
+    @pragma("vm:invisible")
+    thenCallback(value) {
+      if (_trace) print('thenCallback (this=$this, value=$value)');
+      _resume(value, null, null);
+    }
+
+    @pragma("vm:invisible")
+    errorCallback(exception, stackTrace) {
+      if (_trace) {
+        print('errorCallback (this=$this, '
+            'exception=$exception, stackTrace=$stackTrace)');
+      }
+      _resume(null, exception, stackTrace);
+    }
+
+    final currentZone = Zone._current;
+    if (identical(currentZone, _rootZone) ||
+        identical(currentZone._registerUnaryCallback,
+            _rootZone._registerUnaryCallback)) {
+      _thenCallback = thenCallback;
+    } else {
+      _thenCallback =
+          currentZone.registerUnaryCallback<dynamic, dynamic>(thenCallback);
+    }
+    if (identical(currentZone, _rootZone) ||
+        identical(currentZone._registerBinaryCallback,
+            _rootZone._registerBinaryCallback)) {
+      _errorCallback = errorCallback;
+    } else {
+      _errorCallback = currentZone
+          .registerBinaryCallback<dynamic, Object, StackTrace>(errorCallback);
+    }
+  }
+
+  @pragma("vm:entry-point", "call")
+  @pragma("vm:invisible")
+  Object? _awaitAsync(Object? object) {
+    if (_trace) print('_awaitAsync (object=$object)');
+    if (_thenCallback == null) {
+      _createAsyncCallbacks();
+    }
+    _awaitHelper(object, unsafeCast<dynamic Function(dynamic)>(_thenCallback),
+        unsafeCast<dynamic Function(Object, StackTrace)>(_errorCallback));
+    return _future;
+  }
+
+  @pragma("vm:entry-point", "call")
+  @pragma("vm:invisible")
+  static Future _returnAsync(Object suspendState, Object? returnValue) {
+    if (_trace) {
+      print('_returnAsync (suspendState=$suspendState, '
+          'returnValue=$returnValue)');
+    }
+    _Future future;
+    bool isSync = true;
+    if (suspendState is _SuspendState) {
+      future = suspendState._future;
+    } else {
+      future = unsafeCast<_Future>(suspendState);
+      isSync = false;
+    }
+    _completeOnAsyncReturn(future, returnValue, isSync);
+    return future;
+  }
+
+  @pragma("vm:entry-point", "call")
+  @pragma("vm:invisible")
+  static Future _returnAsyncNotFuture(
+      Object suspendState, Object? returnValue) {
+    if (_trace) {
+      print('_returnAsyncNotFuture (suspendState=$suspendState, '
+          'returnValue=$returnValue)');
+    }
+    _Future future;
+    bool isSync = true;
+    if (suspendState is _SuspendState) {
+      future = suspendState._future;
+    } else {
+      future = unsafeCast<_Future>(suspendState);
+      isSync = false;
+    }
+    _completeWithNoFutureOnAsyncReturn(future, returnValue, isSync);
+    return future;
+  }
+
+  @pragma("vm:entry-point", "call")
+  @pragma("vm:invisible")
+  static Future _handleException(
+      Object suspendState, Object exception, StackTrace stackTrace) {
+    if (_trace) {
+      print('_handleException (suspendState=$suspendState, '
+          'exception=$exception, stackTrace=$stackTrace)');
+    }
+    _Future future;
+    bool isSync = true;
+    if (suspendState is _SuspendState) {
+      future = suspendState._future;
+    } else {
+      future = unsafeCast<_Future>(suspendState);
+      isSync = false;
+    }
+    _completeOnAsyncError(future, exception, stackTrace, isSync);
+    return future;
+  }
+
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external set _future(_Future value);
+
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external _Future get _future;
+
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external set _thenCallback(Function? value);
+
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external Function? get _thenCallback;
+
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external set _errorCallback(Function value);
+
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external Function get _errorCallback;
+
+  @pragma("vm:recognized", "other")
+  @pragma("vm:never-inline")
+  external void _resume(
+      dynamic value, Object? exception, StackTrace? stackTrace);
+}
diff --git a/sdk/lib/js_util/js_util.dart b/sdk/lib/js_util/js_util.dart
index 081bcb8..ce77e95 100644
--- a/sdk/lib/js_util/js_util.dart
+++ b/sdk/lib/js_util/js_util.dart
@@ -285,6 +285,90 @@
       'Object', 'new #(#, #, #, #)', constr, arg1, arg2, arg3, arg4);
 }
 
+/// Perform JavaScript addition (`+`) on two values.
+@pragma('dart2js:tryInline')
+T add<T>(Object? first, Object? second) {
+  return JS<dynamic>('Object', '# + #', first, second);
+}
+
+/// Perform JavaScript subtraction (`-`) on two values.
+@pragma('dart2js:tryInline')
+T subtract<T>(Object? first, Object? second) {
+  return JS<dynamic>('Object', '# - #', first, second);
+}
+
+/// Perform JavaScript multiplication (`*`) on two values.
+@pragma('dart2js:tryInline')
+T multiply<T>(Object? first, Object? second) {
+  return JS<dynamic>('Object', '# * #', first, second);
+}
+
+/// Perform JavaScript division (`/`) on two values.
+@pragma('dart2js:tryInline')
+T divide<T>(Object? first, Object? second) {
+  return JS<dynamic>('Object', '# / #', first, second);
+}
+
+/// Perform JavaScript exponentiation (`**`) on two values.
+@pragma('dart2js:tryInline')
+T exponentiate<T>(Object? first, Object? second) {
+  return JS<dynamic>('Object', '# ** #', first, second);
+}
+
+/// Perform JavaScript remainder (`%`) on two values.
+@pragma('dart2js:tryInline')
+T modulo<T>(Object? first, Object? second) {
+  return JS<dynamic>('Object', '# % #', first, second);
+}
+
+/// Perform JavaScript equality comparison (`==`) on two values.
+@pragma('dart2js:tryInline')
+bool equal<T>(Object? first, Object? second) {
+  return JS<bool>('bool', '# == #', first, second);
+}
+
+/// Perform JavaScript strict equality comparison (`===`) on two values.
+@pragma('dart2js:tryInline')
+bool strictEqual<T>(Object? first, Object? second) {
+  return JS<bool>('bool', '# === #', first, second);
+}
+
+/// Perform JavaScript inequality comparison (`!=`) on two values.
+@pragma('dart2js:tryInline')
+bool notEqual<T>(Object? first, Object? second) {
+  return JS<bool>('bool', '# != #', first, second);
+}
+
+/// Perform JavaScript strict inequality comparison (`!==`) on two values.
+@pragma('dart2js:tryInline')
+bool strictNotEqual<T>(Object? first, Object? second) {
+  return JS<bool>('bool', '# !== #', first, second);
+}
+
+/// Perform JavaScript greater than comparison (`>`) of two values.
+@pragma('dart2js:tryInline')
+bool greaterThan<T>(Object? first, Object? second) {
+  return JS<bool>('bool', '# > #', first, second);
+}
+
+/// Perform JavaScript greater than or equal comparison (`>=`) of two values.
+@pragma('dart2js:tryInline')
+bool greaterThanOrEqual<T>(Object? first, Object? second) {
+  return JS<bool>('bool', '# >= #', first, second);
+}
+
+/// Perform JavaScript less than comparison (`<`) of two values.
+@pragma('dart2js:tryInline')
+bool lessThan<T>(Object? first, Object? second) {
+  return JS<bool>('bool', '# < #', first, second);
+}
+
+/// Perform JavaScript less than or equal comparison (`<=`) of two values.
+@pragma('dart2js:tryInline')
+bool lessThanOrEqual<T>(Object? first, Object? second) {
+  return JS<bool>('bool', '# <= #', first, second);
+}
+
 /// Exception for when the promise is rejected with a `null` or `undefined`
 /// value.
 ///
diff --git a/tests/language/async/and_or_test.dart b/tests/language/async/and_or_test.dart
index be24bb1..e636211 100644
--- a/tests/language/async/and_or_test.dart
+++ b/tests/language/async/and_or_test.dart
@@ -1,6 +1,10 @@
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // 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.
+
+// VMOptions=
+// VMOptions=--stress_write_barrier_elimination
+
 import "dart:async";
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
diff --git a/tests/language/async/async_test.dart b/tests/language/async/async_test.dart
index 9d1c01d..69638f0 100644
--- a/tests/language/async/async_test.dart
+++ b/tests/language/async/async_test.dart
@@ -2,6 +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.
 
+// VMOptions=
+// VMOptions=--stress_write_barrier_elimination
+
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 
diff --git a/tests/language/await/for_test.dart b/tests/language/await/for_test.dart
index 0c72a4d..7026e8b 100644
--- a/tests/language/await/for_test.dart
+++ b/tests/language/await/for_test.dart
@@ -2,6 +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.
 
+// VMOptions=
+// VMOptions=--stress_write_barrier_elimination
+
 import "dart:async";
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
diff --git a/tests/language_2/async/and_or_test.dart b/tests/language_2/async/and_or_test.dart
index 086e8e6..8a45868 100644
--- a/tests/language_2/async/and_or_test.dart
+++ b/tests/language_2/async/and_or_test.dart
@@ -2,6 +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.
 
+// VMOptions=
+// VMOptions=--stress_write_barrier_elimination
+
 // @dart = 2.9
 import "dart:async";
 import "package:expect/expect.dart";
diff --git a/tests/language_2/async/async_test.dart b/tests/language_2/async/async_test.dart
index db5c44a..27fcecf 100644
--- a/tests/language_2/async/async_test.dart
+++ b/tests/language_2/async/async_test.dart
@@ -2,6 +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.
 
+// VMOptions=
+// VMOptions=--stress_write_barrier_elimination
+
 // @dart = 2.9
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/language_2/await/for_test.dart b/tests/language_2/await/for_test.dart
index 214a61f..da1c7e2 100644
--- a/tests/language_2/await/for_test.dart
+++ b/tests/language_2/await/for_test.dart
@@ -2,6 +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.
 
+// VMOptions=
+// VMOptions=--stress_write_barrier_elimination
+
 // @dart = 2.9
 
 import "dart:async";
diff --git a/tests/lib/js/js_util/bigint_test.dart b/tests/lib/js/js_util/bigint_test.dart
new file mode 100644
index 0000000..47462e5
--- /dev/null
+++ b/tests/lib/js/js_util/bigint_test.dart
@@ -0,0 +1,110 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// 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.
+
+// Tests invoking JS BigInt functionality through js_util. This interop
+// requires usage of the operator functions exposed through js_util.
+
+@JS()
+library js_util_bigint_test;
+
+import 'package:js/js.dart';
+import 'package:js/js_util.dart' as js_util;
+import 'package:expect/minitest.dart';
+
+@JS('BigInt')
+external Object BigInt(Object value);
+
+main() {
+  group('bigint', () {
+    test('addition', () {
+      final one = BigInt('1');
+      final two = BigInt('2');
+      final three = BigInt('3');
+      expect(js_util.strictEqual(js_util.add(one, two), three), isTrue);
+      expect(js_util.strictEqual(js_util.add(one, one), three), isFalse);
+    });
+
+    test('subtraction', () {
+      final one = BigInt('1');
+      final two = BigInt('2');
+      final three = BigInt('3');
+      expect(js_util.strictEqual(js_util.subtract(three, one), two), isTrue);
+      expect(js_util.strictEqual(js_util.subtract(three, two), two), isFalse);
+    });
+
+    test('multiplication', () {
+      final two = BigInt('2');
+      final four = BigInt('4');
+      expect(js_util.strictEqual(js_util.multiply(two, two), four), isTrue);
+      expect(js_util.strictEqual(js_util.multiply(two, four), four), isFalse);
+    });
+
+    test('division', () {
+      final two = BigInt('2');
+      final four = BigInt('4');
+      expect(js_util.strictEqual(js_util.divide(four, two), two), isTrue);
+      expect(js_util.strictEqual(js_util.divide(four, four), two), isFalse);
+    });
+
+    test('exponentiation', () {
+      final two = BigInt('2');
+      final three = BigInt('3');
+      final nine = BigInt('9');
+      expect(
+          js_util.strictEqual(js_util.exponentiate(three, two), nine), isTrue);
+      expect(js_util.strictEqual(js_util.exponentiate(three, three), nine),
+          isFalse);
+    });
+
+    test('exponentiation2', () {
+      final two = BigInt('2');
+      final three = BigInt('3');
+      final five = BigInt('5');
+      expect(
+          js_util.add(
+              '', js_util.exponentiate(js_util.exponentiate(five, three), two)),
+          '15625');
+      expect(
+          js_util.add(
+              '', js_util.exponentiate(five, js_util.exponentiate(three, two))),
+          '1953125');
+    });
+
+    test('modulo', () {
+      final zero = BigInt('0');
+      final three = BigInt('3');
+      final nine = BigInt('9');
+      expect(js_util.strictEqual(js_util.modulo(nine, three), zero), isTrue);
+      expect(js_util.strictEqual(js_util.modulo(nine, three), nine), isFalse);
+    });
+
+    test('equality', () {
+      final one = BigInt('1');
+      expect(js_util.equal(one, 1), isTrue);
+      expect(js_util.strictEqual(one, 1), isFalse);
+      expect(js_util.notEqual(one, 1), isFalse);
+      expect(js_util.strictNotEqual(one, 1), isTrue);
+    });
+
+    test('comparisons', () {
+      final zero = BigInt('0');
+      final one = BigInt('1');
+      final otherOne = BigInt('1');
+      expect(js_util.greaterThan(one, zero), isTrue);
+      expect(js_util.greaterThan(one, 0), isTrue);
+      expect(js_util.greaterThan(2, one), isTrue);
+      expect(js_util.greaterThanOrEqual(one, otherOne), isTrue);
+      expect(js_util.greaterThanOrEqual(one, 1), isTrue);
+      expect(js_util.greaterThanOrEqual(one, 2), isFalse);
+
+      expect(js_util.lessThan(one, zero), isFalse);
+      expect(js_util.lessThan(zero, one), isTrue);
+      expect(js_util.lessThan(one, 2), isTrue);
+      expect(js_util.lessThan(one, 0), isFalse);
+      expect(js_util.lessThanOrEqual(one, otherOne), isTrue);
+      expect(js_util.lessThanOrEqual(one, 1), isTrue);
+      expect(js_util.lessThanOrEqual(2, one), isFalse);
+    });
+  });
+}
diff --git a/tests/lib_2/js/js_util/bigint_test.dart b/tests/lib_2/js/js_util/bigint_test.dart
new file mode 100644
index 0000000..47462e5
--- /dev/null
+++ b/tests/lib_2/js/js_util/bigint_test.dart
@@ -0,0 +1,110 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// 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.
+
+// Tests invoking JS BigInt functionality through js_util. This interop
+// requires usage of the operator functions exposed through js_util.
+
+@JS()
+library js_util_bigint_test;
+
+import 'package:js/js.dart';
+import 'package:js/js_util.dart' as js_util;
+import 'package:expect/minitest.dart';
+
+@JS('BigInt')
+external Object BigInt(Object value);
+
+main() {
+  group('bigint', () {
+    test('addition', () {
+      final one = BigInt('1');
+      final two = BigInt('2');
+      final three = BigInt('3');
+      expect(js_util.strictEqual(js_util.add(one, two), three), isTrue);
+      expect(js_util.strictEqual(js_util.add(one, one), three), isFalse);
+    });
+
+    test('subtraction', () {
+      final one = BigInt('1');
+      final two = BigInt('2');
+      final three = BigInt('3');
+      expect(js_util.strictEqual(js_util.subtract(three, one), two), isTrue);
+      expect(js_util.strictEqual(js_util.subtract(three, two), two), isFalse);
+    });
+
+    test('multiplication', () {
+      final two = BigInt('2');
+      final four = BigInt('4');
+      expect(js_util.strictEqual(js_util.multiply(two, two), four), isTrue);
+      expect(js_util.strictEqual(js_util.multiply(two, four), four), isFalse);
+    });
+
+    test('division', () {
+      final two = BigInt('2');
+      final four = BigInt('4');
+      expect(js_util.strictEqual(js_util.divide(four, two), two), isTrue);
+      expect(js_util.strictEqual(js_util.divide(four, four), two), isFalse);
+    });
+
+    test('exponentiation', () {
+      final two = BigInt('2');
+      final three = BigInt('3');
+      final nine = BigInt('9');
+      expect(
+          js_util.strictEqual(js_util.exponentiate(three, two), nine), isTrue);
+      expect(js_util.strictEqual(js_util.exponentiate(three, three), nine),
+          isFalse);
+    });
+
+    test('exponentiation2', () {
+      final two = BigInt('2');
+      final three = BigInt('3');
+      final five = BigInt('5');
+      expect(
+          js_util.add(
+              '', js_util.exponentiate(js_util.exponentiate(five, three), two)),
+          '15625');
+      expect(
+          js_util.add(
+              '', js_util.exponentiate(five, js_util.exponentiate(three, two))),
+          '1953125');
+    });
+
+    test('modulo', () {
+      final zero = BigInt('0');
+      final three = BigInt('3');
+      final nine = BigInt('9');
+      expect(js_util.strictEqual(js_util.modulo(nine, three), zero), isTrue);
+      expect(js_util.strictEqual(js_util.modulo(nine, three), nine), isFalse);
+    });
+
+    test('equality', () {
+      final one = BigInt('1');
+      expect(js_util.equal(one, 1), isTrue);
+      expect(js_util.strictEqual(one, 1), isFalse);
+      expect(js_util.notEqual(one, 1), isFalse);
+      expect(js_util.strictNotEqual(one, 1), isTrue);
+    });
+
+    test('comparisons', () {
+      final zero = BigInt('0');
+      final one = BigInt('1');
+      final otherOne = BigInt('1');
+      expect(js_util.greaterThan(one, zero), isTrue);
+      expect(js_util.greaterThan(one, 0), isTrue);
+      expect(js_util.greaterThan(2, one), isTrue);
+      expect(js_util.greaterThanOrEqual(one, otherOne), isTrue);
+      expect(js_util.greaterThanOrEqual(one, 1), isTrue);
+      expect(js_util.greaterThanOrEqual(one, 2), isFalse);
+
+      expect(js_util.lessThan(one, zero), isFalse);
+      expect(js_util.lessThan(zero, one), isTrue);
+      expect(js_util.lessThan(one, 2), isTrue);
+      expect(js_util.lessThan(one, 0), isFalse);
+      expect(js_util.lessThanOrEqual(one, otherOne), isTrue);
+      expect(js_util.lessThanOrEqual(one, 1), isTrue);
+      expect(js_util.lessThanOrEqual(2, one), isFalse);
+    });
+  });
+}
diff --git a/tests/standalone/io/regress_36030.dart b/tests/standalone/io/regress_36030.dart
new file mode 100644
index 0000000..ed1792d
--- /dev/null
+++ b/tests/standalone/io/regress_36030.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// 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.
+
+import "dart:io";
+
+import "package:expect/expect.dart";
+
+void main() async {
+  // Test that renaming a file doesn't change the modified time.
+  final temp = await Directory.systemTemp.createTemp('regress_36030');
+  final file = await File('${temp.path}/before').create();
+  final modifiedTime = await file.lastModified();
+  await Future.delayed(Duration(seconds: 1));
+  final renamed = await file.rename('${temp.path}/after');
+  final renamedTime = await renamed.lastModified();
+  Expect.equals(renamedTime, modifiedTime);
+}
diff --git a/tests/standalone_2/io/regress_36030.dart b/tests/standalone_2/io/regress_36030.dart
new file mode 100644
index 0000000..ed1792d
--- /dev/null
+++ b/tests/standalone_2/io/regress_36030.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// 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.
+
+import "dart:io";
+
+import "package:expect/expect.dart";
+
+void main() async {
+  // Test that renaming a file doesn't change the modified time.
+  final temp = await Directory.systemTemp.createTemp('regress_36030');
+  final file = await File('${temp.path}/before').create();
+  final modifiedTime = await file.lastModified();
+  await Future.delayed(Duration(seconds: 1));
+  final renamed = await file.rename('${temp.path}/after');
+  final renamedTime = await renamed.lastModified();
+  Expect.equals(renamedTime, modifiedTime);
+}
diff --git a/tools/VERSION b/tools/VERSION
index 08f5c3e..3e99c74 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 68
+PRERELEASE 69
 PRERELEASE_PATCH 0
\ No newline at end of file
