Version 2.12.0-49.0.dev

Merge commit 'b11d057572599d001dd766c441e85ad06ce1b943' into 'dev'
diff --git a/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt b/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt
index 39bf88b..7803de7 100644
--- a/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt
+++ b/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt
@@ -1,11 +1,11 @@
 ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|3679|5|94|Const constructors can't throw exceptions.
-ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|7880|5|97|Const constructors can't throw exceptions.
+ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|7881|5|97|Const constructors can't throw exceptions.
 ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|893|5|95|Const constructors can't throw exceptions.
 ERROR|COMPILE_TIME_ERROR|CONST_CONSTRUCTOR_THROWS_EXCEPTION|lib/core/core.dart|926|5|94|Const constructors can't throw exceptions.
 ERROR|COMPILE_TIME_ERROR|INVALID_ASSIGNMENT|lib/_internal/js_dev_runtime/private/interceptors.dart|1358|18|27|A value of type 'double' can't be assigned to a variable of type 'int'.
 ERROR|COMPILE_TIME_ERROR|RETURN_OF_INVALID_TYPE|lib/_internal/js_dev_runtime/private/interceptors.dart|1225|14|38|A value of type 'double' can't be returned from method '%' because it has a return type of 'JSNumber'.
 ERROR|COMPILE_TIME_ERROR|RETURN_OF_INVALID_TYPE|lib/_internal/js_dev_runtime/private/interceptors.dart|1227|14|38|A value of type 'double' can't be returned from method '%' because it has a return type of 'JSNumber'.
 ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|3677|3|5|Only redirecting factory constructors can be declared to be 'const'.
-ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|7878|3|5|Only redirecting factory constructors can be declared to be 'const'.
+ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|7879|3|5|Only redirecting factory constructors can be declared to be 'const'.
 ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|891|3|5|Only redirecting factory constructors can be declared to be 'const'.
 ERROR|SYNTACTIC_ERROR|CONST_FACTORY|lib/core/core.dart|924|3|5|Only redirecting factory constructors can be declared to be 'const'.
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect b/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect
index 7cd9550..9ee095c 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect
@@ -563,28 +563,28 @@
 // pkg/front_end/testcases/general/invalid_operator.dart:6:12: Error: The method 'Operators1.==' has fewer positional arguments than those of overridden method 'Object.=='.
 //   operator ==() => true;
 //            ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
 //   bool operator ==(Object other) native "Object_equals";
 //                 ^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:27:12: Error: The method 'Operators2.==' has more required arguments than those of overridden method 'Object.=='.
 //   operator ==(a, b) => true;
 //            ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
 //   bool operator ==(Object other) native "Object_equals";
 //                 ^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:71:12: Error: The method 'Operators4.==' has fewer positional arguments than those of overridden method 'Object.=='.
 //   operator ==({a}) => true;
 //            ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
 //   bool operator ==(Object other) native "Object_equals";
 //                 ^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:137:12: Error: Declared type variables of 'Operators7.==' doesn't match those on overridden method 'Object.=='.
 //   operator ==<T>(a) => true;
 //            ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
 //   bool operator ==(Object other) native "Object_equals";
 //                 ^
 //
@@ -592,7 +592,7 @@
 // Change to a subtype of 'bool'.
 //   operator ==<T>(a) => true;
 //            ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
 //   bool operator ==(Object other) native "Object_equals";
 //                 ^
 //
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect b/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect
index 6e9b140..1c0ff49 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect
@@ -563,28 +563,28 @@
 // pkg/front_end/testcases/general/invalid_operator.dart:6:12: Error: The method 'Operators1.==' has fewer positional arguments than those of overridden method 'Object.=='.
 //   operator ==() => true;
 //            ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
 //   bool operator ==(Object other) native "Object_equals";
 //                 ^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:27:12: Error: The method 'Operators2.==' has more required arguments than those of overridden method 'Object.=='.
 //   operator ==(a, b) => true;
 //            ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
 //   bool operator ==(Object other) native "Object_equals";
 //                 ^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:71:12: Error: The method 'Operators4.==' has fewer positional arguments than those of overridden method 'Object.=='.
 //   operator ==({a}) => true;
 //            ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
 //   bool operator ==(Object other) native "Object_equals";
 //                 ^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:137:12: Error: Declared type variables of 'Operators7.==' doesn't match those on overridden method 'Object.=='.
 //   operator ==<T>(a) => true;
 //            ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
 //   bool operator ==(Object other) native "Object_equals";
 //                 ^
 //
@@ -592,7 +592,7 @@
 // Change to a subtype of 'bool'.
 //   operator ==<T>(a) => true;
 //            ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
 //   bool operator ==(Object other) native "Object_equals";
 //                 ^
 //
diff --git a/pkg/front_end/testcases/nnbd/issue42603.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue42603.dart.outline.expect
index 930703f..926252c 100644
--- a/pkg/front_end/testcases/nnbd/issue42603.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42603.dart.outline.expect
@@ -9,7 +9,7 @@
 // pkg/front_end/testcases/nnbd/issue42603.dart:18:17: Error: The method 'E.==' has fewer positional arguments than those of overridden method 'Object.=='.
 //   bool operator ==() => true;
 //                 ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
 //   bool operator ==(Object other) native "Object_equals";
 //                 ^
 //
diff --git a/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect
index e677ee5..2d987ac 100644
--- a/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42603.dart.strong.expect
@@ -9,7 +9,7 @@
 // pkg/front_end/testcases/nnbd/issue42603.dart:18:17: Error: The method 'E.==' has fewer positional arguments than those of overridden method 'Object.=='.
 //   bool operator ==() => true;
 //                 ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
 //   bool operator ==(Object other) native "Object_equals";
 //                 ^
 //
diff --git a/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect
index e677ee5..2d987ac 100644
--- a/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42603.dart.weak.expect
@@ -9,7 +9,7 @@
 // pkg/front_end/testcases/nnbd/issue42603.dart:18:17: Error: The method 'E.==' has fewer positional arguments than those of overridden method 'Object.=='.
 //   bool operator ==() => true;
 //                 ^
-// sdk/lib/_internal/vm/lib/object_patch.dart:18:17: Context: This is the overridden method ('==').
+// sdk/lib/_internal/vm/lib/object_patch.dart:21:17: Context: This is the overridden method ('==').
 //   bool operator ==(Object other) native "Object_equals";
 //                 ^
 //
diff --git a/pkg/vm/lib/transformations/pragma.dart b/pkg/vm/lib/transformations/pragma.dart
index ce3055b..d27f3d8 100644
--- a/pkg/vm/lib/transformations/pragma.dart
+++ b/pkg/vm/lib/transformations/pragma.dart
@@ -12,11 +12,14 @@
 const kNonNullableResultType = "vm:non-nullable-result-type";
 const kResultTypeUsesPassedTypeArguments =
     "result-type-uses-passed-type-arguments";
+const kRecognizedPragmaName = "vm:recognized";
 
 abstract class ParsedPragma {}
 
 enum PragmaEntryPointType { Default, GetterOnly, SetterOnly, CallOnly }
 
+enum PragmaRecognizedType { AsmIntrinsic, GraphIntrinsic, Other }
+
 class ParsedEntryPointPragma extends ParsedPragma {
   final PragmaEntryPointType type;
   ParsedEntryPointPragma(this.type);
@@ -38,6 +41,11 @@
   ParsedNonNullableResultType();
 }
 
+class ParsedRecognized extends ParsedPragma {
+  final PragmaRecognizedType type;
+  ParsedRecognized(this.type);
+}
+
 abstract class PragmaAnnotationParser {
   /// May return 'null' if the annotation does not represent a recognized
   /// @pragma.
@@ -118,6 +126,22 @@
             "pragma: $options";
       case kNonNullableResultType:
         return new ParsedNonNullableResultType();
+      case kRecognizedPragmaName:
+        PragmaRecognizedType type;
+        if (options is StringConstant) {
+          if (options.value == "asm-intrinsic") {
+            type = PragmaRecognizedType.AsmIntrinsic;
+          } else if (options.value == "graph-intrinsic") {
+            type = PragmaRecognizedType.GraphIntrinsic;
+          } else if (options.value == "other") {
+            type = PragmaRecognizedType.Other;
+          }
+        }
+        if (type == null) {
+          throw "ERROR: Unsupported option to '$kRecognizedPragmaName' "
+              "pragma: $options";
+        }
+        return new ParsedRecognized(type);
       default:
         return null;
     }
diff --git a/pkg/vm/lib/transformations/type_flow/native_code.dart b/pkg/vm/lib/transformations/type_flow/native_code.dart
index ba8a56d..2a67d18 100644
--- a/pkg/vm/lib/transformations/type_flow/native_code.dart
+++ b/pkg/vm/lib/transformations/type_flow/native_code.dart
@@ -217,6 +217,22 @@
   bool isMemberReferencedFromNativeCode(Member member) =>
       _membersReferencedFromNativeCode.contains(member);
 
+  PragmaRecognizedType recognizedType(Member member) {
+    for (var annotation in member.annotations) {
+      ParsedPragma pragma = _matcher.parsePragma(annotation);
+      if (pragma is ParsedRecognized) {
+        return pragma.type;
+      }
+    }
+    return null;
+  }
+
+  bool isRecognized(Member member, [List<PragmaRecognizedType> expectedTypes]) {
+    PragmaRecognizedType type = recognizedType(member);
+    return type != null &&
+        (expectedTypes == null || expectedTypes.contains(type));
+  }
+
   /// Simulate the execution of a native method by adding its entry points
   /// using [entryPointsListener]. Returns result type of the native method.
   TypeExpr handleNativeProcedure(
diff --git a/pkg/vm/lib/transformations/type_flow/signature_shaking.dart b/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
index e1a947c..096acaf 100644
--- a/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
+++ b/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
@@ -160,6 +160,7 @@
         shaker.typeFlowAnalysis.isTearOffTaken(member) ||
         shaker.typeFlowAnalysis.nativeCodeOracle
             .isMemberReferencedFromNativeCode(member) ||
+        shaker.typeFlowAnalysis.nativeCodeOracle.isRecognized(member) ||
         getExternalName(member) != null) {
       info.eligible = false;
     }
diff --git a/pkg/vm/lib/transformations/type_flow/unboxing_info.dart b/pkg/vm/lib/transformations/type_flow/unboxing_info.dart
index f105c4f..792dc99 100644
--- a/pkg/vm/lib/transformations/type_flow/unboxing_info.dart
+++ b/pkg/vm/lib/transformations/type_flow/unboxing_info.dart
@@ -6,6 +6,7 @@
 import 'package:kernel/core_types.dart';
 import 'package:kernel/external_name.dart' show getExternalName;
 import 'package:vm/metadata/procedure_attributes.dart';
+import 'package:vm/transformations/pragma.dart';
 import 'package:vm/transformations/type_flow/analysis.dart';
 import 'package:vm/transformations/type_flow/calls.dart';
 import 'package:vm/transformations/type_flow/native_code.dart';
@@ -199,18 +200,11 @@
     // have boxed parameters and return values.
     return _isNative(member) ||
         _nativeCodeOracle.isMemberReferencedFromNativeCode(member) ||
-        _isEnclosingClassSubtypeOfNum(member);
+        _nativeCodeOracle.isRecognized(member, const [
+          PragmaRecognizedType.AsmIntrinsic,
+          PragmaRecognizedType.Other
+        ]);
   }
 
   bool _isNative(Member member) => getExternalName(member) != null;
-
-  // TODO(dartbug.com/33549): Calls to these methods could be replaced by
-  // CheckedSmiOpInstr, so in order to allow the parameters and return
-  // value to be unboxed, the slow path for such instructions should be
-  // updated to be consistent with the representations from the target interface.
-  bool _isEnclosingClassSubtypeOfNum(Member member) {
-    return (member.enclosingClass != null &&
-        ConeType(_typeHierarchy.getTFClass(member.enclosingClass))
-            .isSubtypeOf(_typeHierarchy, _coreTypes.numClass));
-  }
 }
diff --git a/runtime/docs/compiler/pragmas_recognized_by_compiler.md b/runtime/docs/compiler/pragmas_recognized_by_compiler.md
index 3fded63..8c910f8 100644
--- a/runtime/docs/compiler/pragmas_recognized_by_compiler.md
+++ b/runtime/docs/compiler/pragmas_recognized_by_compiler.md
@@ -135,3 +135,18 @@
   final int value;
 }
 ```
+
+### Marking recognized methods
+
+```dart
+@pragma("vm:recognized", <kind>)
+```
+
+Marks the method as one of the methods specially recognized by the VM. Here,
+<kind> is one of `"asm-intrinsic"`, `"graph-intrinsic"` or `"other"`,
+corresponding to the category the recognized method belongs to, as defined in
+[`recognized_methods_list.h`](../../vm/compiler/recognized_methods_list.h).
+
+The pragmas must match exactly the set of recognized methods.  This enables
+kernel-level analyses and optimizations to query whether a method is recognized
+by the VM. The correspondence is checked when running in debug mode.
diff --git a/runtime/docs/pragmas.md b/runtime/docs/pragmas.md
index ad3b987..3f7d23b 100644
--- a/runtime/docs/pragmas.md
+++ b/runtime/docs/pragmas.md
@@ -17,6 +17,7 @@
 | Pragma | Meaning |
 | --- | --- |
 | `vm:exact-result-type` | [Declaring an exact result type of a method](compiler/pragmas_recognized_by_compiler.md#providing-an-exact-result-type) |
+| `vm:recognized` | [Marking this as a recognized method](compiler/pragmas_recognized_by_compiler.md#marking-recognized-methods) |
 
 ## Pragmas for internal testing
 
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 48aae11..af86e1e 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -741,6 +741,23 @@
       KernelProgramInfo::Handle(script.kernel_program_info());
   ASSERT(info.IsNull() ||
          info.potential_natives() == GrowableObjectArray::null());
+
+  // Check that all functions that are explicitly marked as recognized with the
+  // vm:recognized annotation are in fact recognized. The check can't be done on
+  // function creation, since the recognized status isn't set until later.
+  if ((function.IsRecognized() !=
+       MethodRecognizer::IsMarkedAsRecognized(function)) &&
+      !function.IsDynamicInvocationForwarder()) {
+    if (function.IsRecognized()) {
+      FATAL1(
+          "Recognized method %s is not marked with the vm:recognized pragma.",
+          function.ToQualifiedCString());
+    } else {
+      FATAL1(
+          "Non-recognized method %s is marked with the vm:recognized pragma.",
+          function.ToQualifiedCString());
+    }
+  }
 #endif
 
   auto& kernel_data = ExternalTypedData::Handle(Z, function.KernelData());
diff --git a/runtime/vm/compiler/method_recognizer.cc b/runtime/vm/compiler/method_recognizer.cc
index 2d4d7d6..ecd99a1 100644
--- a/runtime/vm/compiler/method_recognizer.cc
+++ b/runtime/vm/compiler/method_recognizer.cc
@@ -195,6 +195,27 @@
   return "?";
 }
 
+// Is this method marked with the vm:recognized pragma?
+bool MethodRecognizer::IsMarkedAsRecognized(const Function& function,
+                                            const char* kind) {
+  const Function* functionp =
+      function.IsDynamicInvocationForwarder()
+          ? &Function::Handle(function.ForwardingTarget())
+          : &function;
+  Object& options = Object::Handle();
+  bool is_recognized =
+      Library::FindPragma(Thread::Current(), /*only_core=*/true, *functionp,
+                          Symbols::vm_recognized(), &options);
+  if (!is_recognized) return false;
+  if (kind == nullptr) return true;
+
+  ASSERT(options.IsString());
+  ASSERT(String::Cast(options).Equals("asm-intrinsic") ||
+         String::Cast(options).Equals("graph-intrinsic") ||
+         String::Cast(options).Equals("other"));
+  return String::Cast(options).Equals(kind);
+}
+
 void MethodRecognizer::InitializeState() {
   GrowableArray<Library*> libs(3);
   Libraries(&libs);
diff --git a/runtime/vm/compiler/method_recognizer.h b/runtime/vm/compiler/method_recognizer.h
index 949e031..e9a1067 100644
--- a/runtime/vm/compiler/method_recognizer.h
+++ b/runtime/vm/compiler/method_recognizer.h
@@ -53,6 +53,8 @@
   static intptr_t MethodKindToReceiverCid(Kind kind);
   static const char* KindToCString(Kind kind);
 
+  static bool IsMarkedAsRecognized(const Function& function,
+                                   const char* kind = nullptr);
   static void InitializeState();
 
  private:
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index e198f85..1f50840 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -12,365 +12,365 @@
 // When adding a new function, add a 0 as the fingerprint and run the build in
 // debug mode to get the correct fingerprint from the mismatch error.
 #define OTHER_RECOGNIZED_LIST(V)                                               \
-  V(::, identical, ObjectIdentical, 0x8fd6ea58)                                \
+  V(::, identical, ObjectIdentical, 0x8fd6ea77)                                \
   V(ClassID, getID, ClassIDgetID, 0x0401ffad)                                  \
-  V(Object, Object., ObjectConstructor, 0x256e7170)                            \
-  V(List, ., ListFactory, 0xbec87d33)                                          \
-  V(_List, ., ObjectArrayAllocate, 0x6de199a1)                                 \
-  V(_List, []=, ObjectArraySetIndexed, 0xba15978f)                             \
-  V(_GrowableList, []=, GrowableArraySetIndexed, 0xba15978f)                   \
-  V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0xc28aff37)                    \
-  V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0xc3e7212d)                  \
-  V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0xdaa7b952)                  \
-  V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0xdc2919bc)                \
-  V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0xc57f53af)                  \
-  V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0xc5c49520)                \
-  V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xa2c7e6a4)                  \
-  V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0xd8c29ffe)                \
-  V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xaf15f28a)              \
-  V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xbe4987b7)              \
-  V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0x76c82c28)          \
-  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x29abed4e)              \
-  V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xfc13ad87)                    \
-  V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 0xc9e4212d)                  \
-  V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xd570aa0c)                  \
-  V(_TypedList, _setUint16, ByteArrayBaseSetUint16, 0xe8acb234)                \
-  V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xd8651525)                  \
-  V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xd3f10d97)                \
-  V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xe357b95f)                  \
-  V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xf4d19bea)                \
-  V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0xd6272645)              \
-  V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0xca4af137)              \
-  V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x71767f7f)          \
-  V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xf0483280)              \
-  V(ByteData, ., ByteDataFactory, 0x63fefa4b)                                  \
-  V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0xe51b926b)   \
-  V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0x3c781fb9)          \
-  V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0xe51b926b) \
-  V(_TypedListView, get:_typedData, TypedDataViewTypedData, 0x3c781fb9)        \
-  V(_ByteDataView, ._, TypedData_ByteDataView_factory, 0xe9e9dad9)             \
-  V(_Int8ArrayView, ._, TypedData_Int8ArrayView_factory, 0x016014a7)           \
-  V(_Uint8ArrayView, ._, TypedData_Uint8ArrayView_factory, 0x8c3fc232)         \
+  V(Object, Object., ObjectConstructor, 0x89c467da)                            \
+  V(List, ., ListFactory, 0xbec87d52)                                          \
+  V(_List, ., ObjectArrayAllocate, 0x6de199c0)                                 \
+  V(_List, []=, ObjectArraySetIndexed, 0xba1597ae)                             \
+  V(_GrowableList, []=, GrowableArraySetIndexed, 0xba1597ae)                   \
+  V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0xc28aff56)                    \
+  V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0xc3e7214c)                  \
+  V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0xdaa7b971)                  \
+  V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0xdc2919db)                \
+  V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0xc57f53ce)                  \
+  V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0xc5c4953f)                \
+  V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xa2c7e6c3)                  \
+  V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0xd8c2a01d)                \
+  V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xaf15f2a9)              \
+  V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xbe4987d6)              \
+  V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0x76c82c47)          \
+  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x29abed6d)              \
+  V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xfc13ada6)                    \
+  V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 0xc9e4214c)                  \
+  V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xd570aa2b)                  \
+  V(_TypedList, _setUint16, ByteArrayBaseSetUint16, 0xe8acb253)                \
+  V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xd8651544)                  \
+  V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xd3f10db6)                \
+  V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xe357b97e)                  \
+  V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xf4d19c09)                \
+  V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0xd6272664)              \
+  V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0xca4af156)              \
+  V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x71767f9e)          \
+  V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xf048329f)              \
+  V(ByteData, ., ByteDataFactory, 0x63fefa6a)                                  \
+  V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0xe51b928a)   \
+  V(_ByteDataView, get:_typedData, ByteDataViewTypedData, 0x3c781fd8)          \
+  V(_TypedListView, get:offsetInBytes, TypedDataViewOffsetInBytes, 0xe51b928a) \
+  V(_TypedListView, get:_typedData, TypedDataViewTypedData, 0x3c781fd8)        \
+  V(_ByteDataView, ._, TypedData_ByteDataView_factory, 0xe9e9daf8)             \
+  V(_Int8ArrayView, ._, TypedData_Int8ArrayView_factory, 0x016014c6)           \
+  V(_Uint8ArrayView, ._, TypedData_Uint8ArrayView_factory, 0x8c3fc251)         \
   V(_Uint8ClampedArrayView, ._, TypedData_Uint8ClampedArrayView_factory,       \
-    0x36da9706)                                                                \
-  V(_Int16ArrayView, ._, TypedData_Int16ArrayView_factory, 0x09a366f8)         \
-  V(_Uint16ArrayView, ._, TypedData_Uint16ArrayView_factory, 0x8f74c30f)       \
-  V(_Int32ArrayView, ._, TypedData_Int32ArrayView_factory, 0x8c100d16)         \
-  V(_Uint32ArrayView, ._, TypedData_Uint32ArrayView_factory, 0x4f7f073e)       \
-  V(_Int64ArrayView, ._, TypedData_Int64ArrayView_factory, 0xb85546cc)         \
-  V(_Uint64ArrayView, ._, TypedData_Uint64ArrayView_factory, 0x019c229a)       \
-  V(_Float32ArrayView, ._, TypedData_Float32ArrayView_factory, 0x2290e5a1)     \
-  V(_Float64ArrayView, ._, TypedData_Float64ArrayView_factory, 0xbe62c734)     \
-  V(_Float32x4ArrayView, ._, TypedData_Float32x4ArrayView_factory, 0x5bb7771d) \
-  V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x30b9f2a2)     \
-  V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x96490d01) \
-  V(Int8List, ., TypedData_Int8Array_factory, 0x80ad83e1)                      \
-  V(Uint8List, ., TypedData_Uint8Array_factory, 0x252e6768)                    \
-  V(Uint8ClampedList, ., TypedData_Uint8ClampedArray_factory, 0x1ed931ee)      \
-  V(Int16List, ., TypedData_Int16Array_factory, 0x7ea8630c)                    \
-  V(Uint16List, ., TypedData_Uint16Array_factory, 0x2764f743)                  \
-  V(Int32List, ., TypedData_Int32Array_factory, 0x54a56479)                    \
-  V(Uint32List, ., TypedData_Uint32Array_factory, 0xac4deaa4)                  \
-  V(Int64List, ., TypedData_Int64Array_factory, 0x02d4c748)                    \
-  V(Uint64List, ., TypedData_Uint64Array_factory, 0x08669751)                  \
-  V(Float32List, ., TypedData_Float32Array_factory, 0x8b65b9d7)                \
-  V(Float64List, ., TypedData_Float64Array_factory, 0x09ede82a)                \
-  V(Float32x4List, ., TypedData_Float32x4Array_factory, 0xb2a9e6e1)            \
-  V(Int32x4List, ., TypedData_Int32x4Array_factory, 0xa5292147)                \
-  V(Float64x2List, ., TypedData_Float64x2Array_factory, 0x20eafb43)            \
-  V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x143ed675)                 \
+    0x36da9725)                                                                \
+  V(_Int16ArrayView, ._, TypedData_Int16ArrayView_factory, 0x09a36717)         \
+  V(_Uint16ArrayView, ._, TypedData_Uint16ArrayView_factory, 0x8f74c32e)       \
+  V(_Int32ArrayView, ._, TypedData_Int32ArrayView_factory, 0x8c100d35)         \
+  V(_Uint32ArrayView, ._, TypedData_Uint32ArrayView_factory, 0x4f7f075d)       \
+  V(_Int64ArrayView, ._, TypedData_Int64ArrayView_factory, 0xb85546eb)         \
+  V(_Uint64ArrayView, ._, TypedData_Uint64ArrayView_factory, 0x019c22b9)       \
+  V(_Float32ArrayView, ._, TypedData_Float32ArrayView_factory, 0x2290e5c0)     \
+  V(_Float64ArrayView, ._, TypedData_Float64ArrayView_factory, 0xbe62c753)     \
+  V(_Float32x4ArrayView, ._, TypedData_Float32x4ArrayView_factory, 0x5bb7773c) \
+  V(_Int32x4ArrayView, ._, TypedData_Int32x4ArrayView_factory, 0x30b9f2c1)     \
+  V(_Float64x2ArrayView, ._, TypedData_Float64x2ArrayView_factory, 0x96490d20) \
+  V(Int8List, ., TypedData_Int8Array_factory, 0x80ad8400)                      \
+  V(Uint8List, ., TypedData_Uint8Array_factory, 0x252e6787)                    \
+  V(Uint8ClampedList, ., TypedData_Uint8ClampedArray_factory, 0x1ed9320d)      \
+  V(Int16List, ., TypedData_Int16Array_factory, 0x7ea8632b)                    \
+  V(Uint16List, ., TypedData_Uint16Array_factory, 0x2764f762)                  \
+  V(Int32List, ., TypedData_Int32Array_factory, 0x54a56498)                    \
+  V(Uint32List, ., TypedData_Uint32Array_factory, 0xac4deac3)                  \
+  V(Int64List, ., TypedData_Int64Array_factory, 0x02d4c767)                    \
+  V(Uint64List, ., TypedData_Uint64Array_factory, 0x08669770)                  \
+  V(Float32List, ., TypedData_Float32Array_factory, 0x8b65b9f6)                \
+  V(Float64List, ., TypedData_Float64Array_factory, 0x09ede849)                \
+  V(Float32x4List, ., TypedData_Float32x4Array_factory, 0xb2a9e700)            \
+  V(Int32x4List, ., TypedData_Int32x4Array_factory, 0xa5292166)                \
+  V(Float64x2List, ., TypedData_Float64x2Array_factory, 0x20eafb62)            \
+  V(::, _toClampedUint8, ConvertIntToClampedUint8, 0x143ed694)                 \
   V(::, copyRangeFromUint8ListToOneByteString,                                 \
-    CopyRangeFromUint8ListToOneByteString, 0x89d6a60a)                         \
-  V(_StringBase, _interpolate, StringBaseInterpolate, 0xd5a58efc)              \
-  V(_IntegerImplementation, toDouble, IntegerToDouble, 0x5f8db5f5)             \
-  V(_Double, _add, DoubleAdd, 0x4326962a)                                      \
-  V(_Double, _sub, DoubleSub, 0x81077f31)                                      \
-  V(_Double, _mul, DoubleMul, 0x7858fa6f)                                      \
-  V(_Double, _div, DoubleDiv, 0x813d6a94)                                      \
-  V(::, min, MathMin, 0xe6a2f504)                                              \
-  V(::, max, MathMax, 0x4cfa6f6b)                                              \
-  V(::, _doublePow, MathDoublePow, 0x9772a8c1)                                 \
-  V(::, _intPow, MathIntPow, 0x65762a89)                                       \
-  V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x4ddbf1d0)        \
-  V(Float32x4, Float32x4.zero, Float32x4Zero, 0x730d827d)                      \
-  V(Float32x4, _Float32x4Splat, Float32x4Splat, 0x36ae87e8)                    \
-  V(Float32x4, Float32x4.fromInt32x4Bits, Int32x4ToFloat32x4, 0x8704457d)      \
-  V(Float32x4, Float32x4.fromFloat64x2, Float64x2ToFloat32x4, 0x71ab7a48)      \
-  V(_Float32x4, shuffle, Float32x4Shuffle, 0x6f8cd72e)                         \
-  V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 0xd9fe42cf)                   \
-  V(_Float32x4, get:signMask, Float32x4GetSignMask, 0x00b7b96d)                \
-  V(_Float32x4, equal, Float32x4Equal, 0x77b31279)                             \
-  V(_Float32x4, greaterThan, Float32x4GreaterThan, 0x85a5a282)                 \
-  V(_Float32x4, greaterThanOrEqual, Float32x4GreaterThanOrEqual, 0x81c686ba)   \
-  V(_Float32x4, lessThan, Float32x4LessThan, 0x7d709620)                       \
-  V(_Float32x4, lessThanOrEqual, Float32x4LessThanOrEqual, 0x79cf7843)         \
-  V(_Float32x4, notEqual, Float32x4NotEqual, 0x97a75a46)                       \
-  V(_Float32x4, min, Float32x4Min, 0x0ad96995)                                 \
-  V(_Float32x4, max, Float32x4Max, 0xed08eb66)                                 \
-  V(_Float32x4, scale, Float32x4Scale, 0xfdf348c5)                             \
-  V(_Float32x4, sqrt, Float32x4Sqrt, 0x84853df5)                               \
-  V(_Float32x4, reciprocalSqrt, Float32x4ReciprocalSqrt, 0x7d66357b)           \
-  V(_Float32x4, reciprocal, Float32x4Reciprocal, 0x73e065b5)                   \
-  V(_Float32x4, unary-, Float32x4Negate, 0x86111def)                           \
-  V(_Float32x4, abs, Float32x4Abs, 0x8ad4c18b)                                 \
-  V(_Float32x4, clamp, Float32x4Clamp, 0x374a9da0)                             \
-  V(_Float32x4, _withX, Float32x4WithX, 0xfd53a072)                            \
-  V(_Float32x4, _withY, Float32x4WithY, 0xf5f5b506)                            \
-  V(_Float32x4, _withZ, Float32x4WithZ, 0xf2122f63)                            \
-  V(_Float32x4, _withW, Float32x4WithW, 0xef6f231e)                            \
-  V(Float64x2, _Float64x2FromDoubles, Float64x2FromDoubles, 0x9688f476)        \
-  V(Float64x2, Float64x2.zero, Float64x2Zero, 0x35f71913)                      \
-  V(Float64x2, _Float64x2Splat, Float64x2Splat, 0xf2e6bce9)                    \
-  V(Float64x2, Float64x2.fromFloat32x4, Float32x4ToFloat64x2, 0xa936b421)      \
-  V(_Float64x2, get:x, Float64x2GetX, 0xd83e5791)                              \
-  V(_Float64x2, get:y, Float64x2GetY, 0xc5cfb2b4)                              \
-  V(_Float64x2, unary-, Float64x2Negate, 0x48fab485)                           \
-  V(_Float64x2, abs, Float64x2Abs, 0x4dbe5821)                                 \
-  V(_Float64x2, sqrt, Float64x2Sqrt, 0x476ed48b)                               \
-  V(_Float64x2, get:signMask, Float64x2GetSignMask, 0x00b7b96d)                \
-  V(_Float64x2, scale, Float64x2Scale, 0xc0dcdf5b)                             \
-  V(_Float64x2, _withX, Float64x2WithX, 0xc03d3708)                            \
-  V(_Float64x2, _withY, Float64x2WithY, 0xb8df4b9c)                            \
-  V(_Float64x2, min, Float64x2Min,  0x6b5e1755)                                \
-  V(_Float64x2, max, Float64x2Max,  0x4d8d9926)                                \
-  V(Int32x4, _Int32x4FromInts, Int32x4FromInts, 0xa646ec55)                    \
-  V(Int32x4, _Int32x4FromBools, Int32x4FromBools, 0x5e05beed)                  \
-  V(Int32x4, Int32x4.fromFloat32x4Bits, Float32x4ToInt32x4, 0x7893999c)        \
-  V(_Int32x4, get:flagX, Int32x4GetFlagX, 0x7713cbb9)                          \
-  V(_Int32x4, get:flagY, Int32x4GetFlagY, 0x92840299)                          \
-  V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 0xa02d9dec)                          \
-  V(_Int32x4, get:flagW, Int32x4GetFlagW, 0xa94db02d)                          \
-  V(_Int32x4, get:signMask, Int32x4GetSignMask, 0x00b7b96d)                    \
-  V(_Int32x4, shuffle, Int32x4Shuffle, 0x149a8b16)                             \
-  V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 0xd017e89f)                       \
-  V(_Int32x4, select, Int32x4Select, 0x2847cb63)                               \
-  V(_Int32x4, _withFlagX, Int32x4WithFlagX, 0xa365d5a6)                        \
-  V(_Int32x4, _withFlagY, Int32x4WithFlagY, 0x945670e9)                        \
-  V(_Int32x4, _withFlagZ, Int32x4WithFlagZ, 0x938c5d97)                        \
-  V(_Int32x4, _withFlagW, Int32x4WithFlagW, 0x9ebace9b)                        \
-  V(_HashVMBase, get:_index, LinkedHashMap_getIndex, 0xe161439b)               \
-  V(_HashVMBase, set:_index, LinkedHashMap_setIndex, 0x8c899997)               \
-  V(_HashVMBase, get:_data, LinkedHashMap_getData, 0xb1d039ec)                 \
-  V(_HashVMBase, set:_data, LinkedHashMap_setData, 0x7c713c68)                 \
-  V(_HashVMBase, get:_usedData, LinkedHashMap_getUsedData, 0xcb55342c)         \
-  V(_HashVMBase, set:_usedData, LinkedHashMap_setUsedData, 0x4b6bbba8)         \
-  V(_HashVMBase, get:_hashMask, LinkedHashMap_getHashMask, 0xd35b67db)         \
-  V(_HashVMBase, set:_hashMask, LinkedHashMap_setHashMask, 0x5371ef57)         \
-  V(_HashVMBase, get:_deletedKeys, LinkedHashMap_getDeletedKeys, 0xd55a64df)   \
-  V(_HashVMBase, set:_deletedKeys, LinkedHashMap_setDeletedKeys, 0x5570ec5b)   \
-  V(::, _classRangeCheck, ClassRangeCheck, 0x5ee76871)                         \
-  V(::, _asyncStackTraceHelper, AsyncStackTraceHelper, 0x92cea920)             \
-  V(::, _abi, FfiAbi, 0x00a48dda)                                              \
-  V(::, _asFunctionInternal, FfiAsFunctionInternal, 0x4ea3f661)                \
-  V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0xe7a60ce3)        \
-  V(::, _loadInt8, FfiLoadInt8, 0x7b779ed3)                                    \
-  V(::, _loadInt16, FfiLoadInt16, 0x58b6f02a)                                  \
-  V(::, _loadInt32, FfiLoadInt32, 0x5a94fec0)                                  \
-  V(::, _loadInt64, FfiLoadInt64, 0x4b627ea0)                                  \
-  V(::, _loadUint8, FfiLoadUint8, 0x4dc0dbce)                                  \
-  V(::, _loadUint16, FfiLoadUint16, 0x79491be7)                                \
-  V(::, _loadUint32, FfiLoadUint32, 0x62e14f52)                                \
-  V(::, _loadUint64, FfiLoadUint64, 0x7178bcc9)                                \
-  V(::, _loadIntPtr, FfiLoadIntPtr, 0x584c733b)                                \
-  V(::, _loadFloat, FfiLoadFloat, 0x7f0471da)                                  \
-  V(::, _loadDouble, FfiLoadDouble, 0x7d37b396)                                \
-  V(::, _loadPointer, FfiLoadPointer, 0x3691c04d)                              \
-  V(::, _storeInt8, FfiStoreInt8, 0x118e5bc9)                                  \
-  V(::, _storeInt16, FfiStoreInt16, 0x0a8b9fef)                                \
-  V(::, _storeInt32, FfiStoreInt32, 0x2e23d91a)                                \
-  V(::, _storeInt64, FfiStoreInt64, 0x2411ba37)                                \
-  V(::, _storeUint8, FfiStoreUint8, 0x37ab7fb3)                                \
-  V(::, _storeUint16, FfiStoreUint16, 0x153b579b)                              \
-  V(::, _storeUint32, FfiStoreUint32, 0x18159582)                              \
-  V(::, _storeUint64, FfiStoreUint64, 0x1516def6)                              \
-  V(::, _storeIntPtr, FfiStoreIntPtr, 0x3a401365)                              \
-  V(::, _storeFloat, FfiStoreFloat, 0x23292bbb)                                \
-  V(::, _storeDouble, FfiStoreDouble, 0x013dc7a1)                              \
-  V(::, _storePointer, FfiStorePointer, 0x43c38f62)                            \
-  V(::, _fromAddress, FfiFromAddress, 0xab4ae553)                              \
-  V(Pointer, get:address, FfiGetAddress, 0x012b2b9f)                           \
-  V(::, reachabilityFence, ReachabilityFence, 0xad39d0a6)                      \
-  V(_Utf8Decoder, _scan, Utf8DecoderScan, 0x288d0078)                          \
-  V(_Future, timeout, FutureTimeout, 0xdea67258)                               \
+    CopyRangeFromUint8ListToOneByteString, 0x89d6a629)                         \
+  V(_StringBase, _interpolate, StringBaseInterpolate, 0xd5a58f1b)              \
+  V(_IntegerImplementation, toDouble, IntegerToDouble, 0x5f8db614)             \
+  V(_Double, _add, DoubleAdd, 0x43269649)                                      \
+  V(_Double, _sub, DoubleSub, 0x81077f50)                                      \
+  V(_Double, _mul, DoubleMul, 0x7858fa8e)                                      \
+  V(_Double, _div, DoubleDiv, 0x813d6ab3)                                      \
+  V(::, min, MathMin, 0xe6a2f523)                                              \
+  V(::, max, MathMax, 0x4cfa6f8a)                                              \
+  V(::, _doublePow, MathDoublePow, 0x9772a8e0)                                 \
+  V(::, _intPow, MathIntPow, 0x65762aa8)                                       \
+  V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x4ddbf1ef)        \
+  V(Float32x4, Float32x4.zero, Float32x4Zero, 0x730d829c)                      \
+  V(Float32x4, _Float32x4Splat, Float32x4Splat, 0x36ae8807)                    \
+  V(Float32x4, Float32x4.fromInt32x4Bits, Int32x4ToFloat32x4, 0x8704459c)      \
+  V(Float32x4, Float32x4.fromFloat64x2, Float64x2ToFloat32x4, 0x71ab7a67)      \
+  V(_Float32x4, shuffle, Float32x4Shuffle, 0x6f8cd74d)                         \
+  V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 0xd9fe42ee)                   \
+  V(_Float32x4, get:signMask, Float32x4GetSignMask, 0x00b7b98c)                \
+  V(_Float32x4, equal, Float32x4Equal, 0x77b31298)                             \
+  V(_Float32x4, greaterThan, Float32x4GreaterThan, 0x85a5a2a1)                 \
+  V(_Float32x4, greaterThanOrEqual, Float32x4GreaterThanOrEqual, 0x81c686d9)   \
+  V(_Float32x4, lessThan, Float32x4LessThan, 0x7d70963f)                       \
+  V(_Float32x4, lessThanOrEqual, Float32x4LessThanOrEqual, 0x79cf7862)         \
+  V(_Float32x4, notEqual, Float32x4NotEqual, 0x97a75a65)                       \
+  V(_Float32x4, min, Float32x4Min, 0x0ad969b4)                                 \
+  V(_Float32x4, max, Float32x4Max, 0xed08eb85)                                 \
+  V(_Float32x4, scale, Float32x4Scale, 0xfdf348e4)                             \
+  V(_Float32x4, sqrt, Float32x4Sqrt, 0x84853e14)                               \
+  V(_Float32x4, reciprocalSqrt, Float32x4ReciprocalSqrt, 0x7d66359a)           \
+  V(_Float32x4, reciprocal, Float32x4Reciprocal, 0x73e065d4)                   \
+  V(_Float32x4, unary-, Float32x4Negate, 0x86111e0e)                           \
+  V(_Float32x4, abs, Float32x4Abs, 0x8ad4c1aa)                                 \
+  V(_Float32x4, clamp, Float32x4Clamp, 0x374a9dbf)                             \
+  V(_Float32x4, _withX, Float32x4WithX, 0xfd53a091)                            \
+  V(_Float32x4, _withY, Float32x4WithY, 0xf5f5b525)                            \
+  V(_Float32x4, _withZ, Float32x4WithZ, 0xf2122f82)                            \
+  V(_Float32x4, _withW, Float32x4WithW, 0xef6f233d)                            \
+  V(Float64x2, _Float64x2FromDoubles, Float64x2FromDoubles, 0x9688f495)        \
+  V(Float64x2, Float64x2.zero, Float64x2Zero, 0x35f71932)                      \
+  V(Float64x2, _Float64x2Splat, Float64x2Splat, 0xf2e6bd08)                    \
+  V(Float64x2, Float64x2.fromFloat32x4, Float32x4ToFloat64x2, 0xa936b440)      \
+  V(_Float64x2, get:x, Float64x2GetX, 0xd83e57b0)                              \
+  V(_Float64x2, get:y, Float64x2GetY, 0xc5cfb2d3)                              \
+  V(_Float64x2, unary-, Float64x2Negate, 0x48fab4a4)                           \
+  V(_Float64x2, abs, Float64x2Abs, 0x4dbe5840)                                 \
+  V(_Float64x2, sqrt, Float64x2Sqrt, 0x476ed4aa)                               \
+  V(_Float64x2, get:signMask, Float64x2GetSignMask, 0x00b7b98c)                \
+  V(_Float64x2, scale, Float64x2Scale, 0xc0dcdf7a)                             \
+  V(_Float64x2, _withX, Float64x2WithX, 0xc03d3727)                            \
+  V(_Float64x2, _withY, Float64x2WithY, 0xb8df4bbb)                            \
+  V(_Float64x2, min, Float64x2Min,  0x6b5e1774)                                \
+  V(_Float64x2, max, Float64x2Max,  0x4d8d9945)                                \
+  V(Int32x4, _Int32x4FromInts, Int32x4FromInts, 0xa646ec74)                    \
+  V(Int32x4, _Int32x4FromBools, Int32x4FromBools, 0x5e05bf0c)                  \
+  V(Int32x4, Int32x4.fromFloat32x4Bits, Float32x4ToInt32x4, 0x789399bb)        \
+  V(_Int32x4, get:flagX, Int32x4GetFlagX, 0x7713cbd8)                          \
+  V(_Int32x4, get:flagY, Int32x4GetFlagY, 0x928402b8)                          \
+  V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 0xa02d9e0b)                          \
+  V(_Int32x4, get:flagW, Int32x4GetFlagW, 0xa94db04c)                          \
+  V(_Int32x4, get:signMask, Int32x4GetSignMask, 0x00b7b98c)                    \
+  V(_Int32x4, shuffle, Int32x4Shuffle, 0x149a8b35)                             \
+  V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 0xd017e8be)                       \
+  V(_Int32x4, select, Int32x4Select, 0x2847cb82)                               \
+  V(_Int32x4, _withFlagX, Int32x4WithFlagX, 0xa365d5c5)                        \
+  V(_Int32x4, _withFlagY, Int32x4WithFlagY, 0x94567108)                        \
+  V(_Int32x4, _withFlagZ, Int32x4WithFlagZ, 0x938c5db6)                        \
+  V(_Int32x4, _withFlagW, Int32x4WithFlagW, 0x9ebaceba)                        \
+  V(_HashVMBase, get:_index, LinkedHashMap_getIndex, 0xe16143ba)               \
+  V(_HashVMBase, set:_index, LinkedHashMap_setIndex, 0x8c8999b6)               \
+  V(_HashVMBase, get:_data, LinkedHashMap_getData, 0xb1d03a0b)                 \
+  V(_HashVMBase, set:_data, LinkedHashMap_setData, 0x7c713c87)                 \
+  V(_HashVMBase, get:_usedData, LinkedHashMap_getUsedData, 0xcb55344b)         \
+  V(_HashVMBase, set:_usedData, LinkedHashMap_setUsedData, 0x4b6bbbc7)         \
+  V(_HashVMBase, get:_hashMask, LinkedHashMap_getHashMask, 0xd35b67fa)         \
+  V(_HashVMBase, set:_hashMask, LinkedHashMap_setHashMask, 0x5371ef76)         \
+  V(_HashVMBase, get:_deletedKeys, LinkedHashMap_getDeletedKeys, 0xd55a64fe)   \
+  V(_HashVMBase, set:_deletedKeys, LinkedHashMap_setDeletedKeys, 0x5570ec7a)   \
+  V(::, _classRangeCheck, ClassRangeCheck, 0x5ee76890)                         \
+  V(::, _asyncStackTraceHelper, AsyncStackTraceHelper, 0x92cea93f)             \
+  V(::, _abi, FfiAbi, 0x00a48df9)                                              \
+  V(::, _asFunctionInternal, FfiAsFunctionInternal, 0x4ea3f680)                \
+  V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0xe7a60d02)        \
+  V(::, _loadInt8, FfiLoadInt8, 0x7b779ef2)                                    \
+  V(::, _loadInt16, FfiLoadInt16, 0x58b6f049)                                  \
+  V(::, _loadInt32, FfiLoadInt32, 0x5a94fedf)                                  \
+  V(::, _loadInt64, FfiLoadInt64, 0x4b627ebf)                                  \
+  V(::, _loadUint8, FfiLoadUint8, 0x4dc0dbed)                                  \
+  V(::, _loadUint16, FfiLoadUint16, 0x79491c06)                                \
+  V(::, _loadUint32, FfiLoadUint32, 0x62e14f71)                                \
+  V(::, _loadUint64, FfiLoadUint64, 0x7178bce8)                                \
+  V(::, _loadIntPtr, FfiLoadIntPtr, 0x584c735a)                                \
+  V(::, _loadFloat, FfiLoadFloat, 0x7f0471f9)                                  \
+  V(::, _loadDouble, FfiLoadDouble, 0x7d37b3b5)                                \
+  V(::, _loadPointer, FfiLoadPointer, 0x3691c06c)                              \
+  V(::, _storeInt8, FfiStoreInt8, 0x118e5be8)                                  \
+  V(::, _storeInt16, FfiStoreInt16, 0x0a8ba00e)                                \
+  V(::, _storeInt32, FfiStoreInt32, 0x2e23d939)                                \
+  V(::, _storeInt64, FfiStoreInt64, 0x2411ba56)                                \
+  V(::, _storeUint8, FfiStoreUint8, 0x37ab7fd2)                                \
+  V(::, _storeUint16, FfiStoreUint16, 0x153b57ba)                              \
+  V(::, _storeUint32, FfiStoreUint32, 0x181595a1)                              \
+  V(::, _storeUint64, FfiStoreUint64, 0x1516df15)                              \
+  V(::, _storeIntPtr, FfiStoreIntPtr, 0x3a401384)                              \
+  V(::, _storeFloat, FfiStoreFloat, 0x23292bda)                                \
+  V(::, _storeDouble, FfiStoreDouble, 0x013dc7c0)                              \
+  V(::, _storePointer, FfiStorePointer, 0x43c38f81)                            \
+  V(::, _fromAddress, FfiFromAddress, 0xab4ae572)                              \
+  V(Pointer, get:address, FfiGetAddress, 0x012b2bbe)                           \
+  V(::, reachabilityFence, ReachabilityFence, 0xad39d0c5)                      \
+  V(_Utf8Decoder, _scan, Utf8DecoderScan, 0x288d0097)                          \
+  V(_Future, timeout, FutureTimeout, 0xdea67277)                               \
   V(Future, wait, FutureWait, 0x6c0c3295)                                      \
 
 // List of intrinsics:
 // (class-name, function-name, intrinsification method, fingerprint).
 #define CORE_LIB_INTRINSIC_LIST(V)                                             \
-  V(_Smi, ~, Smi_bitNegate, 0x068652b8)                                        \
-  V(_Smi, get:bitLength, Smi_bitLength, 0xff01b0cc)                            \
-  V(_Smi, _bitAndFromSmi, Smi_bitAndFromSmi, 0xa483e093)                       \
-  V(_BigIntImpl, _lsh, Bigint_lsh, 0x772fb5fd)                                 \
-  V(_BigIntImpl, _rsh, Bigint_rsh, 0xb52a24b8)                                 \
-  V(_BigIntImpl, _absAdd, Bigint_absAdd, 0x90dc61a8)                           \
-  V(_BigIntImpl, _absSub, Bigint_absSub, 0x76887330)                           \
-  V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0xb2741296)                           \
-  V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0xcee0facc)                           \
+  V(_Smi, ~, Smi_bitNegate, 0x068652d7)                                        \
+  V(_Smi, get:bitLength, Smi_bitLength, 0xff01b0eb)                            \
+  V(_Smi, _bitAndFromSmi, Smi_bitAndFromSmi, 0xa483e0b2)                       \
+  V(_BigIntImpl, _lsh, Bigint_lsh, 0x772fb61c)                                 \
+  V(_BigIntImpl, _rsh, Bigint_rsh, 0xb52a24d7)                                 \
+  V(_BigIntImpl, _absAdd, Bigint_absAdd, 0x90dc61c7)                           \
+  V(_BigIntImpl, _absSub, Bigint_absSub, 0x7688734f)                           \
+  V(_BigIntImpl, _mulAdd, Bigint_mulAdd, 0xb27412b5)                           \
+  V(_BigIntImpl, _sqrAdd, Bigint_sqrAdd, 0xcee0faeb)                           \
   V(_BigIntImpl, _estimateQuotientDigit, Bigint_estimateQuotientDigit,         \
-    0x14527ed9)                                                                \
-  V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0x08df2795)        \
-  V(_Double, >, Double_greaterThan, 0xe88b6ffc)                                \
-  V(_Double, >=, Double_greaterEqualThan, 0x1fb70bae)                          \
-  V(_Double, <, Double_lessThan, 0xae875025)                                   \
-  V(_Double, <=, Double_lessEqualThan, 0xc87a5050)                             \
-  V(_Double, ==, Double_equal, 0x5299f1d2)                                     \
-  V(_Double, +, Double_add, 0x783a47d4)                                        \
-  V(_Double, -, Double_sub, 0x493f1465)                                        \
-  V(_Double, *, Double_mul, 0xae0df2e2)                                        \
-  V(_Double, /, Double_div, 0xed535dde)                                        \
-  V(_Double, get:hashCode, Double_hashCode, 0xfa2d7816)                        \
-  V(_Double, get:_identityHashCode, Double_identityHash, 0xcbf20cd4)           \
-  V(_Double, get:isNaN, Double_getIsNaN, 0x88fdcef4)                           \
-  V(_Double, get:isInfinite, Double_getIsInfinite, 0x796f93b3)                 \
-  V(_Double, get:isNegative, Double_getIsNegative, 0x88e61872)                 \
-  V(_Double, _mulFromInteger, Double_mulFromInteger, 0xc5afaa28)               \
-  V(_Double, .fromInteger, DoubleFromInteger, 0x9d1ad7f6)                      \
-  V(_GrowableList, ._withData, GrowableArray_Allocate, 0x00be5928)             \
-  V(_RegExp, _ExecuteMatch, RegExp_ExecuteMatch, 0x6817556e)                   \
-  V(_RegExp, _ExecuteMatchSticky, RegExp_ExecuteMatchSticky, 0x60e30834)       \
-  V(Object, ==, ObjectEquals, 0xbc3cad49)                                      \
-  V(Object, get:runtimeType, ObjectRuntimeType, 0x6461c691)                    \
-  V(Object, _haveSameRuntimeType, ObjectHaveSameRuntimeType, 0xa66bfc58)       \
-  V(_StringBase, get:hashCode, String_getHashCode, 0xfa2d7835)                 \
-  V(_StringBase, get:_identityHashCode, String_identityHash, 0xcbf20cf3)       \
-  V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0xbdfe9c92)                   \
-  V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0xf5c3c873)    \
-  V(_StringBase, [], StringBaseCharAt, 0xfa3bf7be)                             \
-  V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0xfa2d7835)       \
+    0x14527ef8)                                                                \
+  V(_BigIntMontgomeryReduction, _mulMod, Montgomery_mulMod, 0x08df27b4)        \
+  V(_Double, >, Double_greaterThan, 0xe88b701b)                                \
+  V(_Double, >=, Double_greaterEqualThan, 0x1fb70bcd)                          \
+  V(_Double, <, Double_lessThan, 0xae875044)                                   \
+  V(_Double, <=, Double_lessEqualThan, 0xc87a506f)                             \
+  V(_Double, ==, Double_equal, 0x5299f1f1)                                     \
+  V(_Double, +, Double_add, 0x783a47f3)                                        \
+  V(_Double, -, Double_sub, 0x493f1484)                                        \
+  V(_Double, *, Double_mul, 0xae0df301)                                        \
+  V(_Double, /, Double_div, 0xed535dfd)                                        \
+  V(_Double, get:hashCode, Double_hashCode, 0xfa2d7835)                        \
+  V(_Double, get:_identityHashCode, Double_identityHash, 0xcbf20cf3)           \
+  V(_Double, get:isNaN, Double_getIsNaN, 0x88fdcf13)                           \
+  V(_Double, get:isInfinite, Double_getIsInfinite, 0x796f93d2)                 \
+  V(_Double, get:isNegative, Double_getIsNegative, 0x88e61891)                 \
+  V(_Double, _mulFromInteger, Double_mulFromInteger, 0xc5afaa47)               \
+  V(_Double, .fromInteger, DoubleFromInteger, 0x9d1ad815)                      \
+  V(_GrowableList, ._withData, GrowableArray_Allocate, 0x00be5947)             \
+  V(_RegExp, _ExecuteMatch, RegExp_ExecuteMatch, 0x6817558d)                   \
+  V(_RegExp, _ExecuteMatchSticky, RegExp_ExecuteMatchSticky, 0x60e30853)       \
+  V(Object, ==, ObjectEquals, 0xbc3cad68)                                      \
+  V(Object, get:runtimeType, ObjectRuntimeType, 0x6461c6b0)                    \
+  V(Object, _haveSameRuntimeType, ObjectHaveSameRuntimeType, 0xa66bfc77)       \
+  V(_StringBase, get:hashCode, String_getHashCode, 0xfa2d7854)                 \
+  V(_StringBase, get:_identityHashCode, String_identityHash, 0xcbf20d12)       \
+  V(_StringBase, get:isEmpty, StringBaseIsEmpty, 0xbdfe9cb1)                   \
+  V(_StringBase, _substringMatches, StringBaseSubstringMatches, 0xf5c3c892)    \
+  V(_StringBase, [], StringBaseCharAt, 0xfa3bf7dd)                             \
+  V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0xfa2d7854)       \
   V(_OneByteString, _substringUncheckedNative,                                 \
-    OneByteString_substringUnchecked,  0x0d39e4a1)                             \
-  V(_OneByteString, ==, OneByteString_equality, 0x3399ded1)                    \
-  V(_TwoByteString, ==, TwoByteString_equality, 0x3399ded1)                    \
-  V(_Type, get:hashCode, Type_getHashCode, 0xfa2d7835)                         \
-  V(_Type, ==, Type_equality, 0xbc3cad0b)                                      \
-  V(::, _getHash, Object_getHash, 0x87e0c73d)                                  \
-  V(::, _setHash, Object_setHash, 0xcb4f51d2)                                  \
+    OneByteString_substringUnchecked,  0x0d39e4c0)                             \
+  V(_OneByteString, ==, OneByteString_equality, 0x3399def0)                    \
+  V(_TwoByteString, ==, TwoByteString_equality, 0x3399def0)                    \
+  V(_Type, get:hashCode, Type_getHashCode, 0xfa2d7854)                         \
+  V(_Type, ==, Type_equality, 0xbc3cad2a)                                      \
+  V(::, _getHash, Object_getHash, 0x87e0c75c)                                  \
+  V(::, _setHash, Object_setHash, 0xcb4f51f1)                                  \
 
 #define CORE_INTEGER_LIB_INTRINSIC_LIST(V)                                     \
   V(_IntegerImplementation, _addFromInteger, Integer_addFromInteger,           \
-    0xdb88076e)                                                                \
-  V(_IntegerImplementation, +, Integer_add, 0x9b2718c0)                        \
+    0xdb88078d)                                                                \
+  V(_IntegerImplementation, +, Integer_add, 0x9b2718df)                        \
   V(_IntegerImplementation, _subFromInteger, Integer_subFromInteger,           \
-    0xa1d87562)                                                                \
-  V(_IntegerImplementation, -, Integer_sub, 0x6c350eb1)                        \
+    0xa1d87581)                                                                \
+  V(_IntegerImplementation, -, Integer_sub, 0x6c350ed0)                        \
   V(_IntegerImplementation, _mulFromInteger, Integer_mulFromInteger,           \
-    0xa93fad01)                                                                \
-  V(_IntegerImplementation, *, Integer_mul, 0x4197ce8e)                        \
+    0xa93fad20)                                                                \
+  V(_IntegerImplementation, *, Integer_mul, 0x4197cead)                        \
   V(_IntegerImplementation, _moduloFromInteger, Integer_moduloFromInteger,     \
-    0xd040918e)                                                                \
-  V(_IntegerImplementation, ~/, Integer_truncDivide, 0x79adb402)               \
-  V(_IntegerImplementation, unary-, Integer_negate, 0xf07a7709)                \
+    0xd04091ad)                                                                \
+  V(_IntegerImplementation, ~/, Integer_truncDivide, 0x79adb421)               \
+  V(_IntegerImplementation, unary-, Integer_negate, 0xf07a7728)                \
   V(_IntegerImplementation, _bitAndFromInteger, Integer_bitAndFromInteger,     \
-    0xcbb1b792)                                                                \
-  V(_IntegerImplementation, &, Integer_bitAnd, 0x2b385f64)                     \
+    0xcbb1b7b1)                                                                \
+  V(_IntegerImplementation, &, Integer_bitAnd, 0x2b385f83)                     \
   V(_IntegerImplementation, _bitOrFromInteger, Integer_bitOrFromInteger,       \
-    0xbd3f946a)                                                                \
-  V(_IntegerImplementation, |, Integer_bitOr, 0x19dc9b1c)                      \
+    0xbd3f9489)                                                                \
+  V(_IntegerImplementation, |, Integer_bitOr, 0x19dc9b3b)                      \
   V(_IntegerImplementation, _bitXorFromInteger, Integer_bitXorFromInteger,     \
-    0xae7f642e)                                                                \
-  V(_IntegerImplementation, ^, Integer_bitXor, 0x139d6723)                     \
+    0xae7f644d)                                                                \
+  V(_IntegerImplementation, ^, Integer_bitXor, 0x139d6742)                     \
   V(_IntegerImplementation, _greaterThanFromInteger,                           \
-    Integer_greaterThanFromInt, 0x47319226)                                    \
-  V(_IntegerImplementation, >, Integer_greaterThan, 0xc9d374cc)                \
-  V(_IntegerImplementation, ==, Integer_equal, 0xca4e7087)                     \
+    Integer_greaterThanFromInt, 0x47319245)                                    \
+  V(_IntegerImplementation, >, Integer_greaterThan, 0xc9d374eb)                \
+  V(_IntegerImplementation, ==, Integer_equal, 0xca4e70a6)                     \
   V(_IntegerImplementation, _equalToInteger, Integer_equalToInteger,           \
-    0x4d9e5fc5)                                                                \
-  V(_IntegerImplementation, <, Integer_lessThan, 0xae875025)                   \
-  V(_IntegerImplementation, <=, Integer_lessEqualThan, 0xc87a5050)             \
-  V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0x1fb70bae)          \
-  V(_IntegerImplementation, <<, Integer_shl, 0xe8da5296)                       \
-  V(_IntegerImplementation, >>, Integer_sar, 0x4fb2013b)                       \
-  V(_Double, toInt, DoubleToInteger, 0xebc963eb)                               \
+    0x4d9e5fe4)                                                                \
+  V(_IntegerImplementation, <, Integer_lessThan, 0xae875044)                   \
+  V(_IntegerImplementation, <=, Integer_lessEqualThan, 0xc87a506f)             \
+  V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0x1fb70bcd)          \
+  V(_IntegerImplementation, <<, Integer_shl, 0xe8da52b5)                       \
+  V(_IntegerImplementation, >>, Integer_sar, 0x4fb2015a)                       \
+  V(_Double, toInt, DoubleToInteger, 0xebc9640a)                               \
 
 #define MATH_LIB_INTRINSIC_LIST(V)                                             \
-  V(::, sqrt, MathSqrt, 0x98d7cb39)                                            \
-  V(_Random, _nextState, Random_nextState, 0x2c1cf0e2)                         \
+  V(::, sqrt, MathSqrt, 0x98d7cb58)                                            \
+  V(_Random, _nextState, Random_nextState, 0x2c1cf101)                         \
 
 #define GRAPH_MATH_LIB_INTRINSIC_LIST(V)                                       \
-  V(::, sin, MathSin, 0x859e6680)                                              \
-  V(::, cos, MathCos, 0xd2dae38e)                                              \
-  V(::, tan, MathTan, 0xa23c1122)                                              \
-  V(::, asin, MathAsin, 0x1cdb139f)                                            \
-  V(::, acos, MathAcos, 0x830d84ba)                                            \
-  V(::, atan, MathAtan, 0x35d5ecd7)                                            \
-  V(::, atan2, MathAtan2, 0xb4e03ae8)                                          \
+  V(::, sin, MathSin, 0x859e669f)                                              \
+  V(::, cos, MathCos, 0xd2dae3ad)                                              \
+  V(::, tan, MathTan, 0xa23c1141)                                              \
+  V(::, asin, MathAsin, 0x1cdb13be)                                            \
+  V(::, acos, MathAcos, 0x830d84d9)                                            \
+  V(::, atan, MathAtan, 0x35d5ecf6)                                            \
+  V(::, atan2, MathAtan2, 0xb4e03b07)                                          \
 
 #define GRAPH_TYPED_DATA_INTRINSICS_LIST(V)                                    \
-  V(_Int8List, [], Int8ArrayGetIndexed, 0xd61e79bd)                            \
-  V(_Int8List, []=, Int8ArraySetIndexed, 0x6e0b2e72)                           \
-  V(_Uint8List, [], Uint8ArrayGetIndexed, 0xe1a67dfd)                          \
-  V(_Uint8List, []=, Uint8ArraySetIndexed, 0x89499a2e)                         \
-  V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0xe1a67dfd)         \
-  V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0x89499a2e)        \
-  V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0xe1a67dfd)            \
-  V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0x5facb08e)           \
+  V(_Int8List, [], Int8ArrayGetIndexed, 0xd61e79dc)                            \
+  V(_Int8List, []=, Int8ArraySetIndexed, 0x6e0b2e91)                           \
+  V(_Uint8List, [], Uint8ArrayGetIndexed, 0xe1a67e1c)                          \
+  V(_Uint8List, []=, Uint8ArraySetIndexed, 0x89499a4d)                         \
+  V(_ExternalUint8Array, [], ExternalUint8ArrayGetIndexed, 0xe1a67e1c)         \
+  V(_ExternalUint8Array, []=, ExternalUint8ArraySetIndexed, 0x89499a4d)        \
+  V(_Uint8ClampedList, [], Uint8ClampedArrayGetIndexed, 0xe1a67e1c)            \
+  V(_Uint8ClampedList, []=, Uint8ClampedArraySetIndexed, 0x5facb0ad)           \
   V(_ExternalUint8ClampedArray, [], ExternalUint8ClampedArrayGetIndexed,       \
-    0xe1a67dfd)                                                                \
+    0xe1a67e1c)                                                                \
   V(_ExternalUint8ClampedArray, []=, ExternalUint8ClampedArraySetIndexed,      \
-    0x5facb08e)                                                                \
-  V(_Int16List, [], Int16ArrayGetIndexed, 0x1726ae5d)                          \
-  V(_Int16List, []=, Int16ArraySetIndexed, 0xde0f4d87)                         \
-  V(_Uint16List, [], Uint16ArrayGetIndexed, 0x26c2525d)                        \
-  V(_Uint16List, []=, Uint16ArraySetIndexed, 0x69ae5b30)                       \
-  V(_Int32List, [], Int32ArrayGetIndexed, 0x407e58de)                          \
-  V(_Int32List, []=, Int32ArraySetIndexed, 0x61194108)                         \
-  V(_Uint32List, [], Uint32ArrayGetIndexed, 0xf078bf3e)                        \
-  V(_Uint32List, []=, Uint32ArraySetIndexed, 0x70f53c88)                       \
-  V(_Int64List, [], Int64ArrayGetIndexed, 0x7c21b69e)                          \
-  V(_Int64List, []=, Int64ArraySetIndexed, 0xcaa7c6ca)                         \
-  V(_Uint64List, [], Uint64ArrayGetIndexed, 0x0a7aa11e)                        \
-  V(_Uint64List, []=, Uint64ArraySetIndexed, 0xd1374e92)                       \
-  V(_Float64List, [], Float64ArrayGetIndexed, 0x9e4b2403)                      \
-  V(_Float64List, []=, Float64ArraySetIndexed, 0x0a43d538)                     \
-  V(_Float32List, [], Float32ArrayGetIndexed, 0xbdf87ee3)                      \
-  V(_Float32List, []=, Float32ArraySetIndexed, 0x2e3e1a4a)                     \
-  V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0xa90520bc)                  \
-  V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0xb9c7400f)                 \
-  V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0xfbcc0e74)                      \
-  V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x79152aaf)                     \
-  V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0xd90a31e6)                  \
-  V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x4fd191fb)                 \
-  V(_TypedList, get:length, TypedListLength, 0xdc9d90aa)                       \
-  V(_TypedListView, get:length, TypedListViewLength, 0xdc9d90aa)               \
-  V(_ByteDataView, get:length, ByteDataViewLength, 0xdc9d90aa)                 \
-  V(_Float32x4, get:x, Float32x4ShuffleX, 0xd83e5791)                          \
-  V(_Float32x4, get:y, Float32x4ShuffleY, 0xc5cfb2b4)                          \
-  V(_Float32x4, get:z, Float32x4ShuffleZ, 0xfb9b1e4a)                          \
-  V(_Float32x4, get:w, Float32x4ShuffleW, 0xdddb62cc)                          \
-  V(_Float32x4, *, Float32x4Mul, 0x0be25e24)                                   \
-  V(_Float32x4, /, Float32x4Div, 0xe73114a1)                                   \
-  V(_Float32x4, -, Float32x4Sub, 0x03c44de7)                                   \
-  V(_Float32x4, +, Float32x4Add, 0xde8b8376)                                   \
-  V(_Float64x2, *, Float64x2Mul, 0x6c670bc5)                                   \
-  V(_Float64x2, /, Float64x2Div, 0x47b5c261)                                   \
-  V(_Float64x2, -, Float64x2Sub, 0x6448fb88)                                   \
-  V(_Float64x2, +, Float64x2Add, 0x3f103117)                                   \
+    0x5facb0ad)                                                                \
+  V(_Int16List, [], Int16ArrayGetIndexed, 0x1726ae7c)                          \
+  V(_Int16List, []=, Int16ArraySetIndexed, 0xde0f4da6)                         \
+  V(_Uint16List, [], Uint16ArrayGetIndexed, 0x26c2527c)                        \
+  V(_Uint16List, []=, Uint16ArraySetIndexed, 0x69ae5b4f)                       \
+  V(_Int32List, [], Int32ArrayGetIndexed, 0x407e58fd)                          \
+  V(_Int32List, []=, Int32ArraySetIndexed, 0x61194127)                         \
+  V(_Uint32List, [], Uint32ArrayGetIndexed, 0xf078bf5d)                        \
+  V(_Uint32List, []=, Uint32ArraySetIndexed, 0x70f53ca7)                       \
+  V(_Int64List, [], Int64ArrayGetIndexed, 0x7c21b6bd)                          \
+  V(_Int64List, []=, Int64ArraySetIndexed, 0xcaa7c6e9)                         \
+  V(_Uint64List, [], Uint64ArrayGetIndexed, 0x0a7aa13d)                        \
+  V(_Uint64List, []=, Uint64ArraySetIndexed, 0xd1374eb1)                       \
+  V(_Float64List, [], Float64ArrayGetIndexed, 0x9e4b2422)                      \
+  V(_Float64List, []=, Float64ArraySetIndexed, 0x0a43d557)                     \
+  V(_Float32List, [], Float32ArrayGetIndexed, 0xbdf87f02)                      \
+  V(_Float32List, []=, Float32ArraySetIndexed, 0x2e3e1a69)                     \
+  V(_Float32x4List, [], Float32x4ArrayGetIndexed, 0xa90520db)                  \
+  V(_Float32x4List, []=, Float32x4ArraySetIndexed, 0xb9c7402e)                 \
+  V(_Int32x4List, [], Int32x4ArrayGetIndexed, 0xfbcc0e93)                      \
+  V(_Int32x4List, []=, Int32x4ArraySetIndexed, 0x79152ace)                     \
+  V(_Float64x2List, [], Float64x2ArrayGetIndexed, 0xd90a3205)                  \
+  V(_Float64x2List, []=, Float64x2ArraySetIndexed, 0x4fd1921a)                 \
+  V(_TypedList, get:length, TypedListLength, 0xdc9d90c9)                       \
+  V(_TypedListView, get:length, TypedListViewLength, 0xdc9d90c9)               \
+  V(_ByteDataView, get:length, ByteDataViewLength, 0xdc9d90c9)                 \
+  V(_Float32x4, get:x, Float32x4ShuffleX, 0xd83e57b0)                          \
+  V(_Float32x4, get:y, Float32x4ShuffleY, 0xc5cfb2d3)                          \
+  V(_Float32x4, get:z, Float32x4ShuffleZ, 0xfb9b1e69)                          \
+  V(_Float32x4, get:w, Float32x4ShuffleW, 0xdddb62eb)                          \
+  V(_Float32x4, *, Float32x4Mul, 0x0be25e43)                                   \
+  V(_Float32x4, /, Float32x4Div, 0xe73114c0)                                   \
+  V(_Float32x4, -, Float32x4Sub, 0x03c44e06)                                   \
+  V(_Float32x4, +, Float32x4Add, 0xde8b8395)                                   \
+  V(_Float64x2, *, Float64x2Mul, 0x6c670be4)                                   \
+  V(_Float64x2, /, Float64x2Div, 0x47b5c280)                                   \
+  V(_Float64x2, -, Float64x2Sub, 0x6448fba7)                                   \
+  V(_Float64x2, +, Float64x2Add, 0x3f103136)                                   \
 
 #define GRAPH_CORE_INTRINSICS_LIST(V)                                          \
-  V(_List, get:length, ObjectArrayLength, 0xdc9d90aa)                          \
-  V(_List, [], ObjectArrayGetIndexed, 0xd159dece)                              \
-  V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0xf5780f43)            \
-  V(_ImmutableList, get:length, ImmutableArrayLength, 0xdc9d90aa)              \
-  V(_ImmutableList, [], ImmutableArrayGetIndexed, 0xd159dece)                  \
-  V(_GrowableList, get:length, GrowableArrayLength, 0xdc9d90aa)                \
-  V(_GrowableList, get:_capacity, GrowableArrayCapacity, 0x01ec3c31)           \
-  V(_GrowableList, _setData, GrowableArraySetData, 0x8ecf0a40)                 \
-  V(_GrowableList, _setLength, GrowableArraySetLength, 0x63da779b)             \
-  V(_GrowableList, [], GrowableArrayGetIndexed, 0xd159dece)                    \
-  V(_GrowableList, _setIndexed, GrowableArraySetIndexedUnchecked, 0x012e9e24)  \
-  V(_StringBase, get:length, StringBaseLength, 0xdc9d90aa)                     \
-  V(_OneByteString, codeUnitAt, OneByteStringCodeUnitAt, 0xc4602c13)           \
-  V(_TwoByteString, codeUnitAt, TwoByteStringCodeUnitAt, 0xc4602c13)           \
+  V(_List, get:length, ObjectArrayLength, 0xdc9d90c9)                          \
+  V(_List, [], ObjectArrayGetIndexed, 0xd159deed)                              \
+  V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0xf5780f62)            \
+  V(_ImmutableList, get:length, ImmutableArrayLength, 0xdc9d90c9)              \
+  V(_ImmutableList, [], ImmutableArrayGetIndexed, 0xd159deed)                  \
+  V(_GrowableList, get:length, GrowableArrayLength, 0xdc9d90c9)                \
+  V(_GrowableList, get:_capacity, GrowableArrayCapacity, 0x01ec3c50)           \
+  V(_GrowableList, _setData, GrowableArraySetData, 0x8ecf0a5f)                 \
+  V(_GrowableList, _setLength, GrowableArraySetLength, 0x63da77ba)             \
+  V(_GrowableList, [], GrowableArrayGetIndexed, 0xd159deed)                    \
+  V(_GrowableList, _setIndexed, GrowableArraySetIndexedUnchecked, 0x012e9e43)  \
+  V(_StringBase, get:length, StringBaseLength, 0xdc9d90c9)                     \
+  V(_OneByteString, codeUnitAt, OneByteStringCodeUnitAt, 0xc4602c32)           \
+  V(_TwoByteString, codeUnitAt, TwoByteStringCodeUnitAt, 0xc4602c32)           \
   V(_ExternalOneByteString, codeUnitAt, ExternalOneByteStringCodeUnitAt,       \
-    0xc4602c13)                                                                \
+    0xc4602c32)                                                                \
   V(_ExternalTwoByteString, codeUnitAt, ExternalTwoByteStringCodeUnitAt,       \
-    0xc4602c13)                                                                \
-  V(_Double, unary-, DoubleFlipSignBit, 0xdb229448)                            \
-  V(_Double, truncateToDouble, DoubleTruncate, 0x00e6f81b)                     \
-  V(_Double, roundToDouble, DoubleRound, 0xf45c3bc2)                           \
-  V(_Double, floorToDouble, DoubleFloor, 0xf2c73d0a)                           \
-  V(_Double, ceilToDouble, DoubleCeil, 0xfd2e409b)                             \
-  V(_Double, _modulo, DoubleMod, 0x5673c731)
+    0xc4602c32)                                                                \
+  V(_Double, unary-, DoubleFlipSignBit, 0xdb229467)                            \
+  V(_Double, truncateToDouble, DoubleTruncate, 0x00e6f83a)                     \
+  V(_Double, roundToDouble, DoubleRound, 0xf45c3be1)                           \
+  V(_Double, floorToDouble, DoubleFloor, 0xf2c73d29)                           \
+  V(_Double, ceilToDouble, DoubleCeil, 0xfd2e40ba)                             \
+  V(_Double, _modulo, DoubleMod, 0x5673c750)
 
 #define GRAPH_INTRINSICS_LIST(V)                                               \
   GRAPH_CORE_INTRINSICS_LIST(V)                                                \
@@ -378,14 +378,14 @@
   GRAPH_MATH_LIB_INTRINSIC_LIST(V)                                             \
 
 #define DEVELOPER_LIB_INTRINSIC_LIST(V)                                        \
-  V(_UserTag, makeCurrent, UserTag_makeCurrent, 0x1eb344b3)                    \
-  V(::, _getDefaultTag, UserTag_defaultTag, 0x2ef2e42c)                        \
-  V(::, _getCurrentTag, Profiler_getCurrentTag, 0x33c3ec15)                    \
-  V(::, _isDartStreamEnabled, Timeline_isDartStreamEnabled, 0x7dfcaa18)        \
+  V(_UserTag, makeCurrent, UserTag_makeCurrent, 0x1eb344d2)                    \
+  V(::, _getDefaultTag, UserTag_defaultTag, 0x2ef2e44b)                        \
+  V(::, _getCurrentTag, Profiler_getCurrentTag, 0x33c3ec34)                    \
+  V(::, _isDartStreamEnabled, Timeline_isDartStreamEnabled, 0x7dfcaa37)        \
 
 #define ASYNC_LIB_INTRINSIC_LIST(V)                                            \
-  V(::, _clearAsyncThreadStackTrace, ClearAsyncThreadStackTrace, 0x20fecac6)   \
-  V(::, _setAsyncThreadStackTrace, SetAsyncThreadStackTrace, 0x39346953)       \
+  V(::, _clearAsyncThreadStackTrace, ClearAsyncThreadStackTrace, 0x20fecae5)   \
+  V(::, _setAsyncThreadStackTrace, SetAsyncThreadStackTrace, 0x39346972)       \
 
 #define INTERNAL_LIB_INTRINSIC_LIST(V)                                         \
   V(::, allocateOneByteString, AllocateOneByteString, 0xc86bebfa)              \
@@ -411,38 +411,38 @@
 
 // A list of core functions that internally dispatch based on received id.
 #define POLYMORPHIC_TARGET_LIST(V)                                             \
-  V(_StringBase, [], StringBaseCharAt, 0xfa3bf7be)                             \
-  V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0xc28aff37)                    \
-  V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0xc3e7212d)                  \
-  V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0xdaa7b952)                  \
-  V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0xdc2919bc)                \
-  V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0xc57f53af)                  \
-  V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0xc5c49520)                \
-  V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xa2c7e6a4)                  \
-  V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0xd8c29ffe)                \
-  V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xaf15f28a)              \
-  V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xbe4987b7)              \
-  V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0x76c82c28)          \
-  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x29abed4e)              \
-  V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xfc13ad87)                    \
-  V(_TypedList, _setUint8, ByteArrayBaseSetInt8, 0xc9e4212d)                   \
-  V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xd570aa0c)                  \
-  V(_TypedList, _setUint16, ByteArrayBaseSetInt16, 0xe8acb234)                 \
-  V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xd8651525)                  \
-  V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xd3f10d97)                \
-  V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xe357b95f)                  \
-  V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xf4d19bea)                \
-  V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0xd6272645)              \
-  V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0xca4af137)              \
-  V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x71767f7f)          \
-  V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xf0483280)              \
-  V(Object, get:runtimeType, ObjectRuntimeType, 0x6461c691)
+  V(_StringBase, [], StringBaseCharAt, 0xfa3bf7dd)                             \
+  V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0xc28aff56)                    \
+  V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0xc3e7214c)                  \
+  V(_TypedList, _getInt16, ByteArrayBaseGetInt16, 0xdaa7b971)                  \
+  V(_TypedList, _getUint16, ByteArrayBaseGetUint16, 0xdc2919db)                \
+  V(_TypedList, _getInt32, ByteArrayBaseGetInt32, 0xc57f53ce)                  \
+  V(_TypedList, _getUint32, ByteArrayBaseGetUint32, 0xc5c4953f)                \
+  V(_TypedList, _getInt64, ByteArrayBaseGetInt64, 0xa2c7e6c3)                  \
+  V(_TypedList, _getUint64, ByteArrayBaseGetUint64, 0xd8c2a01d)                \
+  V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xaf15f2a9)              \
+  V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xbe4987d6)              \
+  V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0x76c82c47)          \
+  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x29abed6d)              \
+  V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xfc13ada6)                    \
+  V(_TypedList, _setUint8, ByteArrayBaseSetInt8, 0xc9e4214c)                   \
+  V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 0xd570aa2b)                  \
+  V(_TypedList, _setUint16, ByteArrayBaseSetInt16, 0xe8acb253)                 \
+  V(_TypedList, _setInt32, ByteArrayBaseSetInt32, 0xd8651544)                  \
+  V(_TypedList, _setUint32, ByteArrayBaseSetUint32, 0xd3f10db6)                \
+  V(_TypedList, _setInt64, ByteArrayBaseSetInt64, 0xe357b97e)                  \
+  V(_TypedList, _setUint64, ByteArrayBaseSetUint64, 0xf4d19c09)                \
+  V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0xd6272664)              \
+  V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0xca4af156)              \
+  V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x71767f9e)          \
+  V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0xf048329f)              \
+  V(Object, get:runtimeType, ObjectRuntimeType, 0x6461c6b0)
 
 // List of recognized list factories:
 // (factory-name-symbol, class-name-string, constructor-name-string,
 //  result-cid, fingerprint).
 #define RECOGNIZED_LIST_FACTORY_LIST(V)                                        \
-  V(_ListFactory, _List, ., kArrayCid, 0x6de199a1)                             \
+  V(_ListFactory, _List, ., kArrayCid, 0x6de199c0)                             \
   V(_ListFilledFactory, _List, .filled, kArrayCid, 0x871c7eb6)                 \
   V(_ListGenerateFactory, _List, .generate, kArrayCid, 0x045b9063)             \
   V(_GrowableListFactory, _GrowableList, ., kGrowableObjectArrayCid,           \
@@ -452,23 +452,23 @@
   V(_GrowableListGenerateFactory, _GrowableList, .generate,                    \
     kGrowableObjectArrayCid, 0xf6fbbee3)                                       \
   V(_GrowableListWithData, _GrowableList, ._withData, kGrowableObjectArrayCid, \
-    0x00be5928)                                                                \
-  V(_Int8ArrayFactory, Int8List, ., kTypedDataInt8ArrayCid, 0x80ad83e1)        \
-  V(_Uint8ArrayFactory, Uint8List, ., kTypedDataUint8ArrayCid, 0x252e6768)     \
+    0x00be5947)                                                                \
+  V(_Int8ArrayFactory, Int8List, ., kTypedDataInt8ArrayCid, 0x80ad8400)        \
+  V(_Uint8ArrayFactory, Uint8List, ., kTypedDataUint8ArrayCid, 0x252e6787)     \
   V(_Uint8ClampedArrayFactory, Uint8ClampedList, .,                            \
-    kTypedDataUint8ClampedArrayCid, 0x1ed931ee)                                \
-  V(_Int16ArrayFactory, Int16List, ., kTypedDataInt16ArrayCid, 0x7ea8630c)     \
-  V(_Uint16ArrayFactory, Uint16List, ., kTypedDataUint16ArrayCid, 0x2764f743)  \
-  V(_Int32ArrayFactory, Int32List, ., kTypedDataInt32ArrayCid, 0x54a56479)     \
-  V(_Uint32ArrayFactory, Uint32List, ., kTypedDataUint32ArrayCid, 0xac4deaa4)  \
-  V(_Int64ArrayFactory, Int64List, ., kTypedDataInt64ArrayCid, 0x02d4c748)     \
-  V(_Uint64ArrayFactory, Uint64List, ., kTypedDataUint64ArrayCid, 0x08669751)  \
+    kTypedDataUint8ClampedArrayCid, 0x1ed9320d)                                \
+  V(_Int16ArrayFactory, Int16List, ., kTypedDataInt16ArrayCid, 0x7ea8632b)     \
+  V(_Uint16ArrayFactory, Uint16List, ., kTypedDataUint16ArrayCid, 0x2764f762)  \
+  V(_Int32ArrayFactory, Int32List, ., kTypedDataInt32ArrayCid, 0x54a56498)     \
+  V(_Uint32ArrayFactory, Uint32List, ., kTypedDataUint32ArrayCid, 0xac4deac3)  \
+  V(_Int64ArrayFactory, Int64List, ., kTypedDataInt64ArrayCid, 0x02d4c767)     \
+  V(_Uint64ArrayFactory, Uint64List, ., kTypedDataUint64ArrayCid, 0x08669770)  \
   V(_Float64ArrayFactory, Float64List, ., kTypedDataFloat64ArrayCid,           \
-    0x09ede82a)                                                                \
+    0x09ede849)                                                                \
   V(_Float32ArrayFactory, Float32List, ., kTypedDataFloat32ArrayCid,           \
-    0x8b65b9d7)                                                                \
+    0x8b65b9f6)                                                                \
   V(_Float32x4ArrayFactory, Float32x4List, ., kTypedDataFloat32x4ArrayCid,     \
-    0xb2a9e6e1)
+    0xb2a9e700)
 
 // clang-format on
 
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 91ca10f..3395587 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -2306,9 +2306,6 @@
     // Set up the intrinsic state of all functions (core, math and typed data).
     compiler::Intrinsifier::InitializeState();
 
-    // Set up recognized state of all functions (core, math and typed data).
-    MethodRecognizer::InitializeState();
-
     // Adds static const fields (class ids) to the class 'ClassID');
     lib = Library::LookupLibrary(thread, Symbols::DartInternal());
     ASSERT(!lib.IsNull());
@@ -2318,6 +2315,9 @@
     ASSERT(injected);
 
     isolate->object_store()->InitKnownObjects();
+
+    // Set up recognized state of all functions (core, math and typed data).
+    MethodRecognizer::InitializeState();
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
   } else {
     // Object::Init version when we are running in a version of dart that has a
@@ -8135,8 +8135,8 @@
   const intptr_t arg_offset = args_desc.FirstArgIndex();
   // Only check explicit arguments.
   const intptr_t arg_start = arg_offset + NumImplicitParameters();
-  const intptr_t num_positional_args = args_desc.PositionalCount();
-  for (intptr_t arg_index = arg_start; arg_index < num_positional_args;
+  const intptr_t end_positional_args = arg_offset + args_desc.PositionalCount();
+  for (intptr_t arg_index = arg_start; arg_index < end_positional_args;
        ++arg_index) {
     argument ^= args.At(arg_index);
     // Adjust for type arguments when they're present.
@@ -8166,7 +8166,7 @@
        named_index++) {
     argument_name = args_desc.NameAt(named_index);
     ASSERT(argument_name.IsSymbol());
-    argument ^= args.At(args_desc.PositionAt(named_index));
+    argument ^= args.At(arg_offset + args_desc.PositionAt(named_index));
 
     // Try to find the named parameter that matches the provided argument.
     // Even when annotated with @required, named parameters are still stored
@@ -9578,11 +9578,24 @@
   }
 }
 
-bool Function::CheckSourceFingerprint(int32_t fp) const {
+bool Function::CheckSourceFingerprint(int32_t fp, const char* kind) const {
 #if !defined(DEBUG)
   return true;  // Only check on debug.
 #endif
 
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  // Check that the function is marked as recognized via the vm:recognized
+  // pragma. This is so that optimizations that change the signature will know
+  // not to touch it.
+  if (kind != nullptr && !MethodRecognizer::IsMarkedAsRecognized(*this, kind)) {
+    OS::PrintErr(
+        "Recognized method %s should be marked with: "
+        "@pragma(\"vm:recognized\", \"%s\")\n",
+        ToQualifiedCString(), kind);
+    return false;
+  }
+#endif
+
   if (Isolate::Current()->obfuscate() || FLAG_precompiled_mode ||
       (Dart::vm_snapshot_kind() != Snapshot::kNone)) {
     return true;  // The kernel structure has been altered, skip checking.
@@ -13925,22 +13938,31 @@
   Function& func = Function::Handle();
   bool fingerprints_match = true;
 
-#define CHECK_FINGERPRINTS(class_name, function_name, dest, fp)                \
+#define CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp, kind)    \
   func = GetFunction(all_libs, #class_name, #function_name);                   \
   if (func.IsNull()) {                                                         \
     fingerprints_match = false;                                                \
     OS::PrintErr("Function not found %s.%s\n", #class_name, #function_name);   \
   } else {                                                                     \
     fingerprints_match =                                                       \
-        func.CheckSourceFingerprint(fp) && fingerprints_match;                 \
+        func.CheckSourceFingerprint(fp, kind) && fingerprints_match;           \
   }
 
-#define CHECK_FINGERPRINTS2(class_name, function_name, dest, fp)               \
-  CHECK_FINGERPRINTS(class_name, function_name, dest, fp)
+#define CHECK_FINGERPRINTS(class_name, function_name, dest, fp)                \
+  CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp, nullptr)
+#define CHECK_FINGERPRINTS_ASM_INTRINSIC(class_name, function_name, dest, fp)  \
+  CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp, "asm-intrinsic")
+#define CHECK_FINGERPRINTS_GRAPH_INTRINSIC(class_name, function_name, dest,    \
+                                           fp)                                 \
+  CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp,                \
+                           "graph-intrinsic")
+#define CHECK_FINGERPRINTS_OTHER(class_name, function_name, dest, fp)          \
+  CHECK_FINGERPRINTS_INNER(class_name, function_name, dest, fp, "other")
 
   all_libs.Add(&Library::ZoneHandle(Library::CoreLibrary()));
-  CORE_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2);
-  CORE_INTEGER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2);
+  CORE_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
+  CORE_INTEGER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
+  GRAPH_CORE_INTRINSICS_LIST(CHECK_FINGERPRINTS_GRAPH_INTRINSIC);
 
   all_libs.Add(&Library::ZoneHandle(Library::AsyncLibrary()));
   all_libs.Add(&Library::ZoneHandle(Library::MathLibrary()));
@@ -13949,21 +13971,26 @@
   all_libs.Add(&Library::ZoneHandle(Library::ConvertLibrary()));
   all_libs.Add(&Library::ZoneHandle(Library::InternalLibrary()));
   all_libs.Add(&Library::ZoneHandle(Library::FfiLibrary()));
-  ASYNC_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2);
-  INTERNAL_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2);
-  OTHER_RECOGNIZED_LIST(CHECK_FINGERPRINTS2);
+  ASYNC_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
+  INTERNAL_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
+  OTHER_RECOGNIZED_LIST(CHECK_FINGERPRINTS_OTHER);
   POLYMORPHIC_TARGET_LIST(CHECK_FINGERPRINTS);
+  GRAPH_TYPED_DATA_INTRINSICS_LIST(CHECK_FINGERPRINTS_GRAPH_INTRINSIC);
 
   all_libs.Clear();
   all_libs.Add(&Library::ZoneHandle(Library::DeveloperLibrary()));
-  DEVELOPER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2);
+  DEVELOPER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
 
   all_libs.Clear();
   all_libs.Add(&Library::ZoneHandle(Library::MathLibrary()));
-  MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS2);
+  MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
+  GRAPH_MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_GRAPH_INTRINSIC);
 
+#undef CHECK_FINGERPRINTS_INNER
 #undef CHECK_FINGERPRINTS
-#undef CHECK_FINGERPRINTS2
+#undef CHECK_FINGERPRINTS_ASM_INTRINSIC
+#undef CHECK_FINGERPRINTS_GRAPH_INTRINSIC
+#undef CHECK_FINGERPRINTS_OTHER
 
 #define CHECK_FACTORY_FINGERPRINTS(symbol, class_name, factory_name, cid, fp)  \
   func = GetFunction(all_libs, #class_name, #factory_name);                    \
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 988de23..11fed21 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -3584,7 +3584,7 @@
   int32_t SourceFingerprint() const;
 
   // Return false and report an error if the fingerprint does not match.
-  bool CheckSourceFingerprint(int32_t fp) const;
+  bool CheckSourceFingerprint(int32_t fp, const char* kind = nullptr) const;
 
   // Works with map [deopt-id] -> ICData.
   void SaveICDataMap(
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index bcb4057..b654d69 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -464,7 +464,6 @@
   V(controller, "controller")                                                  \
   V(current_character, ":current_character")                                   \
   V(current_position, ":current_position")                                     \
-  V(getID, "getID")                                                            \
   V(hashCode, "get:hashCode")                                                  \
   V(identityHashCode, "identityHashCode")                                      \
   V(index_temp, ":index_temp")                                                 \
@@ -486,7 +485,6 @@
   V(start_index_param, ":start_index_param")                                   \
   V(string_param, ":string_param")                                             \
   V(string_param_length, ":string_param_length")                               \
-  V(timeout, "timeout")                                                        \
   V(toString, "toString")                                                      \
   V(vm_prefer_inline, "vm:prefer-inline")                                      \
   V(vm_entry_point, "vm:entry-point")                                          \
@@ -494,6 +492,7 @@
   V(vm_inferred_type_metadata, "vm.inferred-type.metadata")                    \
   V(vm_never_inline, "vm:never-inline")                                        \
   V(vm_non_nullable_result_type, "vm:non-nullable-result-type")                \
+  V(vm_recognized, "vm:recognized")                                            \
   V(vm_trace_entrypoints, "vm:testing.unsafe.trace-entrypoints-fn")            \
   V(vm_procedure_attributes_metadata, "vm.procedure-attributes.metadata")
 
diff --git a/sdk/lib/_internal/vm/lib/array.dart b/sdk/lib/_internal/vm/lib/array.dart
index d615f7b..1e2f9c0 100644
--- a/sdk/lib/_internal/vm/lib/array.dart
+++ b/sdk/lib/_internal/vm/lib/array.dart
@@ -6,6 +6,7 @@
 
 @pragma("vm:entry-point")
 class _List<E> extends FixedLengthListBase<E> {
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type",
       <dynamic>[_List, "result-type-uses-passed-type-arguments"])
   @pragma("vm:prefer-inline")
@@ -34,14 +35,18 @@
     return result;
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   E operator [](int index) native "List_getIndexed";
 
+  @pragma("vm:recognized", "other")
   void operator []=(int index, E value) {
     _setIndexed(index, value);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void _setIndexed(int index, E value) native "List_setIndexed";
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:prefer-inline")
   int get length native "List_getLength";
@@ -188,8 +193,10 @@
   factory _ImmutableList._from(List from, int offset, int length)
       native "ImmutableList_from";
 
+  @pragma("vm:recognized", "graph-intrinsic")
   E operator [](int index) native "List_getIndexed";
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:prefer-inline")
   int get length native "List_getLength";
diff --git a/sdk/lib/_internal/vm/lib/array_patch.dart b/sdk/lib/_internal/vm/lib/array_patch.dart
index ef181be..51fe288 100644
--- a/sdk/lib/_internal/vm/lib/array_patch.dart
+++ b/sdk/lib/_internal/vm/lib/array_patch.dart
@@ -12,6 +12,7 @@
   }
 
   @patch
+  @pragma("vm:recognized", "other")
   factory List([int? length]) native "List_new";
 
   @patch
diff --git a/sdk/lib/_internal/vm/lib/async_patch.dart b/sdk/lib/_internal/vm/lib/async_patch.dart
index 659f31f..8659e79 100644
--- a/sdk/lib/_internal/vm/lib/async_patch.dart
+++ b/sdk/lib/_internal/vm/lib/async_patch.dart
@@ -270,16 +270,19 @@
 //
 // This method is recognized. It performs a runtime call if
 // FLAG_causal_async_stacks is enabled or returns `null` otherwise.
+@pragma("vm:recognized", "other")
 @pragma("vm:prefer-inline")
 Object _asyncStackTraceHelper(Function async_op)
     native "StackTrace_asyncStackTraceHelper";
 
 // This method is asm intrinsified.
+@pragma("vm:recognized", "asm-intrinsic")
 @pragma("vm:entry-point", "call")
 void _clearAsyncThreadStackTrace()
     native "StackTrace_clearAsyncThreadStackTrace";
 
 // This method is asm intrinsified.
+@pragma("vm:recognized", "asm-intrinsic")
 @pragma("vm:entry-point", "call")
 void _setAsyncThreadStackTrace(StackTrace stackTrace)
     native "StackTrace_setAsyncThreadStackTrace";
diff --git a/sdk/lib/_internal/vm/lib/bigint_patch.dart b/sdk/lib/_internal/vm/lib/bigint_patch.dart
index 5cc0bef..dd627df 100644
--- a/sdk/lib/_internal/vm/lib/bigint_patch.dart
+++ b/sdk/lib/_internal/vm/lib/bigint_patch.dart
@@ -559,6 +559,7 @@
   /// Does *not* clear digits below ds.
   ///
   /// Note: This function may be intrinsified.
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:never-inline")
   static void _lsh(
       Uint32List xDigits, int xUsed, int n, Uint32List resultDigits) {
@@ -635,6 +636,7 @@
   /// resultDigits[0..resultUsed-1] = xDigits[0..xUsed-1] >> n.
   ///
   /// Note: This function may be intrinsified.
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:never-inline")
   static void _rsh(
       Uint32List xDigits, int xUsed, int n, Uint32List resultDigits) {
@@ -763,6 +765,7 @@
   /// used >= otherUsed > 0.
   ///
   /// Note: This function may be intrinsified.
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:never-inline")
   static void _absAdd(Uint32List digits, int used, Uint32List otherDigits,
       int otherUsed, Uint32List resultDigits) {
@@ -785,6 +788,7 @@
   /// used >= otherUsed > 0.
   ///
   /// Note: This function may be intrinsified.
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:never-inline")
   static void _absSub(Uint32List digits, int used, Uint32List otherDigits,
       int otherUsed, Uint32List resultDigits) {
@@ -1114,6 +1118,7 @@
   ///
   /// Note: This function may be intrinsified. Intrinsics on 64-bit platforms
   /// process digit pairs at even indices and returns 2.
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:never-inline")
   static int _mulAdd(
@@ -1166,6 +1171,7 @@
   ///
   /// Note: This function may be intrinsified. Intrinsics on 64-bit platforms
   /// process digit pairs at even indices and returns 2.
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:never-inline")
   static int _sqrAdd(
@@ -1288,6 +1294,7 @@
   /// Estimate `args[_quotientDigit.._quotientHighDigit] = digits[i-3..i] ~/
   /// args[_divisorLowTopDigit.._divisorTopDigit]`.
   /// Returns 2.
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:never-inline")
   static int _estimateQuotientDigit(Uint32List args, Uint32List digits, int i) {
@@ -2642,6 +2649,7 @@
   //   args[_muDigit.._muHighDigit] =
   //     args[_rhoDigit.._rhoHighDigit] * digits[i..i+1] mod _digitBase^2.
   //   Returns 2.
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:never-inline")
   static int _mulMod(Uint32List args, Uint32List digits, int i) {
diff --git a/sdk/lib/_internal/vm/lib/class_id_fasta.dart b/sdk/lib/_internal/vm/lib/class_id_fasta.dart
index c81bd60..006314b 100644
--- a/sdk/lib/_internal/vm/lib/class_id_fasta.dart
+++ b/sdk/lib/_internal/vm/lib/class_id_fasta.dart
@@ -6,7 +6,7 @@
 
 @pragma("vm:entry-point")
 class ClassID {
-  @pragma("vm:entry-point", "call")
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   static int getID(Object value) native "ClassID_getID";
 
diff --git a/sdk/lib/_internal/vm/lib/compact_hash.dart b/sdk/lib/_internal/vm/lib/compact_hash.dart
index 67ba9b2..db903e4 100644
--- a/sdk/lib/_internal/vm/lib/compact_hash.dart
+++ b/sdk/lib/_internal/vm/lib/compact_hash.dart
@@ -46,33 +46,43 @@
 
 // Base class for VM-internal classes; keep in sync with _HashFieldBase.
 abstract class _HashVMBase {
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:typed_data#_Uint32List")
   @pragma("vm:prefer-inline")
   Uint32List get _index native "LinkedHashMap_getIndex";
+  @pragma("vm:recognized", "other")
   @pragma("vm:prefer-inline")
   void set _index(Uint32List value) native "LinkedHashMap_setIndex";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:prefer-inline")
   int get _hashMask native "LinkedHashMap_getHashMask";
+  @pragma("vm:recognized", "other")
   @pragma("vm:prefer-inline")
   void set _hashMask(int value) native "LinkedHashMap_setHashMask";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_List")
   @pragma("vm:prefer-inline")
   List get _data native "LinkedHashMap_getData";
+  @pragma("vm:recognized", "other")
   @pragma("vm:prefer-inline")
   void set _data(List value) native "LinkedHashMap_setData";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:prefer-inline")
   int get _usedData native "LinkedHashMap_getUsedData";
+  @pragma("vm:recognized", "other")
   @pragma("vm:prefer-inline")
   void set _usedData(int value) native "LinkedHashMap_setUsedData";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:prefer-inline")
   int get _deletedKeys native "LinkedHashMap_getDeletedKeys";
+  @pragma("vm:recognized", "other")
   @pragma("vm:prefer-inline")
   void set _deletedKeys(int value) native "LinkedHashMap_setDeletedKeys";
 }
diff --git a/sdk/lib/_internal/vm/lib/convert_patch.dart b/sdk/lib/_internal/vm/lib/convert_patch.dart
index 6f82337..851c554 100644
--- a/sdk/lib/_internal/vm/lib/convert_patch.dart
+++ b/sdk/lib/_internal/vm/lib/convert_patch.dart
@@ -1700,7 +1700,7 @@
     return size;
   }
 
-  // This method is recognized by the VM and compiled into specialized code.
+  @pragma("vm:recognized", "other")
   @pragma("vm:prefer-inline")
   int _scan(Uint8List bytes, int start, int end, String scanTable) {
     int size = 0;
diff --git a/sdk/lib/_internal/vm/lib/double.dart b/sdk/lib/_internal/vm/lib/double.dart
index 83b3262..7500050 100644
--- a/sdk/lib/_internal/vm/lib/double.dart
+++ b/sdk/lib/_internal/vm/lib/double.dart
@@ -6,36 +6,45 @@
 
 @pragma("vm:entry-point")
 class _Double implements double {
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", _Double)
   factory _Double.fromInteger(int value) native "Double_doubleFromInteger";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   int get hashCode native "Double_hashCode";
+  @pragma("vm:recognized", "asm-intrinsic")
   int get _identityHashCode native "Double_hashCode";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", _Double)
   @pragma("vm:never-inline")
   double operator +(num other) {
     return _add(other.toDouble());
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Double)
   double _add(double other) native "Double_add";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", _Double)
   @pragma("vm:never-inline")
   double operator -(num other) {
     return _sub(other.toDouble());
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Double)
   double _sub(double other) native "Double_sub";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", _Double)
   @pragma("vm:never-inline")
   double operator *(num other) {
     return _mul(other.toDouble());
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Double)
   double _mul(double other) native "Double_mul";
 
@@ -46,12 +55,14 @@
   @pragma("vm:non-nullable-result-type")
   int _trunc_div(double other) native "Double_trunc_div";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", _Double)
   @pragma("vm:never-inline")
   double operator /(num other) {
     return _div(other.toDouble());
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Double)
   double _div(double other) native "Double_div";
 
@@ -59,6 +70,7 @@
     return _modulo(other.toDouble());
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", _Double)
   double _modulo(double other) native "Double_modulo";
 
@@ -68,9 +80,11 @@
 
   double _remainder(double other) native "Double_remainder";
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", _Double)
   double operator -() native "Double_flipSignBit";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   @pragma("vm:never-inline")
   bool operator ==(Object other) {
@@ -82,12 +96,14 @@
   @pragma("vm:exact-result-type", bool)
   bool _equalToInteger(int other) native "Double_equalToInteger";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   @pragma("vm:never-inline")
   bool operator <(num other) {
     return other > this;
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   @pragma("vm:never-inline")
   bool operator >(num other) {
@@ -97,12 +113,14 @@
   @pragma("vm:exact-result-type", bool)
   bool _greaterThan(double other) native "Double_greaterThan";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   @pragma("vm:never-inline")
   bool operator >=(num other) {
     return (this == other) || (this > other);
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   @pragma("vm:never-inline")
   bool operator <=(num other) {
@@ -117,6 +135,7 @@
     return new _Double.fromInteger(other)._sub(this);
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Double")
   double _mulFromInteger(int other) {
     return new _Double.fromInteger(other)._mul(this);
@@ -137,10 +156,13 @@
   bool _greaterThanFromInteger(int other)
       native "Double_greaterThanFromInteger";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   bool get isNegative native "Double_getIsNegative";
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   bool get isInfinite native "Double_getIsInfinite";
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   bool get isNaN native "Double_getIsNaN";
   bool get isFinite => !isInfinite && !isNaN; // Can be optimized.
@@ -162,12 +184,16 @@
   int ceil() => ceilToDouble().toInt();
   int truncate() => truncateToDouble().toInt();
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", _Double)
   double roundToDouble() native "Double_round";
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", _Double)
   double floorToDouble() native "Double_floor";
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", _Double)
   double ceilToDouble() native "Double_ceil";
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", _Double)
   double truncateToDouble() native "Double_truncate";
 
@@ -188,6 +214,7 @@
     return this;
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   int toInt() native "Double_toInt";
 
diff --git a/sdk/lib/_internal/vm/lib/ffi_patch.dart b/sdk/lib/_internal/vm/lib/ffi_patch.dart
index 02bc8c7..79fc3a3 100644
--- a/sdk/lib/_internal/vm/lib/ffi_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_patch.dart
@@ -39,12 +39,13 @@
 
 int _sizeOf<T extends NativeType>() native "Ffi_sizeOf";
 
-// Implemented in the method recognizer.
+@pragma("vm:recognized", "other")
 Pointer<T> _fromAddress<T extends NativeType>(int ptr) native "Ffi_fromAddress";
 
 // The real implementation of this function (for interface calls) lives in
 // BuildFfiAsFunctionCall in the Kernel frontend. No calls can actually reach
 // this function.
+@pragma("vm:recognized", "other")
 DS _asFunctionInternal<DS extends Function, NS extends Function>(
     Pointer<NativeFunction<NS>> ptr) native "Ffi_asFunctionInternal";
 
@@ -67,6 +68,7 @@
 //
 // Function objects returned by this native method are not Dart instances,
 // so we need to use top type as a return type to avoid type check.
+@pragma("vm:recognized", "other")
 dynamic _nativeCallbackFunction<NS extends Function>(Function target,
     Object? exceptionalReturn) native "Ffi_nativeCallbackFunction";
 
@@ -92,8 +94,8 @@
         "Pointer.fromFunction cannot be called dynamically.");
   }
 
-  // Implemented in the method recognizer.
   @patch
+  @pragma("vm:recognized", "other")
   int get address native "Ffi_address";
 
   // For statically known types, this is rewired.
@@ -112,6 +114,7 @@
 
 /// Returns an integer encoding the ABI used for size and alignment
 /// calculations. See pkg/vm/lib/transformations/ffi.dart.
+@pragma("vm:recognized", "other")
 @pragma('vm:prefer-inline')
 int _abi()
     native "Recognized method: IR graph is built in the flow graph builder.";
@@ -122,67 +125,91 @@
 // allocating a Pointer with in elementAt/offsetBy. Allocating these pointers
 // and GCing new spaces takes a lot of the benchmark time. The next speedup is
 // getting rid of these allocations by inlining these functions.
+@pragma("vm:recognized", "other")
 int _loadInt8(Pointer pointer, int offsetInBytes) native "Ffi_loadInt8";
 
+@pragma("vm:recognized", "other")
 int _loadInt16(Pointer pointer, int offsetInBytes) native "Ffi_loadInt16";
 
+@pragma("vm:recognized", "other")
 int _loadInt32(Pointer pointer, int offsetInBytes) native "Ffi_loadInt32";
 
+@pragma("vm:recognized", "other")
 int _loadInt64(Pointer pointer, int offsetInBytes) native "Ffi_loadInt64";
 
+@pragma("vm:recognized", "other")
 int _loadUint8(Pointer pointer, int offsetInBytes) native "Ffi_loadUint8";
 
+@pragma("vm:recognized", "other")
 int _loadUint16(Pointer pointer, int offsetInBytes) native "Ffi_loadUint16";
 
+@pragma("vm:recognized", "other")
 int _loadUint32(Pointer pointer, int offsetInBytes) native "Ffi_loadUint32";
 
+@pragma("vm:recognized", "other")
 int _loadUint64(Pointer pointer, int offsetInBytes) native "Ffi_loadUint64";
 
+@pragma("vm:recognized", "other")
 int _loadIntPtr(Pointer pointer, int offsetInBytes) native "Ffi_loadIntPtr";
 
+@pragma("vm:recognized", "other")
 double _loadFloat(Pointer pointer, int offsetInBytes) native "Ffi_loadFloat";
 
+@pragma("vm:recognized", "other")
 double _loadDouble(Pointer pointer, int offsetInBytes) native "Ffi_loadDouble";
 
+@pragma("vm:recognized", "other")
 Pointer<S> _loadPointer<S extends NativeType>(
     Pointer pointer, int offsetInBytes) native "Ffi_loadPointer";
 
 S _loadStruct<S extends Struct>(Pointer<S> pointer, int index)
     native "Ffi_loadStruct";
 
+@pragma("vm:recognized", "other")
 void _storeInt8(Pointer pointer, int offsetInBytes, int value)
     native "Ffi_storeInt8";
 
+@pragma("vm:recognized", "other")
 void _storeInt16(Pointer pointer, int offsetInBytes, int value)
     native "Ffi_storeInt16";
 
+@pragma("vm:recognized", "other")
 void _storeInt32(Pointer pointer, int offsetInBytes, int value)
     native "Ffi_storeInt32";
 
+@pragma("vm:recognized", "other")
 void _storeInt64(Pointer pointer, int offsetInBytes, int value)
     native "Ffi_storeInt64";
 
+@pragma("vm:recognized", "other")
 void _storeUint8(Pointer pointer, int offsetInBytes, int value)
     native "Ffi_storeUint8";
 
+@pragma("vm:recognized", "other")
 void _storeUint16(Pointer pointer, int offsetInBytes, int value)
     native "Ffi_storeUint16";
 
+@pragma("vm:recognized", "other")
 void _storeUint32(Pointer pointer, int offsetInBytes, int value)
     native "Ffi_storeUint32";
 
+@pragma("vm:recognized", "other")
 void _storeUint64(Pointer pointer, int offsetInBytes, int value)
     native "Ffi_storeUint64";
 
+@pragma("vm:recognized", "other")
 void _storeIntPtr(Pointer pointer, int offsetInBytes, int value)
     native "Ffi_storeIntPtr";
 
+@pragma("vm:recognized", "other")
 void _storeFloat(Pointer pointer, int offsetInBytes, double value)
     native "Ffi_storeFloat";
 
+@pragma("vm:recognized", "other")
 void _storeDouble(Pointer pointer, int offsetInBytes, double value)
     native "Ffi_storeDouble";
 
+@pragma("vm:recognized", "other")
 void _storePointer<S extends NativeType>(Pointer pointer, int offsetInBytes,
     Pointer<S> value) native "Ffi_storePointer";
 
diff --git a/sdk/lib/_internal/vm/lib/growable_array.dart b/sdk/lib/_internal/vm/lib/growable_array.dart
index 0e63557..62b8196 100644
--- a/sdk/lib/_internal/vm/lib/growable_array.dart
+++ b/sdk/lib/_internal/vm/lib/growable_array.dart
@@ -130,14 +130,17 @@
     return result;
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type",
       <dynamic>[_GrowableList, "result-type-uses-passed-type-arguments"])
   factory _GrowableList._withData(_List data) native "GrowableList_allocate";
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:prefer-inline")
   int get _capacity native "GrowableList_getCapacity";
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:prefer-inline")
   int get length native "GrowableList_getLength";
@@ -170,16 +173,21 @@
     _setLength(new_length);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void _setLength(int new_length) native "GrowableList_setLength";
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void _setData(_List array) native "GrowableList_setData";
 
+  @pragma("vm:recognized", "graph-intrinsic")
   T operator [](int index) native "GrowableList_getIndexed";
 
+  @pragma("vm:recognized", "other")
   void operator []=(int index, T value) {
     _setIndexed(index, value);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void _setIndexed(int index, T? value) native "GrowableList_setIndexed";
 
   @pragma("vm:entry-point", "call")
diff --git a/sdk/lib/_internal/vm/lib/identical_patch.dart b/sdk/lib/_internal/vm/lib/identical_patch.dart
index 4b57430..9a9ff56 100644
--- a/sdk/lib/_internal/vm/lib/identical_patch.dart
+++ b/sdk/lib/_internal/vm/lib/identical_patch.dart
@@ -5,6 +5,7 @@
 // part of "core_patch.dart";
 
 @patch
+@pragma("vm:recognized", "other")
 @pragma("vm:exact-result-type", bool)
 bool identical(Object? a, Object? b) native "Identical_comparison";
 
diff --git a/sdk/lib/_internal/vm/lib/integers.dart b/sdk/lib/_internal/vm/lib/integers.dart
index 9fd3a76..3ce3af5 100644
--- a/sdk/lib/_internal/vm/lib/integers.dart
+++ b/sdk/lib/_internal/vm/lib/integers.dart
@@ -5,16 +5,20 @@
 // part of "core_patch.dart";
 
 abstract class _IntegerImplementation implements int {
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   @pragma("vm:never-inline")
   num operator +(num other) => other._addFromInteger(this);
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   @pragma("vm:never-inline")
   num operator -(num other) => other._subFromInteger(this);
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   @pragma("vm:never-inline")
   num operator *(num other) => other._mulFromInteger(this);
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   @pragma("vm:never-inline")
   int operator ~/(num other) {
@@ -36,6 +40,7 @@
     return other._moduloFromInteger(this);
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   @pragma("vm:never-inline")
   int operator -() {
@@ -44,12 +49,15 @@
     return unsafeCast<int>(0 - this);
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   @pragma("vm:never-inline")
   int operator &(int other) => other._bitAndFromInteger(this);
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   @pragma("vm:never-inline")
   int operator |(int other) => other._bitOrFromInteger(this);
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   @pragma("vm:never-inline")
   int operator ^(int other) => other._bitXorFromInteger(this);
@@ -60,24 +68,31 @@
 
   @pragma("vm:non-nullable-result-type")
   int _bitAndFromSmi(_Smi other) native "Integer_bitAndFromInteger";
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   int _bitAndFromInteger(int other) native "Integer_bitAndFromInteger";
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   int _bitOrFromInteger(int other) native "Integer_bitOrFromInteger";
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   int _bitXorFromInteger(int other) native "Integer_bitXorFromInteger";
   @pragma("vm:non-nullable-result-type")
   int _shrFromInteger(int other) native "Integer_shrFromInteger";
   @pragma("vm:non-nullable-result-type")
   int _shlFromInteger(int other) native "Integer_shlFromInteger";
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   int _addFromInteger(int other) native "Integer_addFromInteger";
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   int _subFromInteger(int other) native "Integer_subFromInteger";
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   int _mulFromInteger(int other) native "Integer_mulFromInteger";
   @pragma("vm:non-nullable-result-type")
   int _truncDivFromInteger(int other) native "Integer_truncDivFromInteger";
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   int _moduloFromInteger(int other) native "Integer_moduloFromInteger";
   int _remainderFromInteger(int other) {
@@ -86,41 +101,49 @@
     return unsafeCast<int>(other - (other ~/ this) * this);
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   @pragma("vm:never-inline")
   int operator >>(int other) => other._shrFromInteger(this);
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:non-nullable-result-type")
   @pragma("vm:never-inline")
   int operator <<(int other) => other._shlFromInteger(this);
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   @pragma("vm:never-inline")
   bool operator <(num other) {
     return other > this;
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   @pragma("vm:never-inline")
   bool operator >(num other) {
     return other._greaterThanFromInteger(this);
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   @pragma("vm:never-inline")
   bool operator >=(num other) {
     return (this == other) || (this > other);
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   @pragma("vm:never-inline")
   bool operator <=(num other) {
     return (this == other) || (this < other);
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   bool _greaterThanFromInteger(int other)
       native "Integer_greaterThanFromInteger";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   @pragma("vm:never-inline")
   bool operator ==(Object other) {
@@ -130,6 +153,7 @@
     return false;
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   bool _equalToInteger(int other) native "Integer_equalToInteger";
   int abs() {
@@ -137,7 +161,11 @@
   }
 
   int get sign {
-    return (this > 0) ? 1 : (this < 0) ? -1 : 0;
+    return (this > 0)
+        ? 1
+        : (this < 0)
+            ? -1
+            : 0;
   }
 
   bool get isEven => ((this & 1) == 0);
@@ -268,6 +296,7 @@
     return this;
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Double)
   double toDouble() {
     return new _Double.fromInteger(this);
@@ -515,13 +544,16 @@
 
   int get hashCode => this;
   int get _identityHashCode => this;
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int operator ~() native "Smi_bitNegate";
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int get bitLength native "Smi_bitLength";
 
   int operator &(int other) => other._bitAndFromSmi(this);
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int _bitAndFromSmi(_Smi other) native "Smi_bitAndFromSmi";
 
diff --git a/sdk/lib/_internal/vm/lib/internal_patch.dart b/sdk/lib/_internal/vm/lib/internal_patch.dart
index ad5f5b7..1566701 100644
--- a/sdk/lib/_internal/vm/lib/internal_patch.dart
+++ b/sdk/lib/_internal/vm/lib/internal_patch.dart
@@ -36,19 +36,19 @@
     native "Internal_extractTypeArguments";
 
 /// The returned string is a [_OneByteString] with uninitialized content.
-@pragma("vm:entry-point", "call")
+@pragma("vm:recognized", "asm-intrinsic")
 String allocateOneByteString(int length)
     native "Internal_allocateOneByteString";
 
 /// The [string] must be a [_OneByteString]. The [index] must be valid.
-@pragma("vm:entry-point", "call")
+@pragma("vm:recognized", "asm-intrinsic")
 void writeIntoOneByteString(String string, int index, int codePoint)
     native "Internal_writeIntoOneByteString";
 
-/// This function is recognized by the VM and compiled into specialized code.
 /// It is assumed that [from] is a native [Uint8List] class and [to] is a
 /// [_OneByteString]. The [fromStart] and [toStart] indices together with the
 /// [length] must specify ranges within the bounds of the list / string.
+@pragma("vm:recognized", "other")
 @pragma("vm:prefer-inline")
 void copyRangeFromUint8ListToOneByteString(
     Uint8List from, String to, int fromStart, int toStart, int length) {
@@ -58,12 +58,12 @@
 }
 
 /// The returned string is a [_TwoByteString] with uninitialized content.
-@pragma("vm:entry-point", "call")
+@pragma("vm:recognized", "asm-intrinsic")
 String allocateTwoByteString(int length)
     native "Internal_allocateTwoByteString";
 
 /// The [string] must be a [_TwoByteString]. The [index] must be valid.
-@pragma("vm:entry-point", "call")
+@pragma("vm:recognized", "asm-intrinsic")
 void writeIntoTwoByteString(String string, int index, int codePoint)
     native "Internal_writeIntoTwoByteString";
 
@@ -106,6 +106,7 @@
 
 bool _inquireIs64Bit() native "Internal_inquireIs64Bit";
 
+@pragma("vm:recognized", "other")
 @pragma("vm:entry-point", "call")
 @pragma("vm:exact-result-type", bool)
 @pragma("vm:prefer-inline")
@@ -163,7 +164,7 @@
 
 // This function can be used to keep an object alive til that point.
 //
-// This is implemented by a recognized method.
+@pragma("vm:recognized", "other")
 @pragma('vm:prefer-inline')
 void reachabilityFence(Object object) native "Internal_reachabilityFence";
 
diff --git a/sdk/lib/_internal/vm/lib/math_patch.dart b/sdk/lib/_internal/vm/lib/math_patch.dart
index b41daad..0e384ca 100644
--- a/sdk/lib/_internal/vm/lib/math_patch.dart
+++ b/sdk/lib/_internal/vm/lib/math_patch.dart
@@ -14,6 +14,7 @@
 /// There are no parts of this patch library.
 
 @patch
+@pragma("vm:recognized", "other")
 @pragma("vm:prefer-inline")
 T min<T extends num>(T a, T b) {
   if (a > b) return b;
@@ -38,6 +39,7 @@
 }
 
 @patch
+@pragma("vm:recognized", "other")
 @pragma("vm:prefer-inline")
 T max<T extends num>(T a, T b) {
   if (a > b) return a;
@@ -74,6 +76,7 @@
   return _doublePow(x.toDouble(), exponent.toDouble());
 }
 
+@pragma("vm:recognized", "other")
 @pragma("vm:exact-result-type", "dart:core#_Double")
 double _doublePow(double base, double exponent) {
   if (exponent == 0.0) {
@@ -100,6 +103,7 @@
 
 double _pow(double base, double exponent) native "Math_doublePow";
 
+@pragma("vm:recognized", "other")
 int _intPow(int base, int exponent) {
   // Exponentiation by squaring.
   int result = 1;
@@ -117,34 +121,42 @@
 }
 
 @patch
+@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
 @pragma("vm:never-inline")
 double atan2(num a, num b) => _atan2(a.toDouble(), b.toDouble());
 @patch
+@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
 @pragma("vm:never-inline")
 double sin(num radians) => _sin(radians.toDouble());
 @patch
+@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
 @pragma("vm:never-inline")
 double cos(num radians) => _cos(radians.toDouble());
 @patch
+@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
 @pragma("vm:never-inline")
 double tan(num radians) => _tan(radians.toDouble());
 @patch
+@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
 @pragma("vm:never-inline")
 double acos(num x) => _acos(x.toDouble());
 @patch
+@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
 @pragma("vm:never-inline")
 double asin(num x) => _asin(x.toDouble());
 @patch
+@pragma("vm:recognized", "graph-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
 @pragma("vm:never-inline")
 double atan(num x) => _atan(x.toDouble());
 @patch
+@pragma("vm:recognized", "asm-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Double")
 @pragma("vm:never-inline")
 double sqrt(num x) => _sqrt(x.toDouble());
@@ -208,6 +220,7 @@
   // This is a native to prevent 64-bit operations in Dart, which
   // fail with --throw_on_javascript_int_overflow.
   // TODO(regis): Implement in Dart and remove Random_nextState in math.cc.
+  @pragma("vm:recognized", "asm-intrinsic")
   void _nextState() native "Random_nextState";
 
   int nextInt(int max) {
diff --git a/sdk/lib/_internal/vm/lib/object_patch.dart b/sdk/lib/_internal/vm/lib/object_patch.dart
index e862e5c..fe23069 100644
--- a/sdk/lib/_internal/vm/lib/object_patch.dart
+++ b/sdk/lib/_internal/vm/lib/object_patch.dart
@@ -4,8 +4,10 @@
 
 // part of "core_patch.dart";
 
+@pragma("vm:recognized", "asm-intrinsic")
 @pragma("vm:exact-result-type", "dart:core#_Smi")
 int _getHash(obj) native "Object_getHash";
+@pragma("vm:recognized", "asm-intrinsic")
 void _setHash(obj, hash) native "Object_setHash";
 
 @patch
@@ -13,6 +15,7 @@
 class Object {
   // The VM has its own implementation of equals.
   @patch
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   @pragma("vm:prefer-inline")
   bool operator ==(Object other) native "Object_equals";
@@ -52,9 +55,11 @@
   }
 
   @patch
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Type")
   Type get runtimeType native "Object_runtimeType";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:entry-point", "call")
   @pragma("vm:exact-result-type", bool)
   static bool _haveSameRuntimeType(a, b) native "Object_haveSameRuntimeType";
diff --git a/sdk/lib/_internal/vm/lib/profiler.dart b/sdk/lib/_internal/vm/lib/profiler.dart
index 745eaa5..812916e 100644
--- a/sdk/lib/_internal/vm/lib/profiler.dart
+++ b/sdk/lib/_internal/vm/lib/profiler.dart
@@ -18,11 +18,14 @@
 class _UserTag implements UserTag {
   factory _UserTag(String label) native "UserTag_new";
   String get label native "UserTag_label";
+  @pragma("vm:recognized", "asm-intrinsic")
   UserTag makeCurrent() native "UserTag_makeCurrent";
 }
 
 @patch
 UserTag getCurrentTag() => _getCurrentTag();
+@pragma("vm:recognized", "asm-intrinsic")
 UserTag _getCurrentTag() native "Profiler_getCurrentTag";
 
+@pragma("vm:recognized", "asm-intrinsic")
 UserTag _getDefaultTag() native "UserTag_defaultTag";
diff --git a/sdk/lib/_internal/vm/lib/regexp_patch.dart b/sdk/lib/_internal/vm/lib/regexp_patch.dart
index 153080b..73e38a1 100644
--- a/sdk/lib/_internal/vm/lib/regexp_patch.dart
+++ b/sdk/lib/_internal/vm/lib/regexp_patch.dart
@@ -350,9 +350,11 @@
     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   ];
 
+  @pragma("vm:recognized", "asm-intrinsic")
   List<int>? _ExecuteMatch(String str, int start_index)
       native "RegExp_ExecuteMatch";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   List<int>? _ExecuteMatchSticky(String str, int start_index)
       native "RegExp_ExecuteMatchSticky";
 }
diff --git a/sdk/lib/_internal/vm/lib/string_patch.dart b/sdk/lib/_internal/vm/lib/string_patch.dart
index 5d6612d..18c1b56 100644
--- a/sdk/lib/_internal/vm/lib/string_patch.dart
+++ b/sdk/lib/_internal/vm/lib/string_patch.dart
@@ -94,9 +94,11 @@
     throw new UnsupportedError("_StringBase can't be instaniated");
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int get hashCode native "String_getHashCode";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int get _identityHashCode native "String_getHashCode";
 
@@ -249,14 +251,17 @@
   static String _createFromCodePoints(List<int> codePoints, int start, int end)
       native "StringBase_createFromCodePoints";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   String operator [](int index) native "String_charAt";
 
   int codeUnitAt(int index); // Implemented in the subclasses.
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:prefer-inline")
   int get length native "String_getLength";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   bool get isEmpty {
     return this.length == 0;
@@ -306,6 +311,7 @@
     return 0;
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   bool _substringMatches(int start, String other) {
     if (other.isEmpty) return true;
@@ -838,6 +844,7 @@
    * into a result string.
    * Modifies the input list if it contains non-`String` values.
    */
+  @pragma("vm:recognized", "other")
   @pragma("vm:entry-point", "call")
   static String _interpolate(final List values) {
     final numValues = values.length;
@@ -955,9 +962,11 @@
     throw "Unreachable";
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int get hashCode native "String_getHashCode";
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int codeUnitAt(int index) native "String_codeUnitAt";
 
@@ -965,11 +974,13 @@
     return _StringBase._isOneByteWhitespace(codeUnit);
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   bool operator ==(Object other) {
     return super == other;
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", _OneByteString)
   String _substringUncheckedNative(int startIndex, int endIndex)
       native "OneByteString_substringUnchecked";
@@ -1291,9 +1302,11 @@
     return _StringBase._isTwoByteWhitespace(codeUnit);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int codeUnitAt(int index) native "String_codeUnitAt";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   bool operator ==(Object other) {
     return super == other;
@@ -1310,6 +1323,7 @@
     return _StringBase._isOneByteWhitespace(codeUnit);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int codeUnitAt(int index) native "String_codeUnitAt";
 
@@ -1328,6 +1342,7 @@
     return _StringBase._isTwoByteWhitespace(codeUnit);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int codeUnitAt(int index) native "String_codeUnitAt";
 
diff --git a/sdk/lib/_internal/vm/lib/type_patch.dart b/sdk/lib/_internal/vm/lib/type_patch.dart
index 1b8f3c1..52be775 100644
--- a/sdk/lib/_internal/vm/lib/type_patch.dart
+++ b/sdk/lib/_internal/vm/lib/type_patch.dart
@@ -18,9 +18,11 @@
     throw "Unreachable";
   }
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int get hashCode native "Type_getHashCode";
 
+  @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
   bool operator ==(other) native "Type_equality";
 }
diff --git a/sdk/lib/_internal/vm/lib/typed_data_patch.dart b/sdk/lib/_internal/vm/lib/typed_data_patch.dart
index ccd3183..8139cb5 100644
--- a/sdk/lib/_internal/vm/lib/typed_data_patch.dart
+++ b/sdk/lib/_internal/vm/lib/typed_data_patch.dart
@@ -36,6 +36,7 @@
 @patch
 class ByteData implements TypedData {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:entry-point")
   factory ByteData(int length) {
     final list = new Uint8List(length) as _TypedList;
@@ -2066,57 +2067,82 @@
 
   // Methods implementing the collection interface.
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:prefer-inline")
   int get length native "TypedData_length";
 
   // Internal utility methods.
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int _getInt8(int offsetInBytes) native "TypedData_GetInt8";
+  @pragma("vm:recognized", "other")
   void _setInt8(int offsetInBytes, int value) native "TypedData_SetInt8";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int _getUint8(int offsetInBytes) native "TypedData_GetUint8";
+  @pragma("vm:recognized", "other")
   void _setUint8(int offsetInBytes, int value) native "TypedData_SetUint8";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int _getInt16(int offsetInBytes) native "TypedData_GetInt16";
+  @pragma("vm:recognized", "other")
   void _setInt16(int offsetInBytes, int value) native "TypedData_SetInt16";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int _getUint16(int offsetInBytes) native "TypedData_GetUint16";
+  @pragma("vm:recognized", "other")
   void _setUint16(int offsetInBytes, int value) native "TypedData_SetUint16";
 
+  @pragma("vm:recognized", "other")
   int _getInt32(int offsetInBytes) native "TypedData_GetInt32";
+  @pragma("vm:recognized", "other")
   void _setInt32(int offsetInBytes, int value) native "TypedData_SetInt32";
 
+  @pragma("vm:recognized", "other")
   int _getUint32(int offsetInBytes) native "TypedData_GetUint32";
+  @pragma("vm:recognized", "other")
   void _setUint32(int offsetInBytes, int value) native "TypedData_SetUint32";
 
+  @pragma("vm:recognized", "other")
   int _getInt64(int offsetInBytes) native "TypedData_GetInt64";
+  @pragma("vm:recognized", "other")
   void _setInt64(int offsetInBytes, int value) native "TypedData_SetInt64";
 
+  @pragma("vm:recognized", "other")
   int _getUint64(int offsetInBytes) native "TypedData_GetUint64";
+  @pragma("vm:recognized", "other")
   void _setUint64(int offsetInBytes, int value) native "TypedData_SetUint64";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_Double")
   double _getFloat32(int offsetInBytes) native "TypedData_GetFloat32";
+  @pragma("vm:recognized", "other")
   void _setFloat32(int offsetInBytes, double value)
       native "TypedData_SetFloat32";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_Double")
   double _getFloat64(int offsetInBytes) native "TypedData_GetFloat64";
+  @pragma("vm:recognized", "other")
   void _setFloat64(int offsetInBytes, double value)
       native "TypedData_SetFloat64";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 _getFloat32x4(int offsetInBytes) native "TypedData_GetFloat32x4";
+  @pragma("vm:recognized", "other")
   void _setFloat32x4(int offsetInBytes, Float32x4 value)
       native "TypedData_SetFloat32x4";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 _getInt32x4(int offsetInBytes) native "TypedData_GetInt32x4";
+  @pragma("vm:recognized", "other")
   void _setInt32x4(int offsetInBytes, Int32x4 value)
       native "TypedData_SetInt32x4";
 
@@ -2145,6 +2171,7 @@
 @patch
 class Int8List {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int8List)
   @pragma("vm:prefer-inline")
   factory Int8List(int length) native "TypedData_Int8Array_new";
@@ -2165,6 +2192,7 @@
   }
 
   // Method(s) implementing List interface.
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int operator [](int index) {
     if (index < 0 || index >= length) {
@@ -2173,6 +2201,7 @@
     return _getInt8(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, int value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2194,6 +2223,7 @@
 @patch
 class Uint8List {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Uint8List)
   @pragma("vm:prefer-inline")
   factory Uint8List(int length) native "TypedData_Uint8Array_new";
@@ -2214,6 +2244,7 @@
   }
 
   // Methods implementing List interface.
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int operator [](int index) {
     if (index < 0 || index >= length) {
@@ -2222,6 +2253,7 @@
     return _getUint8(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, int value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2243,6 +2275,7 @@
 @patch
 class Uint8ClampedList {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Uint8ClampedList)
   @pragma("vm:prefer-inline")
   factory Uint8ClampedList(int length) native "TypedData_Uint8ClampedArray_new";
@@ -2263,6 +2296,7 @@
   }
 
   // Methods implementing List interface.
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int operator [](int index) {
     if (index < 0 || index >= length) {
@@ -2271,6 +2305,7 @@
     return _getUint8(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, int value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2292,6 +2327,7 @@
 @patch
 class Int16List {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int16List)
   @pragma("vm:prefer-inline")
   factory Int16List(int length) native "TypedData_Int16Array_new";
@@ -2312,6 +2348,7 @@
   }
 
   // Method(s) implementing List interface.
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int operator [](int index) {
     if (index < 0 || index >= length) {
@@ -2320,6 +2357,7 @@
     return _getIndexedInt16(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, int value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2361,6 +2399,7 @@
 @patch
 class Uint16List {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Uint16List)
   @pragma("vm:prefer-inline")
   factory Uint16List(int length) native "TypedData_Uint16Array_new";
@@ -2381,6 +2420,7 @@
   }
 
   // Method(s) implementing the List interface.
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int operator [](int index) {
     if (index < 0 || index >= length) {
@@ -2389,6 +2429,7 @@
     return _getIndexedUint16(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, int value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2430,6 +2471,7 @@
 @patch
 class Int32List {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32List)
   @pragma("vm:prefer-inline")
   factory Int32List(int length) native "TypedData_Int32Array_new";
@@ -2450,6 +2492,7 @@
   }
 
   // Method(s) implementing the List interface.
+  @pragma("vm:recognized", "graph-intrinsic")
   int operator [](int index) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2457,6 +2500,7 @@
     return _getIndexedInt32(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, int value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2486,6 +2530,7 @@
 @patch
 class Uint32List {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Uint32List)
   @pragma("vm:prefer-inline")
   factory Uint32List(int length) native "TypedData_Uint32Array_new";
@@ -2506,6 +2551,7 @@
   }
 
   // Method(s) implementing the List interface.
+  @pragma("vm:recognized", "graph-intrinsic")
   int operator [](int index) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2513,6 +2559,7 @@
     return _getIndexedUint32(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, int value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2542,6 +2589,7 @@
 @patch
 class Int64List {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int64List)
   @pragma("vm:prefer-inline")
   factory Int64List(int length) native "TypedData_Int64Array_new";
@@ -2562,6 +2610,7 @@
   }
 
   // Method(s) implementing the List interface.
+  @pragma("vm:recognized", "graph-intrinsic")
   int operator [](int index) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2569,6 +2618,7 @@
     return _getIndexedInt64(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, int value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2598,6 +2648,7 @@
 @patch
 class Uint64List {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Uint64List)
   @pragma("vm:prefer-inline")
   factory Uint64List(int length) native "TypedData_Uint64Array_new";
@@ -2618,6 +2669,7 @@
   }
 
   // Method(s) implementing the List interface.
+  @pragma("vm:recognized", "graph-intrinsic")
   int operator [](int index) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2625,6 +2677,7 @@
     return _getIndexedUint64(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, int value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2654,6 +2707,7 @@
 @patch
 class Float32List {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32List)
   @pragma("vm:prefer-inline")
   factory Float32List(int length) native "TypedData_Float32Array_new";
@@ -2674,6 +2728,7 @@
   }
 
   // Method(s) implementing the List interface.
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Double")
   double operator [](int index) {
     if (index < 0 || index >= length) {
@@ -2682,6 +2737,7 @@
     return _getIndexedFloat32(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, double value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2711,6 +2767,7 @@
 @patch
 class Float64List {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64List)
   @pragma("vm:prefer-inline")
   factory Float64List(int length) native "TypedData_Float64Array_new";
@@ -2731,6 +2788,7 @@
   }
 
   // Method(s) implementing the List interface.
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Double")
   double operator [](int index) {
     if (index < 0 || index >= length) {
@@ -2739,6 +2797,7 @@
     return _getIndexedFloat64(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, double value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2768,6 +2827,7 @@
 @patch
 class Float32x4List {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4List)
   @pragma("vm:prefer-inline")
   factory Float32x4List(int length) native "TypedData_Float32x4Array_new";
@@ -2787,6 +2847,7 @@
     throw "Unreachable";
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 operator [](int index) {
     if (index < 0 || index >= length) {
@@ -2795,6 +2856,7 @@
     return _getIndexedFloat32x4(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, Float32x4 value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2824,6 +2886,7 @@
 @patch
 class Int32x4List {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4List)
   @pragma("vm:prefer-inline")
   factory Int32x4List(int length) native "TypedData_Int32x4Array_new";
@@ -2843,6 +2906,7 @@
     throw "Unreachable";
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 operator [](int index) {
     if (index < 0 || index >= length) {
@@ -2851,6 +2915,7 @@
     return _getIndexedInt32x4(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, Int32x4 value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2880,6 +2945,7 @@
 @patch
 class Float64x2List {
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64x2List)
   @pragma("vm:prefer-inline")
   factory Float64x2List(int length) native "TypedData_Float64x2Array_new";
@@ -2899,6 +2965,7 @@
     throw "Unreachable";
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", _Float64x2)
   Float64x2 operator [](int index) {
     if (index < 0 || index >= length) {
@@ -2907,6 +2974,7 @@
     return _getIndexedFloat64x2(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, Float64x2 value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -2976,6 +3044,7 @@
   }
 
   // Method(s) implementing the List interface.
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int operator [](int index) {
     if (index < 0 || index >= length) {
@@ -2984,6 +3053,7 @@
     return _getUint8(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, int value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -3011,6 +3081,7 @@
   }
 
   // Method(s) implementing the List interface.
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   int operator [](int index) {
     if (index < 0 || index >= length) {
@@ -3019,6 +3090,7 @@
     return _getUint8(index);
   }
 
+  @pragma("vm:recognized", "graph-intrinsic")
   void operator []=(int index, int value) {
     if (index < 0 || index >= length) {
       throw new RangeError.index(index, this, "index");
@@ -3511,6 +3583,7 @@
     return _Float32x4FromDoubles(x, y, z, w);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   static _Float32x4 _Float32x4FromDoubles(
       double x, double y, double z, double w) native "Float32x4_fromDoubles";
@@ -3522,65 +3595,90 @@
     return _Float32x4Splat(v);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   static _Float32x4 _Float32x4Splat(double v) native "Float32x4_splat";
 
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   factory Float32x4.zero() native "Float32x4_zero";
 
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   factory Float32x4.fromInt32x4Bits(Int32x4 x)
       native "Float32x4_fromInt32x4Bits";
 
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   factory Float32x4.fromFloat64x2(Float64x2 v) native "Float32x4_fromFloat64x2";
 }
 
 @pragma("vm:entry-point")
 class _Float32x4 implements Float32x4 {
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 operator +(Float32x4 other) native "Float32x4_add";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 operator -() native "Float32x4_negate";
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 operator -(Float32x4 other) native "Float32x4_sub";
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 operator *(Float32x4 other) native "Float32x4_mul";
+  @pragma("vm:recognized", "graph-intrinsic")
   Float32x4 operator /(Float32x4 other) native "Float32x4_div";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 lessThan(Float32x4 other) native "Float32x4_cmplt";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 lessThanOrEqual(Float32x4 other) native "Float32x4_cmplte";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 greaterThan(Float32x4 other) native "Float32x4_cmpgt";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 greaterThanOrEqual(Float32x4 other) native "Float32x4_cmpgte";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 equal(Float32x4 other) native "Float32x4_cmpequal";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 notEqual(Float32x4 other) native "Float32x4_cmpnequal";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 scale(double s) native "Float32x4_scale";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 abs() native "Float32x4_abs";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 clamp(Float32x4 lowerLimit, Float32x4 upperLimit)
       native "Float32x4_clamp";
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Double")
   double get x native "Float32x4_getX";
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Double")
   double get y native "Float32x4_getY";
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Double")
   double get z native "Float32x4_getZ";
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Double")
   double get w native "Float32x4_getW";
+  @pragma("vm:recognized", "other")
   int get signMask native "Float32x4_getSignMask";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 shuffle(int mask) native "Float32x4_shuffle";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 shuffleMix(Float32x4 zw, int mask) native "Float32x4_shuffleMix";
 
@@ -3590,6 +3688,7 @@
     return _withX(x);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 _withX(double x) native "Float32x4_setX";
 
@@ -3599,6 +3698,7 @@
     return _withY(y);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 _withY(double y) native "Float32x4_setY";
 
@@ -3608,6 +3708,7 @@
     return _withZ(z);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 _withZ(double z) native "Float32x4_setZ";
 
@@ -3617,17 +3718,23 @@
     return _withW(w);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 _withW(double w) native "Float32x4_setW";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 min(Float32x4 other) native "Float32x4_min";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 max(Float32x4 other) native "Float32x4_max";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 sqrt() native "Float32x4_sqrt";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 reciprocal() native "Float32x4_reciprocal";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 reciprocalSqrt() native "Float32x4_reciprocalSqrt";
 }
@@ -3644,6 +3751,7 @@
     return _Int32x4FromInts(x, y, z, w);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   static _Int32x4 _Int32x4FromInts(int x, int y, int z, int w)
       native "Int32x4_fromInts";
@@ -3658,11 +3766,13 @@
     return _Int32x4FromBools(x, y, z, w);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   static _Int32x4 _Int32x4FromBools(bool x, bool y, bool z, bool w)
       native "Int32x4_fromBools";
 
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   factory Int32x4.fromFloat32x4Bits(Float32x4 x)
       native "Int32x4_fromFloat32x4Bits";
@@ -3679,9 +3789,12 @@
   int get y native "Int32x4_getY";
   int get z native "Int32x4_getZ";
   int get w native "Int32x4_getW";
+  @pragma("vm:recognized", "other")
   int get signMask native "Int32x4_getSignMask";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 shuffle(int mask) native "Int32x4_shuffle";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 shuffleMix(Int32x4 zw, int mask) native "Int32x4_shuffleMix";
 
@@ -3721,12 +3834,16 @@
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 _withW(int w) native "Int32x4_setW";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", bool)
   bool get flagX native "Int32x4_getFlagX";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", bool)
   bool get flagY native "Int32x4_getFlagY";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", bool)
   bool get flagZ native "Int32x4_getFlagZ";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", bool)
   bool get flagW native "Int32x4_getFlagW";
 
@@ -3736,6 +3853,7 @@
     return _withFlagX(x);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 _withFlagX(bool x) native "Int32x4_setFlagX";
 
@@ -3745,6 +3863,7 @@
     return _withFlagY(y);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 _withFlagY(bool y) native "Int32x4_setFlagY";
 
@@ -3754,6 +3873,7 @@
     return _withFlagZ(z);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 _withFlagZ(bool z) native "Int32x4_setFlagZ";
 
@@ -3763,9 +3883,11 @@
     return _withFlagW(w);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4)
   Int32x4 _withFlagW(bool w) native "Int32x4_setFlagW";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4)
   Float32x4 select(Float32x4 trueValue, Float32x4 falseValue)
       native "Int32x4_select";
@@ -3781,6 +3903,7 @@
     return _Float64x2FromDoubles(x, y);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64x2)
   static _Float64x2 _Float64x2FromDoubles(double x, double y)
       native "Float64x2_fromDoubles";
@@ -3792,36 +3915,49 @@
     return _Float64x2Splat(v);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64x2)
   static _Float64x2 _Float64x2Splat(double v) native "Float64x2_splat";
 
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64x2)
   factory Float64x2.zero() native "Float64x2_zero";
 
   @patch
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64x2)
   factory Float64x2.fromFloat32x4(Float32x4 v) native "Float64x2_fromFloat32x4";
 }
 
 @pragma("vm:entry-point")
 class _Float64x2 implements Float64x2 {
+  @pragma("vm:recognized", "graph-intrinsic")
   Float64x2 operator +(Float64x2 other) native "Float64x2_add";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64x2)
   Float64x2 operator -() native "Float64x2_negate";
+  @pragma("vm:recognized", "graph-intrinsic")
   Float64x2 operator -(Float64x2 other) native "Float64x2_sub";
+  @pragma("vm:recognized", "graph-intrinsic")
   Float64x2 operator *(Float64x2 other) native "Float64x2_mul";
+  @pragma("vm:recognized", "graph-intrinsic")
   Float64x2 operator /(Float64x2 other) native "Float64x2_div";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64x2)
   Float64x2 scale(double s) native "Float64x2_scale";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64x2)
   Float64x2 abs() native "Float64x2_abs";
   Float64x2 clamp(Float64x2 lowerLimit, Float64x2 upperLimit)
       native "Float64x2_clamp";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_Double")
   double get x native "Float64x2_getX";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_Double")
   double get y native "Float64x2_getY";
+  @pragma("vm:recognized", "other")
   int get signMask native "Float64x2_getSignMask";
 
   @pragma("vm:prefer-inline")
@@ -3830,6 +3966,7 @@
     return _withX(x);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64x2)
   Float64x2 _withX(double x) native "Float64x2_setX";
 
@@ -3839,13 +3976,17 @@
     return _withY(y);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64x2)
   Float64x2 _withY(double y) native "Float64x2_setY";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64x2)
   Float64x2 min(Float64x2 other) native "Float64x2_min";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64x2)
   Float64x2 max(Float64x2 other) native "Float64x2_max";
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64x2)
   Float64x2 sqrt() native "Float64x2_sqrt";
 }
@@ -3892,14 +4033,17 @@
     return _typedData.buffer;
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:non-nullable-result-type")
   @pragma("vm:prefer-inline")
   _TypedList get _typedData native "TypedDataView_typedData";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:prefer-inline")
   int get offsetInBytes native "TypedDataView_offsetInBytes";
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:prefer-inline")
   int get length native "TypedDataView_length";
@@ -3910,6 +4054,7 @@
     with _IntListMixin, _TypedIntListMixin<Int8List>
     implements Int8List {
   // Constructor.
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int8ArrayView)
   factory _Int8ArrayView._(_TypedList buffer, int offsetInBytes, int length)
       native "TypedDataView_Int8ArrayView_new";
@@ -3949,6 +4094,7 @@
     with _IntListMixin, _TypedIntListMixin<Uint8List>
     implements Uint8List {
   // Constructor.
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Uint8ArrayView)
   factory _Uint8ArrayView._(_TypedList buffer, int offsetInBytes, int length)
       native "TypedDataView_Uint8ArrayView_new";
@@ -3988,6 +4134,7 @@
     with _IntListMixin, _TypedIntListMixin<Uint8ClampedList>
     implements Uint8ClampedList {
   // Constructor.
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Uint8ClampedArrayView)
   factory _Uint8ClampedArrayView._(_TypedList buffer, int offsetInBytes,
       int length) native "TypedDataView_Uint8ClampedArrayView_new";
@@ -4027,6 +4174,7 @@
     with _IntListMixin, _TypedIntListMixin<Int16List>
     implements Int16List {
   // Constructor.
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int16ArrayView)
   factory _Int16ArrayView._(_TypedList buffer, int offsetInBytes, int length)
       native "TypedDataView_Int16ArrayView_new";
@@ -4079,6 +4227,7 @@
     with _IntListMixin, _TypedIntListMixin<Uint16List>
     implements Uint16List {
   // Constructor.
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Uint16ArrayView)
   factory _Uint16ArrayView._(_TypedList buffer, int offsetInBytes, int length)
       native "TypedDataView_Uint16ArrayView_new";
@@ -4132,6 +4281,7 @@
     with _IntListMixin, _TypedIntListMixin<Int32List>
     implements Int32List {
   // Constructor.
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32ArrayView)
   factory _Int32ArrayView._(_TypedList buffer, int offsetInBytes, int length)
       native "TypedDataView_Int32ArrayView_new";
@@ -4171,6 +4321,7 @@
     with _IntListMixin, _TypedIntListMixin<Uint32List>
     implements Uint32List {
   // Constructor.
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Uint32ArrayView)
   factory _Uint32ArrayView._(_TypedList buffer, int offsetInBytes, int length)
       native "TypedDataView_Uint32ArrayView_new";
@@ -4210,6 +4361,7 @@
     with _IntListMixin, _TypedIntListMixin<Int64List>
     implements Int64List {
   // Constructor.
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int64ArrayView)
   factory _Int64ArrayView._(_TypedList buffer, int offsetInBytes, int length)
       native "TypedDataView_Int64ArrayView_new";
@@ -4249,6 +4401,7 @@
     with _IntListMixin, _TypedIntListMixin<Uint64List>
     implements Uint64List {
   // Constructor.
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Uint64ArrayView)
   factory _Uint64ArrayView._(_TypedList buffer, int offsetInBytes, int length)
       native "TypedDataView_Uint64ArrayView_new";
@@ -4288,6 +4441,7 @@
     with _DoubleListMixin, _TypedDoubleListMixin<Float32List>
     implements Float32List {
   // Constructor.
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32ArrayView)
   factory _Float32ArrayView._(_TypedList buffer, int offsetInBytes, int length)
       native "TypedDataView_Float32ArrayView_new";
@@ -4327,6 +4481,7 @@
     with _DoubleListMixin, _TypedDoubleListMixin<Float64List>
     implements Float64List {
   // Constructor.
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64ArrayView)
   factory _Float64ArrayView._(_TypedList buffer, int offsetInBytes, int length)
       native "TypedDataView_Float64ArrayView_new";
@@ -4366,6 +4521,7 @@
     with _Float32x4ListMixin
     implements Float32x4List {
   // Constructor.
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float32x4ArrayView)
   factory _Float32x4ArrayView._(_TypedList buffer, int offsetInBytes,
       int length) native "TypedDataView_Float32x4ArrayView_new";
@@ -4403,6 +4559,7 @@
     with _Int32x4ListMixin
     implements Int32x4List {
   // Constructor.
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Int32x4ArrayView)
   factory _Int32x4ArrayView._(_TypedList buffer, int offsetInBytes, int length)
       native "TypedDataView_Int32x4ArrayView_new";
@@ -4440,6 +4597,7 @@
     with _Float64x2ListMixin
     implements Float64x2List {
   // Constructor.
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _Float64x2ArrayView)
   factory _Float64x2ArrayView._(_TypedList buffer, int offsetInBytes,
       int length) native "TypedDataView_Float64x2ArrayView_new";
@@ -4474,6 +4632,7 @@
 
 @pragma("vm:entry-point")
 class _ByteDataView implements ByteData {
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _ByteDataView)
   factory _ByteDataView._(_TypedList buffer, int offsetInBytes, int length)
       native "TypedDataView_ByteDataView_new";
@@ -4720,14 +4879,17 @@
     _typedData._setFloat32x4(offsetInBytes + byteOffset, value);
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:non-nullable-result-type")
   @pragma("vm:prefer-inline")
   _TypedList get _typedData native "TypedDataView_typedData";
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:prefer-inline")
   int get offsetInBytes native "TypedDataView_offsetInBytes";
 
+  @pragma("vm:recognized", "graph-intrinsic")
   @pragma("vm:exact-result-type", "dart:core#_Smi")
   @pragma("vm:prefer-inline")
   int get length native "TypedDataView_length";
@@ -4773,6 +4935,7 @@
   return value & 0xFF;
 }
 
+@pragma("vm:recognized", "other")
 @pragma("vm:exact-result-type", "dart:core#_Smi")
 int _toClampedUint8(int value) {
   if (value < 0) return 0;
diff --git a/sdk/lib/async/future.dart b/sdk/lib/async/future.dart
index 0e92b2e..ed9a850 100644
--- a/sdk/lib/async/future.dart
+++ b/sdk/lib/async/future.dart
@@ -361,7 +361,7 @@
    * The call to [cleanUp] should not throw. If it does, the error will be an
    * uncaught asynchronous error.
    */
-  @pragma("vm:entry-point")
+  @pragma("vm:recognized", "other")
   static Future<List<T>> wait<T>(Iterable<Future<T>> futures,
       {bool eagerError = false, void cleanUp(T successValue)?}) {
     // This is a VM recognised method, and the _future variable is deliberately
diff --git a/sdk/lib/async/future_impl.dart b/sdk/lib/async/future_impl.dart
index 0d38c61..1b3e02f 100644
--- a/sdk/lib/async/future_impl.dart
+++ b/sdk/lib/async/future_impl.dart
@@ -768,6 +768,7 @@
     }
   }
 
+  @pragma("vm:recognized", "other")
   @pragma("vm:entry-point")
   Future<T> timeout(Duration timeLimit, {FutureOr<T> onTimeout()?}) {
     if (_isComplete) return new _Future.immediate(this);
diff --git a/sdk/lib/core/object.dart b/sdk/lib/core/object.dart
index 0f7d97b..b55d80d 100644
--- a/sdk/lib/core/object.dart
+++ b/sdk/lib/core/object.dart
@@ -27,6 +27,7 @@
    * through their identity. An [Object] instance is equal to itself
    * only.
    */
+  @pragma("vm:recognized", "other")
   const Object();
 
   /**
diff --git a/sdk/lib/developer/timeline.dart b/sdk/lib/developer/timeline.dart
index cc9cf40..aaa0ee4 100644
--- a/sdk/lib/developer/timeline.dart
+++ b/sdk/lib/developer/timeline.dart
@@ -364,6 +364,7 @@
 }
 
 /// Returns true if the Dart Timeline stream is enabled.
+@pragma("vm:recognized", "asm-intrinsic")
 external bool _isDartStreamEnabled();
 
 /// Returns the next async task id.
diff --git a/tests/language/nnbd/required_named_parameters/required_named_args_strong_test.dart b/tests/language/nnbd/required_named_parameters/required_named_args_strong_test.dart
index 7139036..5f7cd58 100644
--- a/tests/language/nnbd/required_named_parameters/required_named_args_strong_test.dart
+++ b/tests/language/nnbd/required_named_parameters/required_named_args_strong_test.dart
@@ -12,7 +12,7 @@
   dynamic f = func;
 
   // Invalid: Subtype may not redeclare optional parameters as required.
-  Expect.throws(() {
+  Expect.throwsTypeError(() {
     Function(
       String p0, {
       required int p1,
@@ -21,7 +21,7 @@
   });
 
   // Invalid: Subtype may not declare new required named parameters.
-  Expect.throws(() {
+  Expect.throwsTypeError(() {
     Function(
       String p0, {
       required int p1,
@@ -29,18 +29,18 @@
   });
 
   // Invalid: Invocation with explicit null required named argument.
-  Expect.throws(() {
+  Expect.throwsTypeError(() {
     f("", p1: null, p2: null);
   });
-  Expect.throws(() {
+  Expect.throwsTypeError(() {
     Function.apply(f, [""], {#p1: null, #p2: null});
   });
 
   // Invalid: Invocation that omits a required named argument.
-  Expect.throws(() {
+  Expect.throwsNoSuchMethodError(() {
     f("", p1: 100);
   });
-  Expect.throws(() {
+  Expect.throwsNoSuchMethodError(() {
     Function.apply(f, [""], {#p1: 100});
   });
 }
diff --git a/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart b/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart
index 08a79ad..ab8a449 100644
--- a/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart
+++ b/tests/language/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart
@@ -5,6 +5,9 @@
 // Testing that `noSuchMethod` forwarding properly handles optional, named and
 // type parameters, and result type checking.
 
+// VMOptions=--lazy-dispatchers
+// VMOptions=--no-lazy-dispatchers
+
 import 'package:expect/expect.dart';
 
 class A {
@@ -48,6 +51,16 @@
     } else if (invoke.memberName == #test8) {
       Expect.equals(1, invoke.positionalArguments.length);
       Expect.equals(null, invoke.positionalArguments[0]);
+    } else if (invoke.memberName == #test9) {
+      Expect.equals(invoke.typeArguments.length, 2);
+      Expect.equals(invoke.typeArguments[0].toString(), "num");
+      Expect.equals(invoke.typeArguments[1].toString(), "double");
+
+      Expect.equals(1, invoke.positionalArguments.length);
+      Expect.equals(4.2, invoke.positionalArguments[0]);
+
+      Expect.equals(1, invoke.namedArguments.length);
+      Expect.equals(3, invoke.namedArguments[#foo]);
     }
   }
 
@@ -63,6 +76,7 @@
   void set test7(int x);
 
   void test8([String? x]);
+  void test9<T, S extends T>(S x1, {T? foo});
 
   T allTogetherNow<T, S extends T>(S x1, {List<T> foo: const <Never>[]});
 }
@@ -97,6 +111,25 @@
   Expect.throwsTypeError(() => (a as dynamic).test7 = "hi");
 
   a.allTogetherNow<num, double>(2.0, foo: const <num>[3, 4]);
+  Expect.throwsTypeError(() =>
+      (a.allTogetherNow as dynamic)<int, double>(2.0, foo: const <num>[3, 4]));
+  Expect.throwsTypeError(() =>
+      (a.allTogetherNow as dynamic)<int, int>(2.0, foo: const <num>[3, 4]));
+  Expect.throwsTypeError(() => (a.allTogetherNow
+      as dynamic)<double, double>(2.0, foo: const <int>[3, 4]));
 
   a.test8();
+
+  a.test9<num, double>(4.2, foo: 3);
+  Expect.throwsTypeError(() => (a.test9 as dynamic)<int, double>(3, foo: 3));
+  Expect.throwsTypeError(
+      () => (a.test9 as dynamic)<double, double>(3, foo: 3.2));
+  // Added to check that uses of positions from the ArgumentsDescriptor in the
+  // VM properly offsets named argument positions if there are also type
+  // arguments. allTogetherNow doesn't work for this because the runtime type of
+  // the positional argument cannot be the same as the type of the named
+  // argument without the positional argument failing to match its own type,
+  // and positional argument types are usually checked first.
+  Expect.throwsTypeError(
+      () => (a.test9 as dynamic)<int, double>(4.2, foo: 3.2));
 }
diff --git a/tests/language_2/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart b/tests/language_2/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart
index 01a59e7..3e42573 100644
--- a/tests/language_2/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart
+++ b/tests/language_2/nosuchmethod_forwarding/nosuchmethod_forwarding_arguments_test.dart
@@ -5,6 +5,9 @@
 // Testing that `noSuchMethod` forwarding properly handles optional, named and
 // type parameters, and result type checking.
 
+// VMOptions=--lazy-dispatchers
+// VMOptions=--no-lazy-dispatchers
+
 import 'package:expect/expect.dart';
 
 class A {
@@ -47,6 +50,16 @@
     } else if (invoke.memberName == #test8) {
       Expect.equals(1, invoke.positionalArguments.length);
       Expect.equals(null, invoke.positionalArguments[0]);
+    } else if (invoke.memberName == #test9) {
+      Expect.equals(invoke.typeArguments.length, 2);
+      Expect.equals(invoke.typeArguments[0].toString(), "num");
+      Expect.equals(invoke.typeArguments[1].toString(), "double");
+
+      Expect.equals(1, invoke.positionalArguments.length);
+      Expect.equals(4.2, invoke.positionalArguments[0]);
+
+      Expect.equals(1, invoke.namedArguments.length);
+      Expect.equals(3, invoke.namedArguments[#foo]);
     }
   }
 
@@ -62,6 +75,7 @@
   void set test7(int x);
 
   void test8([String x]);
+  void test9<T, S extends T>(S x1, {T foo});
 
   T allTogetherNow<T, S extends T>(S x1, {List<T> foo: const <Null>[]});
 }
@@ -96,6 +110,25 @@
   Expect.throwsTypeError(() => (a as dynamic).test7 = "hi");
 
   a.allTogetherNow<num, double>(2.0, foo: const <num>[3, 4]);
+  Expect.throwsTypeError(() =>
+      (a.allTogetherNow as dynamic)<int, double>(2.0, foo: const <num>[3, 4]));
+  Expect.throwsTypeError(() =>
+      (a.allTogetherNow as dynamic)<int, int>(2.0, foo: const <num>[3, 4]));
+  Expect.throwsTypeError(() => (a.allTogetherNow
+      as dynamic)<double, double>(2.0, foo: const <int>[3, 4]));
 
   a.test8();
+
+  a.test9<num, double>(4.2, foo: 3);
+  Expect.throwsTypeError(() => (a.test9 as dynamic)<int, double>(3, foo: 3));
+  Expect.throwsTypeError(
+      () => (a.test9 as dynamic)<double, double>(3, foo: 3.2));
+  // Added to check that uses of positions from the ArgumentsDescriptor in the
+  // VM properly offsets named argument positions if there are also type
+  // arguments. allTogetherNow doesn't work for this because the runtime type of
+  // the positional argument cannot be the same as the type of the named
+  // argument without the positional argument failing to match its own type,
+  // and positional argument types are usually checked first.
+  Expect.throwsTypeError(
+      () => (a.test9 as dynamic)<int, double>(4.2, foo: 3.2));
 }
diff --git a/tools/VERSION b/tools/VERSION
index 9c3e9575..f08a7cd 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 48
+PRERELEASE 49
 PRERELEASE_PATCH 0
\ No newline at end of file