diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2680c55..1ed45f0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -469,7 +469,12 @@
 
 #### Linter
 
-Updated the Linter to `1.12.0`, which includes changes that
+Updated the Linter to `1.13.0`, which includes changes that
+- allow `while (true) { ... }` in `literal_only_boolean_expressions`.
+- fix `file_names` to report at the start of the file (not the entire
+  compilation unit).
+- fix `prefer_collection_literals` named typed parameter false positives.
+- improve control flow analysis for `use_build_context_synchronously`.
 - update `avoid_print` to allow `kDebugMode`-wrapped print calls.
 - fix handling of initializing formals in `prefer_final_parameters`.
 - fix `unnecessary_parenthesis` false positive with function expressions.
diff --git a/DEPS b/DEPS
index ec82ec1..3c180ca 100644
--- a/DEPS
+++ b/DEPS
@@ -122,7 +122,7 @@
   "intl_tag": "0.17.0-nullsafety",
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_rev": "7e00f893440a72de0637970325e4ea44bd1e8c8e",
-  "linter_tag": "1.12.0",
+  "linter_tag": "1.13.0",
   "lints_tag": "f9670df2a66e0ec12eb51554e70c1cbf56c8f5d0",
   "logging_rev": "575781ef196e4fed4fb737e38fb4b73d62727187",
   "markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
@@ -163,7 +163,7 @@
   "test_reflective_loader_rev": "fcfce37666672edac849d2af6dffc0f8df236a94",
   "test_rev": "099dcc4d052a30c6921489cfbefa1c8531d12975",
   "typed_data_rev": "29ce5a92b03326d0b8035916ac04f528874994bd",
-  "usage_rev": "e0780cd8b2f8af69a28dc52678ffe8492da27d06",
+  "usage_rev": "f0cb8f7cce8b675255c81488dbab8cf9f2f56404",
   "vector_math_rev": "0c9f5d68c047813a6dcdeb88ba7a42daddf25025",
   "watcher_rev": "3924194385fb215cef483193ed2879a618a3d69c",
   "webdriver_rev": "ff5ccb1522edf4bed578ead4d65e0cbc1f2c4f02",
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 896bede..0f466bf 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -6446,7 +6446,6 @@
     assert(optional('(', begin));
     listener.beginArguments(begin);
     int argumentCount = 0;
-    bool hasSeenNamedArgument = false;
     bool old = mayParseFunctionExpressions;
     mayParseFunctionExpressions = true;
     while (true) {
@@ -6461,10 +6460,6 @@
             ensureIdentifier(token, IdentifierContext.namedArgumentReference)
                 .next!;
         colon = token;
-        hasSeenNamedArgument = true;
-      } else if (hasSeenNamedArgument) {
-        // Positional argument after named argument.
-        reportRecoverableError(next, codes.messagePositionalAfterNamedArgument);
       }
       token = parseExpression(token);
       next = token.next!;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
index 722a3f4..1dd0f73 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
@@ -652,6 +652,16 @@
   }
 
   @override
+  DartType? visitConstructorName(ConstructorName node) {
+    return _visitParent(node);
+  }
+
+  @override
+  DartType? visitConstructorReference(ConstructorReference node) {
+    return _visitParent(node);
+  }
+
+  @override
   DartType? visitDefaultFormalParameter(DefaultFormalParameter node) {
     var separator = node.separator;
     if (separator != null && separator.end <= offset) {
diff --git a/pkg/analysis_server/test/src/services/completion/dart/feature_computer_test.dart b/pkg/analysis_server/test/src/services/completion/dart/feature_computer_test.dart
index 6e27b10..bfa63e0 100644
--- a/pkg/analysis_server/test/src/services/completion/dart/feature_computer_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/dart/feature_computer_test.dart
@@ -438,6 +438,30 @@
 ''', 'num');
   }
 
+  Future<void> test_className_period() async {
+    await assertContextType('''
+int x = List.^;
+''', 'int');
+  }
+
+  Future<void> test_className_period_identifier() async {
+    await assertContextType('''
+int x = List.^;
+''', 'int');
+  }
+
+  Future<void> test_className_typeArguments_period() async {
+    await assertContextType('''
+int x = List<double>.^;
+''', 'int');
+  }
+
+  Future<void> test_className_typeArguments_period_identifier() async {
+    await assertContextType('''
+int x = List<double>.foo^;
+''', 'int');
+  }
+
   Future<void> test_fieldDeclaration_int() async {
     await assertContextType('''
 class Foo {
diff --git a/pkg/analyzer/lib/src/dart/analysis/dependency/node.dart b/pkg/analyzer/lib/src/dart/analysis/dependency/node.dart
index 7c2429b..1243762 100644
--- a/pkg/analyzer/lib/src/dart/analysis/dependency/node.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/dependency/node.dart
@@ -22,7 +22,7 @@
   final int hashCode;
 
   ClassMemberReference(this.target, this.name)
-      : hashCode = Object.hash(target.hashCode, name.hashCode);
+      : hashCode = Object.hash(target, name);
 
   @override
   bool operator ==(Object other) {
@@ -120,7 +120,7 @@
 
   factory LibraryQualifiedName(Uri libraryUri, String name) {
     var isPrivate = name.startsWith('_');
-    var hashCode = Object.hash(libraryUri.hashCode, name.hashCode);
+    var hashCode = Object.hash(libraryUri, name);
     return LibraryQualifiedName._internal(
         libraryUri, name, isPrivate, hashCode);
   }
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 3540b01..4d344ed 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -80,7 +80,7 @@
 /// TODO(scheglov) Clean up the list of implicitly analyzed files.
 class AnalysisDriver implements AnalysisDriverGeneric {
   /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 187;
+  static const int DATA_VERSION = 188;
 
   /// The number of exception contexts allowed to write. Once this field is
   /// zero, we stop writing any new exception contexts in this process.
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index f6dab0b..e4c3cc4 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -17,9 +17,12 @@
   EnableString.constructor_tearoffs: ExperimentalFeatures.constructor_tearoffs,
   EnableString.control_flow_collections:
       ExperimentalFeatures.control_flow_collections,
+  EnableString.enhanced_enums: ExperimentalFeatures.enhanced_enums,
   EnableString.extension_methods: ExperimentalFeatures.extension_methods,
   EnableString.extension_types: ExperimentalFeatures.extension_types,
   EnableString.generic_metadata: ExperimentalFeatures.generic_metadata,
+  EnableString.named_arguments_anywhere:
+      ExperimentalFeatures.named_arguments_anywhere,
   EnableString.non_nullable: ExperimentalFeatures.non_nullable,
   EnableString.nonfunction_type_aliases:
       ExperimentalFeatures.nonfunction_type_aliases,
@@ -46,6 +49,9 @@
   /// String to enable the experiment "control-flow-collections"
   static const String control_flow_collections = 'control-flow-collections';
 
+  /// String to enable the experiment "enhanced-enums"
+  static const String enhanced_enums = 'enhanced-enums';
+
   /// String to enable the experiment "extension-methods"
   static const String extension_methods = 'extension-methods';
 
@@ -55,6 +61,9 @@
   /// String to enable the experiment "generic-metadata"
   static const String generic_metadata = 'generic-metadata';
 
+  /// String to enable the experiment "named-arguments-anywhere"
+  static const String named_arguments_anywhere = 'named-arguments-anywhere';
+
   /// String to enable the experiment "non-nullable"
   static const String non_nullable = 'non-nullable';
 
@@ -123,8 +132,18 @@
     releaseVersion: Version.parse('2.0.0'),
   );
 
-  static final extension_methods = ExperimentalFeature(
+  static final enhanced_enums = ExperimentalFeature(
     index: 4,
+    enableString: EnableString.enhanced_enums,
+    isEnabledByDefault: IsEnabledByDefault.enhanced_enums,
+    isExpired: IsExpired.enhanced_enums,
+    documentation: 'Enhanced Enums',
+    experimentalReleaseVersion: null,
+    releaseVersion: null,
+  );
+
+  static final extension_methods = ExperimentalFeature(
+    index: 5,
     enableString: EnableString.extension_methods,
     isEnabledByDefault: IsEnabledByDefault.extension_methods,
     isExpired: IsExpired.extension_methods,
@@ -134,7 +153,7 @@
   );
 
   static final extension_types = ExperimentalFeature(
-    index: 5,
+    index: 6,
     enableString: EnableString.extension_types,
     isEnabledByDefault: IsEnabledByDefault.extension_types,
     isExpired: IsExpired.extension_types,
@@ -144,7 +163,7 @@
   );
 
   static final generic_metadata = ExperimentalFeature(
-    index: 6,
+    index: 7,
     enableString: EnableString.generic_metadata,
     isEnabledByDefault: IsEnabledByDefault.generic_metadata,
     isExpired: IsExpired.generic_metadata,
@@ -154,8 +173,18 @@
     releaseVersion: Version.parse('2.14.0'),
   );
 
+  static final named_arguments_anywhere = ExperimentalFeature(
+    index: 8,
+    enableString: EnableString.named_arguments_anywhere,
+    isEnabledByDefault: IsEnabledByDefault.named_arguments_anywhere,
+    isExpired: IsExpired.named_arguments_anywhere,
+    documentation: 'Named Arguments Anywhere',
+    experimentalReleaseVersion: null,
+    releaseVersion: null,
+  );
+
   static final non_nullable = ExperimentalFeature(
-    index: 7,
+    index: 9,
     enableString: EnableString.non_nullable,
     isEnabledByDefault: IsEnabledByDefault.non_nullable,
     isExpired: IsExpired.non_nullable,
@@ -165,7 +194,7 @@
   );
 
   static final nonfunction_type_aliases = ExperimentalFeature(
-    index: 8,
+    index: 10,
     enableString: EnableString.nonfunction_type_aliases,
     isEnabledByDefault: IsEnabledByDefault.nonfunction_type_aliases,
     isExpired: IsExpired.nonfunction_type_aliases,
@@ -175,7 +204,7 @@
   );
 
   static final set_literals = ExperimentalFeature(
-    index: 9,
+    index: 11,
     enableString: EnableString.set_literals,
     isEnabledByDefault: IsEnabledByDefault.set_literals,
     isExpired: IsExpired.set_literals,
@@ -185,7 +214,7 @@
   );
 
   static final spread_collections = ExperimentalFeature(
-    index: 10,
+    index: 12,
     enableString: EnableString.spread_collections,
     isEnabledByDefault: IsEnabledByDefault.spread_collections,
     isExpired: IsExpired.spread_collections,
@@ -195,7 +224,7 @@
   );
 
   static final test_experiment = ExperimentalFeature(
-    index: 11,
+    index: 13,
     enableString: EnableString.test_experiment,
     isEnabledByDefault: IsEnabledByDefault.test_experiment,
     isExpired: IsExpired.test_experiment,
@@ -206,7 +235,7 @@
   );
 
   static final triple_shift = ExperimentalFeature(
-    index: 12,
+    index: 14,
     enableString: EnableString.triple_shift,
     isEnabledByDefault: IsEnabledByDefault.triple_shift,
     isExpired: IsExpired.triple_shift,
@@ -216,7 +245,7 @@
   );
 
   static final value_class = ExperimentalFeature(
-    index: 13,
+    index: 15,
     enableString: EnableString.value_class,
     isEnabledByDefault: IsEnabledByDefault.value_class,
     isExpired: IsExpired.value_class,
@@ -226,7 +255,7 @@
   );
 
   static final variance = ExperimentalFeature(
-    index: 14,
+    index: 16,
     enableString: EnableString.variance,
     isEnabledByDefault: IsEnabledByDefault.variance,
     isExpired: IsExpired.variance,
@@ -251,6 +280,9 @@
   /// Default state of the experiment "control-flow-collections"
   static const bool control_flow_collections = true;
 
+  /// Default state of the experiment "enhanced-enums"
+  static const bool enhanced_enums = false;
+
   /// Default state of the experiment "extension-methods"
   static const bool extension_methods = true;
 
@@ -260,6 +292,9 @@
   /// Default state of the experiment "generic-metadata"
   static const bool generic_metadata = true;
 
+  /// Default state of the experiment "named-arguments-anywhere"
+  static const bool named_arguments_anywhere = false;
+
   /// Default state of the experiment "non-nullable"
   static const bool non_nullable = true;
 
@@ -301,6 +336,9 @@
   /// Expiration status of the experiment "control-flow-collections"
   static const bool control_flow_collections = true;
 
+  /// Expiration status of the experiment "enhanced-enums"
+  static const bool enhanced_enums = false;
+
   /// Expiration status of the experiment "extension-methods"
   static const bool extension_methods = false;
 
@@ -310,6 +348,9 @@
   /// Expiration status of the experiment "generic-metadata"
   static const bool generic_metadata = false;
 
+  /// Expiration status of the experiment "named-arguments-anywhere"
+  static const bool named_arguments_anywhere = false;
+
   /// Expiration status of the experiment "non-nullable"
   static const bool non_nullable = false;
 
@@ -351,6 +392,9 @@
   bool get control_flow_collections =>
       isEnabled(ExperimentalFeatures.control_flow_collections);
 
+  /// Current state for the flag "enhanced-enums"
+  bool get enhanced_enums => isEnabled(ExperimentalFeatures.enhanced_enums);
+
   /// Current state for the flag "extension-methods"
   bool get extension_methods =>
       isEnabled(ExperimentalFeatures.extension_methods);
@@ -361,6 +405,10 @@
   /// Current state for the flag "generic-metadata"
   bool get generic_metadata => isEnabled(ExperimentalFeatures.generic_metadata);
 
+  /// Current state for the flag "named-arguments-anywhere"
+  bool get named_arguments_anywhere =>
+      isEnabled(ExperimentalFeatures.named_arguments_anywhere);
+
   /// Current state for the flag "non-nullable"
   bool get non_nullable => isEnabled(ExperimentalFeatures.non_nullable);
 
diff --git a/pkg/analyzer/lib/src/dart/constant/value.dart b/pkg/analyzer/lib/src/dart/constant/value.dart
index 6d3ec97..7f85d1e 100644
--- a/pkg/analyzer/lib/src/dart/constant/value.dart
+++ b/pkg/analyzer/lib/src/dart/constant/value.dart
@@ -184,7 +184,7 @@
   Map<String, DartObjectImpl>? get fields => _state.fields;
 
   @override
-  int get hashCode => Object.hash(type.hashCode, _state.hashCode);
+  int get hashCode => Object.hash(type, _state);
 
   @override
   bool get hasKnownValue => !_state.isUnknown;
diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
index 1be5afd..063ff95 100644
--- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
+++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
@@ -884,7 +884,7 @@
 
   factory Name(Uri? libraryUri, String name) {
     if (name.startsWith('_')) {
-      var hashCode = Object.hash(libraryUri.hashCode, name.hashCode);
+      var hashCode = Object.hash(libraryUri, name);
       return Name._internal(libraryUri, name, false, hashCode);
     } else {
       return Name._internal(null, name, true, name.hashCode);
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 95ab07b..4951088 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -26,6 +26,7 @@
         messageMissingAssignableSelector,
         messageNativeClauseShouldBeAnnotation,
         messageOperatorWithTypeParameters,
+        messagePositionalAfterNamedArgument,
         templateDuplicateLabelInSwitchStatement,
         templateExpectedButGot,
         templateExpectedIdentifier,
@@ -577,6 +578,18 @@
     var expressions = popTypedList2<Expression>(count);
     ArgumentList arguments =
         ast.argumentList(leftParenthesis, expressions, rightParenthesis);
+
+    bool hasSeenNamedArgument = false;
+    for (Expression expression in expressions) {
+      if (expression is NamedExpression) {
+        hasSeenNamedArgument = true;
+      } else if (hasSeenNamedArgument) {
+        // Positional argument after named argument.
+        handleRecoverableError(messagePositionalAfterNamedArgument,
+            expression.beginToken, expression.endToken);
+      }
+    }
+
     push(ast.methodInvocation(
         null, null, _tmpSimpleIdentifier(), null, arguments));
   }
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
index ca19764..82414c9 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -15,9 +15,11 @@
   constantUpdate2018,
   constructorTearoffs,
   controlFlowCollections,
+  enhancedEnums,
   extensionMethods,
   extensionTypes,
   genericMetadata,
+  namedArgumentsAnywhere,
   nonNullable,
   nonfunctionTypeAliases,
   setLiterals,
@@ -34,9 +36,11 @@
 const Version enableConstantUpdate2018Version = const Version(2, 0);
 const Version enableConstructorTearoffsVersion = const Version(2, 15);
 const Version enableControlFlowCollectionsVersion = const Version(2, 0);
+const Version enableEnhancedEnumsVersion = const Version(2, 15);
 const Version enableExtensionMethodsVersion = const Version(2, 6);
 const Version enableExtensionTypesVersion = const Version(2, 15);
 const Version enableGenericMetadataVersion = const Version(2, 14);
+const Version enableNamedArgumentsAnywhereVersion = const Version(2, 15);
 const Version enableNonNullableVersion = const Version(2, 12);
 const Version enableNonfunctionTypeAliasesVersion = const Version(2, 13);
 const Version enableSetLiteralsVersion = const Version(2, 0);
@@ -58,12 +62,16 @@
       return ExperimentalFlag.constructorTearoffs;
     case "control-flow-collections":
       return ExperimentalFlag.controlFlowCollections;
+    case "enhanced-enums":
+      return ExperimentalFlag.enhancedEnums;
     case "extension-methods":
       return ExperimentalFlag.extensionMethods;
     case "extension-types":
       return ExperimentalFlag.extensionTypes;
     case "generic-metadata":
       return ExperimentalFlag.genericMetadata;
+    case "named-arguments-anywhere":
+      return ExperimentalFlag.namedArgumentsAnywhere;
     case "non-nullable":
       return ExperimentalFlag.nonNullable;
     case "nonfunction-type-aliases":
@@ -90,9 +98,11 @@
   ExperimentalFlag.constantUpdate2018: true,
   ExperimentalFlag.constructorTearoffs: true,
   ExperimentalFlag.controlFlowCollections: true,
+  ExperimentalFlag.enhancedEnums: false,
   ExperimentalFlag.extensionMethods: true,
   ExperimentalFlag.extensionTypes: false,
   ExperimentalFlag.genericMetadata: true,
+  ExperimentalFlag.namedArgumentsAnywhere: false,
   ExperimentalFlag.nonNullable: true,
   ExperimentalFlag.nonfunctionTypeAliases: true,
   ExperimentalFlag.setLiterals: true,
@@ -109,9 +119,11 @@
   ExperimentalFlag.constantUpdate2018: true,
   ExperimentalFlag.constructorTearoffs: false,
   ExperimentalFlag.controlFlowCollections: true,
+  ExperimentalFlag.enhancedEnums: false,
   ExperimentalFlag.extensionMethods: false,
   ExperimentalFlag.extensionTypes: false,
   ExperimentalFlag.genericMetadata: false,
+  ExperimentalFlag.namedArgumentsAnywhere: false,
   ExperimentalFlag.nonNullable: false,
   ExperimentalFlag.nonfunctionTypeAliases: false,
   ExperimentalFlag.setLiterals: true,
@@ -128,9 +140,11 @@
   ExperimentalFlag.constantUpdate2018: const Version(2, 0),
   ExperimentalFlag.constructorTearoffs: const Version(2, 15),
   ExperimentalFlag.controlFlowCollections: const Version(2, 0),
+  ExperimentalFlag.enhancedEnums: const Version(2, 15),
   ExperimentalFlag.extensionMethods: const Version(2, 6),
   ExperimentalFlag.extensionTypes: const Version(2, 15),
   ExperimentalFlag.genericMetadata: const Version(2, 14),
+  ExperimentalFlag.namedArgumentsAnywhere: const Version(2, 15),
   ExperimentalFlag.nonNullable: const Version(2, 12),
   ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 13),
   ExperimentalFlag.setLiterals: const Version(2, 0),
@@ -147,9 +161,11 @@
   ExperimentalFlag.constantUpdate2018: const Version(2, 0),
   ExperimentalFlag.constructorTearoffs: const Version(2, 15),
   ExperimentalFlag.controlFlowCollections: const Version(2, 0),
+  ExperimentalFlag.enhancedEnums: const Version(2, 15),
   ExperimentalFlag.extensionMethods: const Version(2, 6),
   ExperimentalFlag.extensionTypes: const Version(2, 15),
   ExperimentalFlag.genericMetadata: const Version(2, 14),
+  ExperimentalFlag.namedArgumentsAnywhere: const Version(2, 15),
   ExperimentalFlag.nonNullable: const Version(2, 10),
   ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 13),
   ExperimentalFlag.setLiterals: const Version(2, 0),
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
index c15e3f8..fbbb63a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
@@ -1,17 +1,5 @@
 Problems reported:
 
-parser/error_recovery/bracket_mismatch_01:25:11: Place positional arguments before named arguments.
-          D(),
-          ^
-
-parser/error_recovery/bracket_mismatch_01:26:11: Place positional arguments before named arguments.
-          D(),
-          ^
-
-parser/error_recovery/bracket_mismatch_01:27:9: Place positional arguments before named arguments.
-        ]),
-        ^
-
 parser/error_recovery/bracket_mismatch_01:27:9: Expected an identifier, but got ']'.
         ]),
         ^
@@ -186,19 +174,16 @@
                     endArguments(0, (, ))
                     handleSend(D, ,)
                     handleNamedArgument(:)
-                    handleRecoverableError(PositionalAfterNamedArgument, D, D)
                     handleIdentifier(D, expression)
                     handleNoTypeArguments(()
                     beginArguments(()
                     endArguments(0, (, ))
                     handleSend(D, ,)
-                    handleRecoverableError(PositionalAfterNamedArgument, D, D)
                     handleIdentifier(D, expression)
                     handleNoTypeArguments(()
                     beginArguments(()
                     endArguments(0, (, ))
                     handleSend(D, ,)
-                    handleRecoverableError(PositionalAfterNamedArgument, ], ])
                     handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ']'., Try inserting an identifier before ']'., {lexeme: ]}], ], ])
                     handleIdentifier(, expression)
                     handleNoTypeArguments(])
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
index ea9535d..594b6db 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
@@ -414,8 +414,6 @@
                                                                                         listener: endArguments(0, (, ))
                                                                                   listener: handleSend(D, ,)
                                                                       listener: handleNamedArgument(:)
-                                                                      reportRecoverableError(D, PositionalAfterNamedArgument)
-                                                                        listener: handleRecoverableError(PositionalAfterNamedArgument, D, D)
                                                                       parseExpression(,)
                                                                         parsePrecedenceExpression(,, 1, true)
                                                                           parseUnaryExpression(,, true)
@@ -433,8 +431,6 @@
                                                                                         listener: beginArguments(()
                                                                                         listener: endArguments(0, (, ))
                                                                                   listener: handleSend(D, ,)
-                                                                      reportRecoverableError(D, PositionalAfterNamedArgument)
-                                                                        listener: handleRecoverableError(PositionalAfterNamedArgument, D, D)
                                                                       parseExpression(,)
                                                                         parsePrecedenceExpression(,, 1, true)
                                                                           parseUnaryExpression(,, true)
@@ -452,8 +448,6 @@
                                                                                         listener: beginArguments(()
                                                                                         listener: endArguments(0, (, ))
                                                                                   listener: handleSend(D, ,)
-                                                                      reportRecoverableError(], PositionalAfterNamedArgument)
-                                                                        listener: handleRecoverableError(PositionalAfterNamedArgument, ], ])
                                                                       parseExpression(,)
                                                                         parsePrecedenceExpression(,, 1, true)
                                                                           parseUnaryExpression(,, true)
diff --git a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.strong.expect b/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.strong.expect
index c92d158..2f58211 100644
--- a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.strong.expect
+++ b/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.strong.expect
@@ -1,177 +1,4 @@
 library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:17:21: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     method2(foo: 1, 2); // This call.
-//                     ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:27:16: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   foo(1, z: 2, 3);
-//                ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:28:13: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   foo(z: 1, 2, 3);
-//             ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:28:16: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   foo(z: 1, 2, 3);
-//                ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:32:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A.foo(1, z: 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:33:19: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A.foo(z: 1, 2, 3);
-//                   ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:33:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A.foo(z: 1, 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:35:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B.foo(1, z: 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:36:19: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B.foo(z: 1, 2, 3);
-//                   ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:36:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B.foo(z: 1, 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:40:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:41:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:41:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:43:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:44:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:44:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:48:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   d(1, z: 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:49:11: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   d(z: 1, 2, 3);
-//           ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:49:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   d(z: 1, 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:53:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   f(1, z: 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:54:11: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   f(z: 1, 2, 3);
-//           ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:54:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   f(z: 1, 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:58:23: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.property(1, z: 2, 3);
-//                       ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:59:20: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.property(z: 1, 2, 3);
-//                    ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:59:23: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.property(z: 1, 2, 3);
-//                       ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:63:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.bar(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:64:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.bar(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:64:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.bar(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:68:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   local(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:69:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   local(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:69:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   local(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:77:24: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     super.bar(1, z: 2, 3);
-//                        ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:78:21: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     super.bar(z: 1, 2, 3);
-//                     ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:78:24: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     super.bar(z: 1, 2, 3);
-//                        ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.strong.transformed.expect b/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.strong.transformed.expect
index 82faf76..4cfee0f 100644
--- a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.strong.transformed.expect
@@ -1,177 +1,4 @@
 library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:17:21: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     method2(foo: 1, 2); // This call.
-//                     ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:27:16: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   foo(1, z: 2, 3);
-//                ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:28:13: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   foo(z: 1, 2, 3);
-//             ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:28:16: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   foo(z: 1, 2, 3);
-//                ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:32:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A.foo(1, z: 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:33:19: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A.foo(z: 1, 2, 3);
-//                   ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:33:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A.foo(z: 1, 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:35:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B.foo(1, z: 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:36:19: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B.foo(z: 1, 2, 3);
-//                   ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:36:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B.foo(z: 1, 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:40:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:41:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:41:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:43:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:44:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:44:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:48:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   d(1, z: 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:49:11: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   d(z: 1, 2, 3);
-//           ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:49:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   d(z: 1, 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:53:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   f(1, z: 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:54:11: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   f(z: 1, 2, 3);
-//           ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:54:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   f(z: 1, 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:58:23: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.property(1, z: 2, 3);
-//                       ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:59:20: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.property(z: 1, 2, 3);
-//                    ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:59:23: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.property(z: 1, 2, 3);
-//                       ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:63:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.bar(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:64:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.bar(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:64:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.bar(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:68:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   local(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:69:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   local(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:69:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   local(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:77:24: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     super.bar(1, z: 2, 3);
-//                        ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:78:21: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     super.bar(z: 1, 2, 3);
-//                     ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:78:24: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     super.bar(z: 1, 2, 3);
-//                        ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.weak.expect b/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.weak.expect
index c92d158..2f58211 100644
--- a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.weak.expect
+++ b/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.weak.expect
@@ -1,177 +1,4 @@
 library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:17:21: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     method2(foo: 1, 2); // This call.
-//                     ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:27:16: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   foo(1, z: 2, 3);
-//                ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:28:13: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   foo(z: 1, 2, 3);
-//             ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:28:16: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   foo(z: 1, 2, 3);
-//                ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:32:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A.foo(1, z: 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:33:19: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A.foo(z: 1, 2, 3);
-//                   ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:33:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A.foo(z: 1, 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:35:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B.foo(1, z: 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:36:19: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B.foo(z: 1, 2, 3);
-//                   ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:36:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B.foo(z: 1, 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:40:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:41:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:41:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:43:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:44:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:44:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:48:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   d(1, z: 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:49:11: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   d(z: 1, 2, 3);
-//           ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:49:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   d(z: 1, 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:53:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   f(1, z: 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:54:11: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   f(z: 1, 2, 3);
-//           ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:54:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   f(z: 1, 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:58:23: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.property(1, z: 2, 3);
-//                       ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:59:20: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.property(z: 1, 2, 3);
-//                    ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:59:23: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.property(z: 1, 2, 3);
-//                       ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:63:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.bar(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:64:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.bar(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:64:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.bar(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:68:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   local(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:69:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   local(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:69:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   local(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:77:24: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     super.bar(1, z: 2, 3);
-//                        ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:78:21: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     super.bar(z: 1, 2, 3);
-//                     ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:78:24: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     super.bar(z: 1, 2, 3);
-//                        ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.weak.transformed.expect b/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.weak.transformed.expect
index 82faf76..4cfee0f 100644
--- a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.weak.transformed.expect
@@ -1,177 +1,4 @@
 library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:17:21: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     method2(foo: 1, 2); // This call.
-//                     ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:27:16: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   foo(1, z: 2, 3);
-//                ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:28:13: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   foo(z: 1, 2, 3);
-//             ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:28:16: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   foo(z: 1, 2, 3);
-//                ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:32:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A.foo(1, z: 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:33:19: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A.foo(z: 1, 2, 3);
-//                   ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:33:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A.foo(z: 1, 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:35:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B.foo(1, z: 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:36:19: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B.foo(z: 1, 2, 3);
-//                   ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:36:22: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B.foo(z: 1, 2, 3);
-//                      ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:40:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:41:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:41:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new A(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:43:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:44:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:44:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   new B(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:48:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   d(1, z: 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:49:11: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   d(z: 1, 2, 3);
-//           ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:49:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   d(z: 1, 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:53:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   f(1, z: 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:54:11: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   f(z: 1, 2, 3);
-//           ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:54:14: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   f(z: 1, 2, 3);
-//              ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:58:23: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.property(1, z: 2, 3);
-//                       ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:59:20: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.property(z: 1, 2, 3);
-//                    ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:59:23: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.property(z: 1, 2, 3);
-//                       ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:63:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.bar(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:64:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.bar(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:64:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   a.bar(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:68:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   local(1, z: 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:69:15: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   local(z: 1, 2, 3);
-//               ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:69:18: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//   local(z: 1, 2, 3);
-//                  ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:77:24: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     super.bar(1, z: 2, 3);
-//                        ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:78:21: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     super.bar(z: 1, 2, 3);
-//                     ^
-//
-// pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart:78:24: Error: Place positional arguments before named arguments.
-// Try moving the positional argument before the named arguments, or add a name to the argument.
-//     super.bar(z: 1, 2, 3);
-//                        ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/nnbd_migration/lib/fix_reason_target.dart b/pkg/nnbd_migration/lib/fix_reason_target.dart
index c9c876b..43d1b3f 100644
--- a/pkg/nnbd_migration/lib/fix_reason_target.dart
+++ b/pkg/nnbd_migration/lib/fix_reason_target.dart
@@ -51,7 +51,7 @@
       : super(inner);
 
   @override
-  int get hashCode => Object.hash(2, inner.hashCode, name.hashCode);
+  int get hashCode => Object.hash(2, inner, name);
 
   @override
   bool operator ==(Object other) =>
@@ -80,7 +80,7 @@
       : super(inner);
 
   @override
-  int get hashCode => Object.hash(1, inner.hashCode, index);
+  int get hashCode => Object.hash(1, inner, index);
 
   @override
   bool operator ==(Object other) =>
@@ -98,7 +98,7 @@
   _FixReasonTarget_ReturnType(FixReasonTarget inner) : super(inner);
 
   @override
-  int get hashCode => Object.hash(3, inner.hashCode);
+  int get hashCode => Object.hash(3, inner);
 
   @override
   bool operator ==(Object other) =>
@@ -131,7 +131,7 @@
       : super(inner);
 
   @override
-  int get hashCode => Object.hash(5, inner.hashCode, index);
+  int get hashCode => Object.hash(5, inner, index);
 
   @override
   bool operator ==(Object other) =>
@@ -162,7 +162,7 @@
   _FixReasonTarget_YieldedType(FixReasonTarget inner) : super(inner);
 
   @override
-  int get hashCode => Object.hash(4, inner.hashCode);
+  int get hashCode => Object.hash(4, inner);
 
   @override
   bool operator ==(Object other) =>
diff --git a/pkg/nnbd_migration/lib/src/front_end/migration_info.dart b/pkg/nnbd_migration/lib/src/front_end/migration_info.dart
index 02ea5e1..bde8b46 100644
--- a/pkg/nnbd_migration/lib/src/front_end/migration_info.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/migration_info.dart
@@ -142,7 +142,7 @@
       : super(offset, line, length);
 
   @override
-  int get hashCode => Object.hash(filePath.hashCode, offset, length);
+  int get hashCode => Object.hash(filePath, offset, length);
 
   @override
   bool operator ==(Object other) {
diff --git a/runtime/bin/ffi_test/ffi_test_functions_generated.cc b/runtime/bin/ffi_test/ffi_test_functions_generated.cc
index 246c329..647c2ae 100644
--- a/runtime/bin/ffi_test/ffi_test_functions_generated.cc
+++ b/runtime/bin/ffi_test/ffi_test_functions_generated.cc
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 //
 // This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
 
 #include <stddef.h>
 #include <stdlib.h>
diff --git a/sdk/lib/convert/convert.dart b/sdk/lib/convert/convert.dart
index df0363d..de5aa6f 100644
--- a/sdk/lib/convert/convert.dart
+++ b/sdk/lib/convert/convert.dart
@@ -41,7 +41,7 @@
 ///
 /// stream.transform(utf8.decoder)
 ///       .transform(const LineSplitter())
-///       .listen((line) {
+///       .forEach((line) {
 ///         if (showLineNumbers) {
 ///           stdout.write('${lineNumber++} ');
 ///         }
diff --git a/sdk/lib/core/bigint.dart b/sdk/lib/core/bigint.dart
index 6683bfc..63f9198 100644
--- a/sdk/lib/core/bigint.dart
+++ b/sdk/lib/core/bigint.dart
@@ -4,10 +4,18 @@
 
 part of dart.core;
 
-/// An arbitrarily large integer.
+/// An arbitrarily large integer value.
+///
+/// Big integers are signed and can have an arbitrary number of
+/// significant digits, only limited by memory.
 abstract class BigInt implements Comparable<BigInt> {
+  /// A big integer with the numerical value 0.
   external static BigInt get zero;
+
+  /// A big integer with the numerical value 1.
   external static BigInt get one;
+
+  /// A big integer with the numerical value 2.
   external static BigInt get two;
 
   /// Parses [source] as a, possibly signed, integer literal and returns its
@@ -54,19 +62,31 @@
   /// for zero, which is its own negation.
   BigInt operator -();
 
-  /// Addition operator.
+  /// Adds [other] to this big integer.
+  ///
+  /// The result is again a big integer.
   BigInt operator +(BigInt other);
 
-  /// Subtraction operator.
+  /// Subtracts [other] from this big integer.
+  ///
+  /// The result is again a big integer.
   BigInt operator -(BigInt other);
 
-  /// Multiplication operator.
+  /// Multiplies [other] by this big integer.
+  ///
+  /// The result is again a big integer.
   BigInt operator *(BigInt other);
 
-  /// Division operator.
+  /// Double division operator.
+  ///
+  /// Matching the similar operator on [int],
+  /// this operation first performs [toDouble] on both this big integer
+  /// and [other], then does [double.operator/] on those values and
+  /// returns the result.
+  /// The initial [toDouble] conversion may lose precision.
   double operator /(BigInt other);
 
-  /// Truncating division operator.
+  /// Truncating integer division operator.
   ///
   /// Performs a truncating integer division, where the remainder is discarded.
   ///
@@ -162,16 +182,16 @@
   /// This maps any integer `x` to `-x - 1`.
   BigInt operator ~();
 
-  /// Relational less than operator.
+  /// Whether this big integer is numerically smaller than [other].
   bool operator <(BigInt other);
 
-  /// Relational less than or equal operator.
+  /// Whether [other] is numerically greater than this big integer.
   bool operator <=(BigInt other);
 
-  /// Relational greater than operator.
+  /// Whether this big integer is numerically greater than [other].
   bool operator >(BigInt other);
 
-  /// Relational greater than or equal operator.
+  /// Whether [other] is numerically smaller than this big integer.
   bool operator >=(BigInt other);
 
   /// Compares this to `other`.
diff --git a/tests/ffi/function_callbacks_structs_by_value_generated_test.dart b/tests/ffi/function_callbacks_structs_by_value_generated_test.dart
index a7c9590..c0521d7 100644
--- a/tests/ffi/function_callbacks_structs_by_value_generated_test.dart
+++ b/tests/ffi/function_callbacks_structs_by_value_generated_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 //
 // This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
 //
 // SharedObjects=ffi_test_functions
 // VMOptions=
@@ -17,8 +18,12 @@
 
 import 'callback_tests_utils.dart';
 
-// Reuse the struct classes.
-import 'function_structs_by_value_generated_test.dart';
+import 'dylib_utils.dart';
+
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 
 void main() {
   testCases.forEach((t) {
diff --git a/tests/ffi/function_callbacks_structs_by_value_test.dart b/tests/ffi/function_callbacks_structs_by_value_test.dart
index be78dc5..f14ce1f 100644
--- a/tests/ffi/function_callbacks_structs_by_value_test.dart
+++ b/tests/ffi/function_callbacks_structs_by_value_test.dart
@@ -11,8 +11,12 @@
 import "package:expect/expect.dart";
 import "package:ffi/ffi.dart";
 
+import 'dylib_utils.dart';
+
 // Reuse the struct classes.
-import 'function_structs_by_value_generated_test.dart';
+import 'function_structs_by_value_generated_compounds.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 
 void main() {
   for (int i = 0; i < 10; i++) {
diff --git a/tests/ffi/function_structs_by_value_generated_compounds.dart b/tests/ffi/function_structs_by_value_generated_compounds.dart
new file mode 100644
index 0000000..2c411cf
--- /dev/null
+++ b/tests/ffi/function_structs_by_value_generated_compounds.dart
@@ -0,0 +1,1210 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
+
+import 'dart:ffi';
+
+class Struct1ByteInt extends Struct {
+  @Int8()
+  external int a0;
+
+  String toString() => "(${a0})";
+}
+
+class Struct3BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  external int a0;
+
+  @Uint8()
+  external int a1;
+
+  @Uint8()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct3BytesInt2ByteAligned extends Struct {
+  @Int16()
+  external int a0;
+
+  @Int8()
+  external int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct4BytesHomogeneousInt16 extends Struct {
+  @Int16()
+  external int a0;
+
+  @Int16()
+  external int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct4BytesFloat extends Struct {
+  @Float()
+  external double a0;
+
+  String toString() => "(${a0})";
+}
+
+class Struct7BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  external int a0;
+
+  @Uint8()
+  external int a1;
+
+  @Uint8()
+  external int a2;
+
+  @Uint8()
+  external int a3;
+
+  @Uint8()
+  external int a4;
+
+  @Uint8()
+  external int a5;
+
+  @Uint8()
+  external int a6;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
+}
+
+class Struct7BytesInt4ByteAligned extends Struct {
+  @Int32()
+  external int a0;
+
+  @Int16()
+  external int a1;
+
+  @Int8()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct8BytesInt extends Struct {
+  @Int16()
+  external int a0;
+
+  @Int16()
+  external int a1;
+
+  @Int32()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct8BytesHomogeneousFloat extends Struct {
+  @Float()
+  external double a0;
+
+  @Float()
+  external double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesFloat extends Struct {
+  @Double()
+  external double a0;
+
+  String toString() => "(${a0})";
+}
+
+class Struct8BytesMixed extends Struct {
+  @Float()
+  external double a0;
+
+  @Int16()
+  external int a1;
+
+  @Int16()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct9BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  external int a0;
+
+  @Uint8()
+  external int a1;
+
+  @Uint8()
+  external int a2;
+
+  @Uint8()
+  external int a3;
+
+  @Uint8()
+  external int a4;
+
+  @Uint8()
+  external int a5;
+
+  @Uint8()
+  external int a6;
+
+  @Uint8()
+  external int a7;
+
+  @Uint8()
+  external int a8;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})";
+}
+
+class Struct9BytesInt4Or8ByteAligned extends Struct {
+  @Int64()
+  external int a0;
+
+  @Int8()
+  external int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct12BytesHomogeneousFloat extends Struct {
+  @Float()
+  external double a0;
+
+  @Float()
+  external double a1;
+
+  @Float()
+  external double a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct16BytesHomogeneousFloat extends Struct {
+  @Float()
+  external double a0;
+
+  @Float()
+  external double a1;
+
+  @Float()
+  external double a2;
+
+  @Float()
+  external double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct16BytesMixed extends Struct {
+  @Double()
+  external double a0;
+
+  @Int64()
+  external int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct16BytesMixed2 extends Struct {
+  @Float()
+  external double a0;
+
+  @Float()
+  external double a1;
+
+  @Float()
+  external double a2;
+
+  @Int32()
+  external int a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct17BytesInt extends Struct {
+  @Int64()
+  external int a0;
+
+  @Int64()
+  external int a1;
+
+  @Int8()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct19BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  external int a0;
+
+  @Uint8()
+  external int a1;
+
+  @Uint8()
+  external int a2;
+
+  @Uint8()
+  external int a3;
+
+  @Uint8()
+  external int a4;
+
+  @Uint8()
+  external int a5;
+
+  @Uint8()
+  external int a6;
+
+  @Uint8()
+  external int a7;
+
+  @Uint8()
+  external int a8;
+
+  @Uint8()
+  external int a9;
+
+  @Uint8()
+  external int a10;
+
+  @Uint8()
+  external int a11;
+
+  @Uint8()
+  external int a12;
+
+  @Uint8()
+  external int a13;
+
+  @Uint8()
+  external int a14;
+
+  @Uint8()
+  external int a15;
+
+  @Uint8()
+  external int a16;
+
+  @Uint8()
+  external int a17;
+
+  @Uint8()
+  external int a18;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18})";
+}
+
+class Struct20BytesHomogeneousInt32 extends Struct {
+  @Int32()
+  external int a0;
+
+  @Int32()
+  external int a1;
+
+  @Int32()
+  external int a2;
+
+  @Int32()
+  external int a3;
+
+  @Int32()
+  external int a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+class Struct20BytesHomogeneousFloat extends Struct {
+  @Float()
+  external double a0;
+
+  @Float()
+  external double a1;
+
+  @Float()
+  external double a2;
+
+  @Float()
+  external double a3;
+
+  @Float()
+  external double a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+class Struct32BytesHomogeneousDouble extends Struct {
+  @Double()
+  external double a0;
+
+  @Double()
+  external double a1;
+
+  @Double()
+  external double a2;
+
+  @Double()
+  external double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct40BytesHomogeneousDouble extends Struct {
+  @Double()
+  external double a0;
+
+  @Double()
+  external double a1;
+
+  @Double()
+  external double a2;
+
+  @Double()
+  external double a3;
+
+  @Double()
+  external double a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+class Struct1024BytesHomogeneousUint64 extends Struct {
+  @Uint64()
+  external int a0;
+
+  @Uint64()
+  external int a1;
+
+  @Uint64()
+  external int a2;
+
+  @Uint64()
+  external int a3;
+
+  @Uint64()
+  external int a4;
+
+  @Uint64()
+  external int a5;
+
+  @Uint64()
+  external int a6;
+
+  @Uint64()
+  external int a7;
+
+  @Uint64()
+  external int a8;
+
+  @Uint64()
+  external int a9;
+
+  @Uint64()
+  external int a10;
+
+  @Uint64()
+  external int a11;
+
+  @Uint64()
+  external int a12;
+
+  @Uint64()
+  external int a13;
+
+  @Uint64()
+  external int a14;
+
+  @Uint64()
+  external int a15;
+
+  @Uint64()
+  external int a16;
+
+  @Uint64()
+  external int a17;
+
+  @Uint64()
+  external int a18;
+
+  @Uint64()
+  external int a19;
+
+  @Uint64()
+  external int a20;
+
+  @Uint64()
+  external int a21;
+
+  @Uint64()
+  external int a22;
+
+  @Uint64()
+  external int a23;
+
+  @Uint64()
+  external int a24;
+
+  @Uint64()
+  external int a25;
+
+  @Uint64()
+  external int a26;
+
+  @Uint64()
+  external int a27;
+
+  @Uint64()
+  external int a28;
+
+  @Uint64()
+  external int a29;
+
+  @Uint64()
+  external int a30;
+
+  @Uint64()
+  external int a31;
+
+  @Uint64()
+  external int a32;
+
+  @Uint64()
+  external int a33;
+
+  @Uint64()
+  external int a34;
+
+  @Uint64()
+  external int a35;
+
+  @Uint64()
+  external int a36;
+
+  @Uint64()
+  external int a37;
+
+  @Uint64()
+  external int a38;
+
+  @Uint64()
+  external int a39;
+
+  @Uint64()
+  external int a40;
+
+  @Uint64()
+  external int a41;
+
+  @Uint64()
+  external int a42;
+
+  @Uint64()
+  external int a43;
+
+  @Uint64()
+  external int a44;
+
+  @Uint64()
+  external int a45;
+
+  @Uint64()
+  external int a46;
+
+  @Uint64()
+  external int a47;
+
+  @Uint64()
+  external int a48;
+
+  @Uint64()
+  external int a49;
+
+  @Uint64()
+  external int a50;
+
+  @Uint64()
+  external int a51;
+
+  @Uint64()
+  external int a52;
+
+  @Uint64()
+  external int a53;
+
+  @Uint64()
+  external int a54;
+
+  @Uint64()
+  external int a55;
+
+  @Uint64()
+  external int a56;
+
+  @Uint64()
+  external int a57;
+
+  @Uint64()
+  external int a58;
+
+  @Uint64()
+  external int a59;
+
+  @Uint64()
+  external int a60;
+
+  @Uint64()
+  external int a61;
+
+  @Uint64()
+  external int a62;
+
+  @Uint64()
+  external int a63;
+
+  @Uint64()
+  external int a64;
+
+  @Uint64()
+  external int a65;
+
+  @Uint64()
+  external int a66;
+
+  @Uint64()
+  external int a67;
+
+  @Uint64()
+  external int a68;
+
+  @Uint64()
+  external int a69;
+
+  @Uint64()
+  external int a70;
+
+  @Uint64()
+  external int a71;
+
+  @Uint64()
+  external int a72;
+
+  @Uint64()
+  external int a73;
+
+  @Uint64()
+  external int a74;
+
+  @Uint64()
+  external int a75;
+
+  @Uint64()
+  external int a76;
+
+  @Uint64()
+  external int a77;
+
+  @Uint64()
+  external int a78;
+
+  @Uint64()
+  external int a79;
+
+  @Uint64()
+  external int a80;
+
+  @Uint64()
+  external int a81;
+
+  @Uint64()
+  external int a82;
+
+  @Uint64()
+  external int a83;
+
+  @Uint64()
+  external int a84;
+
+  @Uint64()
+  external int a85;
+
+  @Uint64()
+  external int a86;
+
+  @Uint64()
+  external int a87;
+
+  @Uint64()
+  external int a88;
+
+  @Uint64()
+  external int a89;
+
+  @Uint64()
+  external int a90;
+
+  @Uint64()
+  external int a91;
+
+  @Uint64()
+  external int a92;
+
+  @Uint64()
+  external int a93;
+
+  @Uint64()
+  external int a94;
+
+  @Uint64()
+  external int a95;
+
+  @Uint64()
+  external int a96;
+
+  @Uint64()
+  external int a97;
+
+  @Uint64()
+  external int a98;
+
+  @Uint64()
+  external int a99;
+
+  @Uint64()
+  external int a100;
+
+  @Uint64()
+  external int a101;
+
+  @Uint64()
+  external int a102;
+
+  @Uint64()
+  external int a103;
+
+  @Uint64()
+  external int a104;
+
+  @Uint64()
+  external int a105;
+
+  @Uint64()
+  external int a106;
+
+  @Uint64()
+  external int a107;
+
+  @Uint64()
+  external int a108;
+
+  @Uint64()
+  external int a109;
+
+  @Uint64()
+  external int a110;
+
+  @Uint64()
+  external int a111;
+
+  @Uint64()
+  external int a112;
+
+  @Uint64()
+  external int a113;
+
+  @Uint64()
+  external int a114;
+
+  @Uint64()
+  external int a115;
+
+  @Uint64()
+  external int a116;
+
+  @Uint64()
+  external int a117;
+
+  @Uint64()
+  external int a118;
+
+  @Uint64()
+  external int a119;
+
+  @Uint64()
+  external int a120;
+
+  @Uint64()
+  external int a121;
+
+  @Uint64()
+  external int a122;
+
+  @Uint64()
+  external int a123;
+
+  @Uint64()
+  external int a124;
+
+  @Uint64()
+  external int a125;
+
+  @Uint64()
+  external int a126;
+
+  @Uint64()
+  external int a127;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18}, ${a19}, ${a20}, ${a21}, ${a22}, ${a23}, ${a24}, ${a25}, ${a26}, ${a27}, ${a28}, ${a29}, ${a30}, ${a31}, ${a32}, ${a33}, ${a34}, ${a35}, ${a36}, ${a37}, ${a38}, ${a39}, ${a40}, ${a41}, ${a42}, ${a43}, ${a44}, ${a45}, ${a46}, ${a47}, ${a48}, ${a49}, ${a50}, ${a51}, ${a52}, ${a53}, ${a54}, ${a55}, ${a56}, ${a57}, ${a58}, ${a59}, ${a60}, ${a61}, ${a62}, ${a63}, ${a64}, ${a65}, ${a66}, ${a67}, ${a68}, ${a69}, ${a70}, ${a71}, ${a72}, ${a73}, ${a74}, ${a75}, ${a76}, ${a77}, ${a78}, ${a79}, ${a80}, ${a81}, ${a82}, ${a83}, ${a84}, ${a85}, ${a86}, ${a87}, ${a88}, ${a89}, ${a90}, ${a91}, ${a92}, ${a93}, ${a94}, ${a95}, ${a96}, ${a97}, ${a98}, ${a99}, ${a100}, ${a101}, ${a102}, ${a103}, ${a104}, ${a105}, ${a106}, ${a107}, ${a108}, ${a109}, ${a110}, ${a111}, ${a112}, ${a113}, ${a114}, ${a115}, ${a116}, ${a117}, ${a118}, ${a119}, ${a120}, ${a121}, ${a122}, ${a123}, ${a124}, ${a125}, ${a126}, ${a127})";
+}
+
+class StructAlignmentInt16 extends Struct {
+  @Int8()
+  external int a0;
+
+  @Int16()
+  external int a1;
+
+  @Int8()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class StructAlignmentInt32 extends Struct {
+  @Int8()
+  external int a0;
+
+  @Int32()
+  external int a1;
+
+  @Int8()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class StructAlignmentInt64 extends Struct {
+  @Int8()
+  external int a0;
+
+  @Int64()
+  external int a1;
+
+  @Int8()
+  external int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct8BytesNestedInt extends Struct {
+  external Struct4BytesHomogeneousInt16 a0;
+
+  external Struct4BytesHomogeneousInt16 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesNestedFloat extends Struct {
+  external Struct4BytesFloat a0;
+
+  external Struct4BytesFloat a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesNestedFloat2 extends Struct {
+  external Struct4BytesFloat a0;
+
+  @Float()
+  external double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesNestedMixed extends Struct {
+  external Struct4BytesHomogeneousInt16 a0;
+
+  external Struct4BytesFloat a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct16BytesNestedInt extends Struct {
+  external Struct8BytesNestedInt a0;
+
+  external Struct8BytesNestedInt a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct32BytesNestedInt extends Struct {
+  external Struct16BytesNestedInt a0;
+
+  external Struct16BytesNestedInt a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIntStructAlignmentInt16 extends Struct {
+  external StructAlignmentInt16 a0;
+
+  external StructAlignmentInt16 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIntStructAlignmentInt32 extends Struct {
+  external StructAlignmentInt32 a0;
+
+  external StructAlignmentInt32 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIntStructAlignmentInt64 extends Struct {
+  external StructAlignmentInt64 a0;
+
+  external StructAlignmentInt64 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIrregularBig extends Struct {
+  @Uint16()
+  external int a0;
+
+  external Struct8BytesNestedMixed a1;
+
+  @Uint16()
+  external int a2;
+
+  external Struct8BytesNestedFloat2 a3;
+
+  @Uint16()
+  external int a4;
+
+  external Struct8BytesNestedFloat a5;
+
+  @Uint16()
+  external int a6;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
+}
+
+class StructNestedIrregularBigger extends Struct {
+  external StructNestedIrregularBig a0;
+
+  external Struct8BytesNestedMixed a1;
+
+  @Float()
+  external double a2;
+
+  @Double()
+  external double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class StructNestedIrregularEvenBigger extends Struct {
+  @Uint64()
+  external int a0;
+
+  external StructNestedIrregularBigger a1;
+
+  external StructNestedIrregularBigger a2;
+
+  @Double()
+  external double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct8BytesInlineArrayInt extends Struct {
+  @Array(8)
+  external Array<Uint8> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 8; i0 += 1) a0[i0]]})";
+}
+
+class StructInlineArrayIrregular extends Struct {
+  @Array(2)
+  external Array<Struct3BytesInt2ByteAligned> a0;
+
+  @Uint8()
+  external int a1;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]}, ${a1})";
+}
+
+class StructInlineArray100Bytes extends Struct {
+  @Array(100)
+  external Array<Uint8> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 100; i0 += 1) a0[i0]]})";
+}
+
+class StructInlineArrayBig extends Struct {
+  @Uint32()
+  external int a0;
+
+  @Uint32()
+  external int a1;
+
+  @Array(4000)
+  external Array<Uint8> a2;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${[for (var i0 = 0; i0 < 4000; i0 += 1) a2[i0]]})";
+}
+
+class StructStruct16BytesHomogeneousFloat2 extends Struct {
+  external Struct4BytesFloat a0;
+
+  @Array(2)
+  external Array<Struct4BytesFloat> a1;
+
+  @Float()
+  external double a2;
+
+  String toString() =>
+      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
+}
+
+class StructStruct32BytesHomogeneousDouble2 extends Struct {
+  external Struct8BytesFloat a0;
+
+  @Array(2)
+  external Array<Struct8BytesFloat> a1;
+
+  @Double()
+  external double a2;
+
+  String toString() =>
+      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
+}
+
+class StructStruct16BytesMixed3 extends Struct {
+  external Struct4BytesFloat a0;
+
+  @Array(1)
+  external Array<Struct8BytesMixed> a1;
+
+  @Array(2)
+  external Array<Int16> a2;
+
+  String toString() => "(${a0}, ${[
+        for (var i0 = 0; i0 < 1; i0 += 1) a1[i0]
+      ]}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a2[i0]]})";
+}
+
+class Struct8BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array(2, 2, 2)
+  external Array<Array<Array<Uint8>>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [
+            for (var i1 = 0; i1 < 2; i1 += 1)
+              [for (var i2 = 0; i2 < 2; i2 += 1) a0[i0][i1][i2]]
+          ]
+      ]})";
+}
+
+class Struct32BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array(2, 2, 2, 2, 2)
+  external Array<Array<Array<Array<Array<Uint8>>>>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [
+            for (var i1 = 0; i1 < 2; i1 += 1)
+              [
+                for (var i2 = 0; i2 < 2; i2 += 1)
+                  [
+                    for (var i3 = 0; i3 < 2; i3 += 1)
+                      [for (var i4 = 0; i4 < 2; i4 += 1) a0[i0][i1][i2][i3][i4]]
+                  ]
+              ]
+          ]
+      ]})";
+}
+
+class Struct64BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array.multi([2, 2, 2, 2, 2, 2])
+  external Array<Array<Array<Array<Array<Array<Uint8>>>>>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [
+            for (var i1 = 0; i1 < 2; i1 += 1)
+              [
+                for (var i2 = 0; i2 < 2; i2 += 1)
+                  [
+                    for (var i3 = 0; i3 < 2; i3 += 1)
+                      [
+                        for (var i4 = 0; i4 < 2; i4 += 1)
+                          [
+                            for (var i5 = 0; i5 < 2; i5 += 1)
+                              a0[i0][i1][i2][i3][i4][i5]
+                          ]
+                      ]
+                  ]
+              ]
+          ]
+      ]})";
+}
+
+class Struct4BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array(2, 2)
+  external Array<Array<Struct1ByteInt>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [for (var i1 = 0; i1 < 2; i1 += 1) a0[i0][i1]]
+      ]})";
+}
+
+@Packed(1)
+class Struct3BytesPackedInt extends Struct {
+  @Int8()
+  external int a0;
+
+  @Int16()
+  external int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+@Packed(1)
+class Struct3BytesPackedIntMembersAligned extends Struct {
+  @Int8()
+  external int a0;
+
+  @Int16()
+  external int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+@Packed(1)
+class Struct5BytesPackedMixed extends Struct {
+  @Float()
+  external double a0;
+
+  @Uint8()
+  external int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedAlignmentStruct5BytesPackedMixed extends Struct {
+  @Uint8()
+  external int a0;
+
+  external Struct5BytesPackedMixed a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct6BytesInlineArrayInt extends Struct {
+  @Array(2)
+  external Array<Struct3BytesPackedIntMembersAligned> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]})";
+}
+
+@Packed(1)
+class Struct8BytesPackedInt extends Struct {
+  @Uint8()
+  external int a0;
+
+  @Uint32()
+  external int a1;
+
+  @Uint8()
+  external int a2;
+
+  @Uint8()
+  external int a3;
+
+  @Uint8()
+  external int a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+@Packed(1)
+class Struct9BytesPackedMixed extends Struct {
+  @Uint8()
+  external int a0;
+
+  @Double()
+  external double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct15BytesInlineArrayMixed extends Struct {
+  @Array(3)
+  external Array<Struct5BytesPackedMixed> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 3; i0 += 1) a0[i0]]})";
+}
+
+class Union4BytesMixed extends Union {
+  @Uint32()
+  external int a0;
+
+  @Float()
+  external double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Union8BytesNestedFloat extends Union {
+  @Double()
+  external double a0;
+
+  external Struct8BytesHomogeneousFloat a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Union9BytesNestedInt extends Union {
+  external Struct8BytesInt a0;
+
+  external Struct9BytesHomogeneousUint8 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Union16BytesNestedInlineArrayFloat extends Union {
+  @Array(4)
+  external Array<Float> a0;
+
+  external Struct16BytesHomogeneousFloat a1;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 4; i0 += 1) a0[i0]]}, ${a1})";
+}
+
+class Union16BytesNestedFloat extends Union {
+  external Struct8BytesHomogeneousFloat a0;
+
+  external Struct12BytesHomogeneousFloat a1;
+
+  external Struct16BytesHomogeneousFloat a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
diff --git a/tests/ffi/function_structs_by_value_generated_leaf_test.dart b/tests/ffi/function_structs_by_value_generated_leaf_test.dart
new file mode 100644
index 0000000..9efc77b
--- /dev/null
+++ b/tests/ffi/function_structs_by_value_generated_leaf_test.dart
@@ -0,0 +1,7683 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
+//
+// SharedObjects=ffi_test_functions
+// VMOptions=
+// VMOptions=--deterministic --optimization-counter-threshold=5
+// VMOptions=--use-slow-path
+// VMOptions=--use-slow-path --stacktrace-every=100
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+import "package:ffi/ffi.dart";
+
+import 'dylib_utils.dart';
+
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+void main() {
+  for (int i = 0; i < 10; ++i) {
+    testPassStruct1ByteIntx10Leaf();
+    testPassStruct3BytesHomogeneousUint8x10Leaf();
+    testPassStruct3BytesInt2ByteAlignedx10Leaf();
+    testPassStruct4BytesHomogeneousInt16x10Leaf();
+    testPassStruct7BytesHomogeneousUint8x10Leaf();
+    testPassStruct7BytesInt4ByteAlignedx10Leaf();
+    testPassStruct8BytesIntx10Leaf();
+    testPassStruct8BytesHomogeneousFloatx10Leaf();
+    testPassStruct8BytesMixedx10Leaf();
+    testPassStruct9BytesHomogeneousUint8x10Leaf();
+    testPassStruct9BytesInt4Or8ByteAlignedx10Leaf();
+    testPassStruct12BytesHomogeneousFloatx6Leaf();
+    testPassStruct16BytesHomogeneousFloatx5Leaf();
+    testPassStruct16BytesMixedx10Leaf();
+    testPassStruct16BytesMixed2x10Leaf();
+    testPassStruct17BytesIntx10Leaf();
+    testPassStruct19BytesHomogeneousUint8x10Leaf();
+    testPassStruct20BytesHomogeneousInt32x10Leaf();
+    testPassStruct20BytesHomogeneousFloatLeaf();
+    testPassStruct32BytesHomogeneousDoublex5Leaf();
+    testPassStruct40BytesHomogeneousDoubleLeaf();
+    testPassStruct1024BytesHomogeneousUint64Leaf();
+    testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf();
+    testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf();
+    testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf();
+    testPassDoublex6Struct16BytesMixedx4Int32Leaf();
+    testPassInt32x4Struct16BytesMixedx4DoubleLeaf();
+    testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf();
+    testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf();
+    testPassStructAlignmentInt16Leaf();
+    testPassStructAlignmentInt32Leaf();
+    testPassStructAlignmentInt64Leaf();
+    testPassStruct8BytesNestedIntx10Leaf();
+    testPassStruct8BytesNestedFloatx10Leaf();
+    testPassStruct8BytesNestedFloat2x10Leaf();
+    testPassStruct8BytesNestedMixedx10Leaf();
+    testPassStruct16BytesNestedIntx2Leaf();
+    testPassStruct32BytesNestedIntx2Leaf();
+    testPassStructNestedIntStructAlignmentInt16Leaf();
+    testPassStructNestedIntStructAlignmentInt32Leaf();
+    testPassStructNestedIntStructAlignmentInt64Leaf();
+    testPassStructNestedIrregularEvenBiggerx4Leaf();
+    testPassStruct8BytesInlineArrayIntx4Leaf();
+    testPassStructInlineArrayIrregularx4Leaf();
+    testPassStructInlineArray100BytesLeaf();
+    testPassStructStruct16BytesHomogeneousFloat2x5Leaf();
+    testPassStructStruct32BytesHomogeneousDouble2x5Leaf();
+    testPassStructStruct16BytesMixed3x10Leaf();
+    testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf();
+    testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf();
+    testPassStruct3BytesPackedIntx10Leaf();
+    testPassStruct8BytesPackedIntx10Leaf();
+    testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf();
+    testPassStruct5BytesPackedMixedLeaf();
+    testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf();
+    testPassStruct6BytesInlineArrayIntLeaf();
+    testPassStruct15BytesInlineArrayMixedLeaf();
+    testPassUnion4BytesMixedx10Leaf();
+    testPassUnion8BytesNestedFloatx10Leaf();
+    testPassUnion9BytesNestedIntx10Leaf();
+    testPassUnion16BytesNestedInlineArrayFloatx10Leaf();
+    testPassUnion16BytesNestedFloatx10Leaf();
+    testReturnStruct1ByteIntLeaf();
+    testReturnStruct3BytesHomogeneousUint8Leaf();
+    testReturnStruct3BytesInt2ByteAlignedLeaf();
+    testReturnStruct4BytesHomogeneousInt16Leaf();
+    testReturnStruct7BytesHomogeneousUint8Leaf();
+    testReturnStruct7BytesInt4ByteAlignedLeaf();
+    testReturnStruct8BytesIntLeaf();
+    testReturnStruct8BytesHomogeneousFloatLeaf();
+    testReturnStruct8BytesMixedLeaf();
+    testReturnStruct9BytesHomogeneousUint8Leaf();
+    testReturnStruct9BytesInt4Or8ByteAlignedLeaf();
+    testReturnStruct12BytesHomogeneousFloatLeaf();
+    testReturnStruct16BytesHomogeneousFloatLeaf();
+    testReturnStruct16BytesMixedLeaf();
+    testReturnStruct16BytesMixed2Leaf();
+    testReturnStruct17BytesIntLeaf();
+    testReturnStruct19BytesHomogeneousUint8Leaf();
+    testReturnStruct20BytesHomogeneousInt32Leaf();
+    testReturnStruct20BytesHomogeneousFloatLeaf();
+    testReturnStruct32BytesHomogeneousDoubleLeaf();
+    testReturnStruct40BytesHomogeneousDoubleLeaf();
+    testReturnStruct1024BytesHomogeneousUint64Leaf();
+    testReturnStruct3BytesPackedIntLeaf();
+    testReturnStruct8BytesPackedIntLeaf();
+    testReturnStruct9BytesPackedMixedLeaf();
+    testReturnUnion4BytesMixedLeaf();
+    testReturnUnion8BytesNestedFloatLeaf();
+    testReturnUnion9BytesNestedIntLeaf();
+    testReturnUnion16BytesNestedFloatLeaf();
+    testReturnStructArgumentStruct1ByteIntLeaf();
+    testReturnStructArgumentInt32x8Struct1ByteIntLeaf();
+    testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf();
+    testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf();
+    testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf();
+    testReturnStructArgumentStruct8BytesInlineArrayIntLeaf();
+    testReturnStructArgumentStructStruct16BytesHomogeneousLeaf();
+    testReturnStructArgumentStructStruct32BytesHomogeneousLeaf();
+    testReturnStructArgumentStructStruct16BytesMixed3Leaf();
+    testReturnStructAlignmentInt16Leaf();
+    testReturnStructAlignmentInt32Leaf();
+    testReturnStructAlignmentInt64Leaf();
+    testReturnStruct8BytesNestedIntLeaf();
+    testReturnStruct8BytesNestedFloatLeaf();
+    testReturnStruct8BytesNestedFloat2Leaf();
+    testReturnStruct8BytesNestedMixedLeaf();
+    testReturnStruct16BytesNestedIntLeaf();
+    testReturnStruct32BytesNestedIntLeaf();
+    testReturnStructNestedIntStructAlignmentInt16Leaf();
+    testReturnStructNestedIntStructAlignmentInt32Leaf();
+    testReturnStructNestedIntStructAlignmentInt64Leaf();
+    testReturnStructNestedIrregularEvenBiggerLeaf();
+  }
+}
+
+final passStruct1ByteIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt),
+    int Function(
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt)>("PassStruct1ByteIntx10", isLeaf: true);
+
+/// Smallest struct with data.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct1ByteIntx10Leaf() {
+  final a0Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a1.a0 = 2;
+  a2.a0 = -3;
+  a3.a0 = 4;
+  a4.a0 = -5;
+  a5.a0 = 6;
+  a6.a0 = -7;
+  a7.a0 = 8;
+  a8.a0 = -9;
+  a9.a0 = 10;
+
+  final result =
+      passStruct1ByteIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(5, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct3BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8),
+        int Function(
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8)>(
+    "PassStruct3BytesHomogeneousUint8x10",
+    isLeaf: true);
+
+/// Not a multiple of word size, not a power of two.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct3BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a1.a0 = 4;
+  a1.a1 = 5;
+  a1.a2 = 6;
+  a2.a0 = 7;
+  a2.a1 = 8;
+  a2.a2 = 9;
+  a3.a0 = 10;
+  a3.a1 = 11;
+  a3.a2 = 12;
+  a4.a0 = 13;
+  a4.a1 = 14;
+  a4.a2 = 15;
+  a5.a0 = 16;
+  a5.a1 = 17;
+  a5.a2 = 18;
+  a6.a0 = 19;
+  a6.a1 = 20;
+  a6.a2 = 21;
+  a7.a0 = 22;
+  a7.a1 = 23;
+  a7.a2 = 24;
+  a8.a0 = 25;
+  a8.a1 = 26;
+  a8.a2 = 27;
+  a9.a0 = 28;
+  a9.a1 = 29;
+  a9.a2 = 30;
+
+  final result = passStruct3BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(465, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct3BytesInt2ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned),
+        int Function(
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned)>("PassStruct3BytesInt2ByteAlignedx10",
+    isLeaf: true);
+
+/// Not a multiple of word size, not a power of two.
+/// With alignment rules taken into account size is 4 bytes.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct3BytesInt2ByteAlignedx10Leaf() {
+  final a0Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result = passStruct3BytesInt2ByteAlignedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct4BytesHomogeneousInt16x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16),
+        int Function(
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16)>(
+    "PassStruct4BytesHomogeneousInt16x10",
+    isLeaf: true);
+
+/// Exactly word size on 32-bit architectures.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct4BytesHomogeneousInt16x10Leaf() {
+  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result = passStruct4BytesHomogeneousInt16x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct7BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8),
+        int Function(
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8)>(
+    "PassStruct7BytesHomogeneousUint8x10",
+    isLeaf: true);
+
+/// Sub word size on 64 bit architectures.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct7BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a1.a0 = 8;
+  a1.a1 = 9;
+  a1.a2 = 10;
+  a1.a3 = 11;
+  a1.a4 = 12;
+  a1.a5 = 13;
+  a1.a6 = 14;
+  a2.a0 = 15;
+  a2.a1 = 16;
+  a2.a2 = 17;
+  a2.a3 = 18;
+  a2.a4 = 19;
+  a2.a5 = 20;
+  a2.a6 = 21;
+  a3.a0 = 22;
+  a3.a1 = 23;
+  a3.a2 = 24;
+  a3.a3 = 25;
+  a3.a4 = 26;
+  a3.a5 = 27;
+  a3.a6 = 28;
+  a4.a0 = 29;
+  a4.a1 = 30;
+  a4.a2 = 31;
+  a4.a3 = 32;
+  a4.a4 = 33;
+  a4.a5 = 34;
+  a4.a6 = 35;
+  a5.a0 = 36;
+  a5.a1 = 37;
+  a5.a2 = 38;
+  a5.a3 = 39;
+  a5.a4 = 40;
+  a5.a5 = 41;
+  a5.a6 = 42;
+  a6.a0 = 43;
+  a6.a1 = 44;
+  a6.a2 = 45;
+  a6.a3 = 46;
+  a6.a4 = 47;
+  a6.a5 = 48;
+  a6.a6 = 49;
+  a7.a0 = 50;
+  a7.a1 = 51;
+  a7.a2 = 52;
+  a7.a3 = 53;
+  a7.a4 = 54;
+  a7.a5 = 55;
+  a7.a6 = 56;
+  a8.a0 = 57;
+  a8.a1 = 58;
+  a8.a2 = 59;
+  a8.a3 = 60;
+  a8.a4 = 61;
+  a8.a5 = 62;
+  a8.a6 = 63;
+  a9.a0 = 64;
+  a9.a1 = 65;
+  a9.a2 = 66;
+  a9.a3 = 67;
+  a9.a4 = 68;
+  a9.a5 = 69;
+  a9.a6 = 70;
+
+  final result = passStruct7BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(2485, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct7BytesInt4ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned),
+        int Function(
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned)>("PassStruct7BytesInt4ByteAlignedx10",
+    isLeaf: true);
+
+/// Sub word size on 64 bit architectures.
+/// With alignment rules taken into account size is 8 bytes.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct7BytesInt4ByteAlignedx10Leaf() {
+  final a0Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result = passStruct7BytesInt4ByteAlignedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(15, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt),
+    int Function(
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt)>("PassStruct8BytesIntx10", isLeaf: true);
+
+/// Exactly word size struct on 64bit architectures.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct8BytesIntx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result =
+      passStruct8BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(15, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesHomogeneousFloatx10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat),
+        double Function(
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat)>(
+    "PassStruct8BytesHomogeneousFloatx10",
+    isLeaf: true);
+
+/// Arguments passed in FP registers as long as they fit.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct8BytesHomogeneousFloatx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a1.a0 = -3.0;
+  a1.a1 = 4.0;
+  a2.a0 = -5.0;
+  a2.a1 = 6.0;
+  a3.a0 = -7.0;
+  a3.a1 = 8.0;
+  a4.a0 = -9.0;
+  a4.a1 = 10.0;
+  a5.a0 = -11.0;
+  a5.a1 = 12.0;
+  a6.a0 = -13.0;
+  a6.a1 = 14.0;
+  a7.a0 = -15.0;
+  a7.a1 = 16.0;
+  a8.a0 = -17.0;
+  a8.a1 = 18.0;
+  a9.a0 = -19.0;
+  a9.a1 = 20.0;
+
+  final result = passStruct8BytesHomogeneousFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
+    Float Function(
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed),
+    double Function(
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed)>("PassStruct8BytesMixedx10", isLeaf: true);
+
+/// On x64, arguments go in int registers because it is not only float.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct8BytesMixedx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4.0;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7.0;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10.0;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13.0;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16.0;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19.0;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22.0;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25.0;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28.0;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result =
+      passStruct8BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(15.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct9BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8),
+        int Function(
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8)>(
+    "PassStruct9BytesHomogeneousUint8x10",
+    isLeaf: true);
+
+/// Argument is a single byte over a multiple of word size.
+/// 10 struct arguments will exhaust available registers.
+/// Struct only has 1-byte aligned fields to test struct alignment itself.
+/// Tests upper bytes in the integer registers that are partly filled.
+/// Tests stack alignment of non word size stack arguments.
+void testPassStruct9BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a0.a7 = 8;
+  a0.a8 = 9;
+  a1.a0 = 10;
+  a1.a1 = 11;
+  a1.a2 = 12;
+  a1.a3 = 13;
+  a1.a4 = 14;
+  a1.a5 = 15;
+  a1.a6 = 16;
+  a1.a7 = 17;
+  a1.a8 = 18;
+  a2.a0 = 19;
+  a2.a1 = 20;
+  a2.a2 = 21;
+  a2.a3 = 22;
+  a2.a4 = 23;
+  a2.a5 = 24;
+  a2.a6 = 25;
+  a2.a7 = 26;
+  a2.a8 = 27;
+  a3.a0 = 28;
+  a3.a1 = 29;
+  a3.a2 = 30;
+  a3.a3 = 31;
+  a3.a4 = 32;
+  a3.a5 = 33;
+  a3.a6 = 34;
+  a3.a7 = 35;
+  a3.a8 = 36;
+  a4.a0 = 37;
+  a4.a1 = 38;
+  a4.a2 = 39;
+  a4.a3 = 40;
+  a4.a4 = 41;
+  a4.a5 = 42;
+  a4.a6 = 43;
+  a4.a7 = 44;
+  a4.a8 = 45;
+  a5.a0 = 46;
+  a5.a1 = 47;
+  a5.a2 = 48;
+  a5.a3 = 49;
+  a5.a4 = 50;
+  a5.a5 = 51;
+  a5.a6 = 52;
+  a5.a7 = 53;
+  a5.a8 = 54;
+  a6.a0 = 55;
+  a6.a1 = 56;
+  a6.a2 = 57;
+  a6.a3 = 58;
+  a6.a4 = 59;
+  a6.a5 = 60;
+  a6.a6 = 61;
+  a6.a7 = 62;
+  a6.a8 = 63;
+  a7.a0 = 64;
+  a7.a1 = 65;
+  a7.a2 = 66;
+  a7.a3 = 67;
+  a7.a4 = 68;
+  a7.a5 = 69;
+  a7.a6 = 70;
+  a7.a7 = 71;
+  a7.a8 = 72;
+  a8.a0 = 73;
+  a8.a1 = 74;
+  a8.a2 = 75;
+  a8.a3 = 76;
+  a8.a4 = 77;
+  a8.a5 = 78;
+  a8.a6 = 79;
+  a8.a7 = 80;
+  a8.a8 = 81;
+  a9.a0 = 82;
+  a9.a1 = 83;
+  a9.a2 = 84;
+  a9.a3 = 85;
+  a9.a4 = 86;
+  a9.a5 = 87;
+  a9.a6 = 88;
+  a9.a7 = 89;
+  a9.a8 = 90;
+
+  final result = passStruct9BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(4095, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct9BytesInt4Or8ByteAlignedx10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned),
+            int Function(
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned)>(
+        "PassStruct9BytesInt4Or8ByteAlignedx10",
+        isLeaf: true);
+
+/// Argument is a single byte over a multiple of word size.
+/// With alignment rules taken into account size is 12 or 16 bytes.
+/// 10 struct arguments will exhaust available registers.
+///
+void testPassStruct9BytesInt4Or8ByteAlignedx10Leaf() {
+  final a0Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result = passStruct9BytesInt4Or8ByteAlignedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct12BytesHomogeneousFloatx6Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat),
+        double Function(
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat)>(
+    "PassStruct12BytesHomogeneousFloatx6",
+    isLeaf: true);
+
+/// Arguments in FPU registers on arm hardfp and arm64.
+/// Struct arguments will exhaust available registers, and leave some empty.
+/// The last argument is to test whether arguments are backfilled.
+void testPassStruct12BytesHomogeneousFloatx6Leaf() {
+  final a0Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a5 = a5Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a1.a0 = 4.0;
+  a1.a1 = -5.0;
+  a1.a2 = 6.0;
+  a2.a0 = -7.0;
+  a2.a1 = 8.0;
+  a2.a2 = -9.0;
+  a3.a0 = 10.0;
+  a3.a1 = -11.0;
+  a3.a2 = 12.0;
+  a4.a0 = -13.0;
+  a4.a1 = 14.0;
+  a4.a2 = -15.0;
+  a5.a0 = 16.0;
+  a5.a1 = -17.0;
+  a5.a2 = 18.0;
+
+  final result =
+      passStruct12BytesHomogeneousFloatx6Leaf(a0, a1, a2, a3, a4, a5);
+
+  print("result = $result");
+
+  Expect.approxEquals(9.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+}
+
+final passStruct16BytesHomogeneousFloatx5Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat),
+        double Function(
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat)>(
+    "PassStruct16BytesHomogeneousFloatx5",
+    isLeaf: true);
+
+/// On Linux x64 argument is transferred on stack because it is over 16 bytes.
+/// Arguments in FPU registers on arm hardfp and arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStruct16BytesHomogeneousFloatx5Leaf() {
+  final a0Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a4 = a4Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a1.a0 = -5.0;
+  a1.a1 = 6.0;
+  a1.a2 = -7.0;
+  a1.a3 = 8.0;
+  a2.a0 = -9.0;
+  a2.a1 = 10.0;
+  a2.a2 = -11.0;
+  a2.a3 = 12.0;
+  a3.a0 = -13.0;
+  a3.a1 = 14.0;
+  a3.a2 = -15.0;
+  a3.a3 = 16.0;
+  a4.a0 = -17.0;
+  a4.a1 = 18.0;
+  a4.a2 = -19.0;
+  a4.a3 = 20.0;
+
+  final result = passStruct16BytesHomogeneousFloatx5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStruct16BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed),
+    double Function(
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed)>("PassStruct16BytesMixedx10", isLeaf: true);
+
+/// On x64, arguments are split over FP and int registers.
+/// On x64, it will exhaust the integer registers with the 6th argument.
+/// The rest goes on the stack.
+/// On arm, arguments are 8 byte aligned.
+void testPassStruct16BytesMixedx10Leaf() {
+  final a0Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2;
+  a1.a0 = -3.0;
+  a1.a1 = 4;
+  a2.a0 = -5.0;
+  a2.a1 = 6;
+  a3.a0 = -7.0;
+  a3.a1 = 8;
+  a4.a0 = -9.0;
+  a4.a1 = 10;
+  a5.a0 = -11.0;
+  a5.a1 = 12;
+  a6.a0 = -13.0;
+  a6.a1 = 14;
+  a7.a0 = -15.0;
+  a7.a1 = 16;
+  a8.a0 = -17.0;
+  a8.a1 = 18;
+  a9.a0 = -19.0;
+  a9.a1 = 20;
+
+  final result =
+      passStruct16BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct16BytesMixed2x10Leaf = ffiTestFunctions.lookupFunction<
+    Float Function(
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2),
+    double Function(
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2)>("PassStruct16BytesMixed2x10", isLeaf: true);
+
+/// On x64, arguments are split over FP and int registers.
+/// On x64, it will exhaust the integer registers with the 6th argument.
+/// The rest goes on the stack.
+/// On arm, arguments are 4 byte aligned.
+void testPassStruct16BytesMixed2x10Leaf() {
+  final a0Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4;
+  a1.a0 = -5.0;
+  a1.a1 = 6.0;
+  a1.a2 = -7.0;
+  a1.a3 = 8;
+  a2.a0 = -9.0;
+  a2.a1 = 10.0;
+  a2.a2 = -11.0;
+  a2.a3 = 12;
+  a3.a0 = -13.0;
+  a3.a1 = 14.0;
+  a3.a2 = -15.0;
+  a3.a3 = 16;
+  a4.a0 = -17.0;
+  a4.a1 = 18.0;
+  a4.a2 = -19.0;
+  a4.a3 = 20;
+  a5.a0 = -21.0;
+  a5.a1 = 22.0;
+  a5.a2 = -23.0;
+  a5.a3 = 24;
+  a6.a0 = -25.0;
+  a6.a1 = 26.0;
+  a6.a2 = -27.0;
+  a6.a3 = 28;
+  a7.a0 = -29.0;
+  a7.a1 = 30.0;
+  a7.a2 = -31.0;
+  a7.a3 = 32;
+  a8.a0 = -33.0;
+  a8.a1 = 34.0;
+  a8.a2 = -35.0;
+  a8.a3 = 36;
+  a9.a0 = -37.0;
+  a9.a1 = 38.0;
+  a9.a2 = -39.0;
+  a9.a3 = 40;
+
+  final result =
+      passStruct16BytesMixed2x10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(20.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct17BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt),
+    int Function(
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt)>("PassStruct17BytesIntx10", isLeaf: true);
+
+/// Arguments are passed as pointer to copy on arm64.
+/// Tests that the memory allocated for copies are rounded up to word size.
+void testPassStruct17BytesIntx10Leaf() {
+  final a0Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result =
+      passStruct17BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(15, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct19BytesHomogeneousUint8x10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8),
+            int Function(
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8)>(
+        "PassStruct19BytesHomogeneousUint8x10",
+        isLeaf: true);
+
+/// The minimum alignment of this struct is only 1 byte based on its fields.
+/// Test that the memory backing these structs is extended to the right size.
+///
+void testPassStruct19BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a0.a7 = 8;
+  a0.a8 = 9;
+  a0.a9 = 10;
+  a0.a10 = 11;
+  a0.a11 = 12;
+  a0.a12 = 13;
+  a0.a13 = 14;
+  a0.a14 = 15;
+  a0.a15 = 16;
+  a0.a16 = 17;
+  a0.a17 = 18;
+  a0.a18 = 19;
+  a1.a0 = 20;
+  a1.a1 = 21;
+  a1.a2 = 22;
+  a1.a3 = 23;
+  a1.a4 = 24;
+  a1.a5 = 25;
+  a1.a6 = 26;
+  a1.a7 = 27;
+  a1.a8 = 28;
+  a1.a9 = 29;
+  a1.a10 = 30;
+  a1.a11 = 31;
+  a1.a12 = 32;
+  a1.a13 = 33;
+  a1.a14 = 34;
+  a1.a15 = 35;
+  a1.a16 = 36;
+  a1.a17 = 37;
+  a1.a18 = 38;
+  a2.a0 = 39;
+  a2.a1 = 40;
+  a2.a2 = 41;
+  a2.a3 = 42;
+  a2.a4 = 43;
+  a2.a5 = 44;
+  a2.a6 = 45;
+  a2.a7 = 46;
+  a2.a8 = 47;
+  a2.a9 = 48;
+  a2.a10 = 49;
+  a2.a11 = 50;
+  a2.a12 = 51;
+  a2.a13 = 52;
+  a2.a14 = 53;
+  a2.a15 = 54;
+  a2.a16 = 55;
+  a2.a17 = 56;
+  a2.a18 = 57;
+  a3.a0 = 58;
+  a3.a1 = 59;
+  a3.a2 = 60;
+  a3.a3 = 61;
+  a3.a4 = 62;
+  a3.a5 = 63;
+  a3.a6 = 64;
+  a3.a7 = 65;
+  a3.a8 = 66;
+  a3.a9 = 67;
+  a3.a10 = 68;
+  a3.a11 = 69;
+  a3.a12 = 70;
+  a3.a13 = 71;
+  a3.a14 = 72;
+  a3.a15 = 73;
+  a3.a16 = 74;
+  a3.a17 = 75;
+  a3.a18 = 76;
+  a4.a0 = 77;
+  a4.a1 = 78;
+  a4.a2 = 79;
+  a4.a3 = 80;
+  a4.a4 = 81;
+  a4.a5 = 82;
+  a4.a6 = 83;
+  a4.a7 = 84;
+  a4.a8 = 85;
+  a4.a9 = 86;
+  a4.a10 = 87;
+  a4.a11 = 88;
+  a4.a12 = 89;
+  a4.a13 = 90;
+  a4.a14 = 91;
+  a4.a15 = 92;
+  a4.a16 = 93;
+  a4.a17 = 94;
+  a4.a18 = 95;
+  a5.a0 = 96;
+  a5.a1 = 97;
+  a5.a2 = 98;
+  a5.a3 = 99;
+  a5.a4 = 100;
+  a5.a5 = 101;
+  a5.a6 = 102;
+  a5.a7 = 103;
+  a5.a8 = 104;
+  a5.a9 = 105;
+  a5.a10 = 106;
+  a5.a11 = 107;
+  a5.a12 = 108;
+  a5.a13 = 109;
+  a5.a14 = 110;
+  a5.a15 = 111;
+  a5.a16 = 112;
+  a5.a17 = 113;
+  a5.a18 = 114;
+  a6.a0 = 115;
+  a6.a1 = 116;
+  a6.a2 = 117;
+  a6.a3 = 118;
+  a6.a4 = 119;
+  a6.a5 = 120;
+  a6.a6 = 121;
+  a6.a7 = 122;
+  a6.a8 = 123;
+  a6.a9 = 124;
+  a6.a10 = 125;
+  a6.a11 = 126;
+  a6.a12 = 127;
+  a6.a13 = 128;
+  a6.a14 = 129;
+  a6.a15 = 130;
+  a6.a16 = 131;
+  a6.a17 = 132;
+  a6.a18 = 133;
+  a7.a0 = 134;
+  a7.a1 = 135;
+  a7.a2 = 136;
+  a7.a3 = 137;
+  a7.a4 = 138;
+  a7.a5 = 139;
+  a7.a6 = 140;
+  a7.a7 = 141;
+  a7.a8 = 142;
+  a7.a9 = 143;
+  a7.a10 = 144;
+  a7.a11 = 145;
+  a7.a12 = 146;
+  a7.a13 = 147;
+  a7.a14 = 148;
+  a7.a15 = 149;
+  a7.a16 = 150;
+  a7.a17 = 151;
+  a7.a18 = 152;
+  a8.a0 = 153;
+  a8.a1 = 154;
+  a8.a2 = 155;
+  a8.a3 = 156;
+  a8.a4 = 157;
+  a8.a5 = 158;
+  a8.a6 = 159;
+  a8.a7 = 160;
+  a8.a8 = 161;
+  a8.a9 = 162;
+  a8.a10 = 163;
+  a8.a11 = 164;
+  a8.a12 = 165;
+  a8.a13 = 166;
+  a8.a14 = 167;
+  a8.a15 = 168;
+  a8.a16 = 169;
+  a8.a17 = 170;
+  a8.a18 = 171;
+  a9.a0 = 172;
+  a9.a1 = 173;
+  a9.a2 = 174;
+  a9.a3 = 175;
+  a9.a4 = 176;
+  a9.a5 = 177;
+  a9.a6 = 178;
+  a9.a7 = 179;
+  a9.a8 = 180;
+  a9.a9 = 181;
+  a9.a10 = 182;
+  a9.a11 = 183;
+  a9.a12 = 184;
+  a9.a13 = 185;
+  a9.a14 = 186;
+  a9.a15 = 187;
+  a9.a16 = 188;
+  a9.a17 = 189;
+  a9.a18 = 190;
+
+  final result = passStruct19BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(18145, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct20BytesHomogeneousInt32x10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int32 Function(
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32),
+            int Function(
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32)>(
+        "PassStruct20BytesHomogeneousInt32x10",
+        isLeaf: true);
+
+/// Argument too big to go into integer registers on arm64.
+/// The arguments are passed as pointers to copies.
+/// The amount of arguments exhausts the number of integer registers, such that
+/// pointers to copies are also passed on the stack.
+void testPassStruct20BytesHomogeneousInt32x10Leaf() {
+  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a0.a3 = 4;
+  a0.a4 = -5;
+  a1.a0 = 6;
+  a1.a1 = -7;
+  a1.a2 = 8;
+  a1.a3 = -9;
+  a1.a4 = 10;
+  a2.a0 = -11;
+  a2.a1 = 12;
+  a2.a2 = -13;
+  a2.a3 = 14;
+  a2.a4 = -15;
+  a3.a0 = 16;
+  a3.a1 = -17;
+  a3.a2 = 18;
+  a3.a3 = -19;
+  a3.a4 = 20;
+  a4.a0 = -21;
+  a4.a1 = 22;
+  a4.a2 = -23;
+  a4.a3 = 24;
+  a4.a4 = -25;
+  a5.a0 = 26;
+  a5.a1 = -27;
+  a5.a2 = 28;
+  a5.a3 = -29;
+  a5.a4 = 30;
+  a6.a0 = -31;
+  a6.a1 = 32;
+  a6.a2 = -33;
+  a6.a3 = 34;
+  a6.a4 = -35;
+  a7.a0 = 36;
+  a7.a1 = -37;
+  a7.a2 = 38;
+  a7.a3 = -39;
+  a7.a4 = 40;
+  a8.a0 = -41;
+  a8.a1 = 42;
+  a8.a2 = -43;
+  a8.a3 = 44;
+  a8.a4 = -45;
+  a9.a0 = 46;
+  a9.a1 = -47;
+  a9.a2 = 48;
+  a9.a3 = -49;
+  a9.a4 = 50;
+
+  final result = passStruct20BytesHomogeneousInt32x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(25, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+        Float Function(Struct20BytesHomogeneousFloat),
+        double Function(Struct20BytesHomogeneousFloat)>(
+    "PassStruct20BytesHomogeneousFloat",
+    isLeaf: true);
+
+/// Argument too big to go into FPU registers in hardfp and arm64.
+void testPassStruct20BytesHomogeneousFloatLeaf() {
+  final a0Pointer = calloc<Struct20BytesHomogeneousFloat>();
+  final Struct20BytesHomogeneousFloat a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a0.a4 = -5.0;
+
+  final result = passStruct20BytesHomogeneousFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(-3.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct32BytesHomogeneousDoublex5Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble),
+            double Function(
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble)>(
+        "PassStruct32BytesHomogeneousDoublex5",
+        isLeaf: true);
+
+/// Arguments in FPU registers on arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStruct32BytesHomogeneousDoublex5Leaf() {
+  final a0Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a4 = a4Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a1.a0 = -5.0;
+  a1.a1 = 6.0;
+  a1.a2 = -7.0;
+  a1.a3 = 8.0;
+  a2.a0 = -9.0;
+  a2.a1 = 10.0;
+  a2.a2 = -11.0;
+  a2.a3 = 12.0;
+  a3.a0 = -13.0;
+  a3.a1 = 14.0;
+  a3.a2 = -15.0;
+  a3.a3 = 16.0;
+  a4.a0 = -17.0;
+  a4.a1 = 18.0;
+  a4.a2 = -19.0;
+  a4.a3 = 20.0;
+
+  final result = passStruct32BytesHomogeneousDoublex5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStruct40BytesHomogeneousDoubleLeaf = ffiTestFunctions.lookupFunction<
+        Double Function(Struct40BytesHomogeneousDouble),
+        double Function(Struct40BytesHomogeneousDouble)>(
+    "PassStruct40BytesHomogeneousDouble",
+    isLeaf: true);
+
+/// Argument too big to go into FPU registers in arm64.
+void testPassStruct40BytesHomogeneousDoubleLeaf() {
+  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
+  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a0.a4 = -5.0;
+
+  final result = passStruct40BytesHomogeneousDoubleLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(-3.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct1024BytesHomogeneousUint64Leaf =
+    ffiTestFunctions.lookupFunction<
+            Uint64 Function(Struct1024BytesHomogeneousUint64),
+            int Function(Struct1024BytesHomogeneousUint64)>(
+        "PassStruct1024BytesHomogeneousUint64",
+        isLeaf: true);
+
+/// Test 1kb struct.
+void testPassStruct1024BytesHomogeneousUint64Leaf() {
+  final a0Pointer = calloc<Struct1024BytesHomogeneousUint64>();
+  final Struct1024BytesHomogeneousUint64 a0 = a0Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a0.a7 = 8;
+  a0.a8 = 9;
+  a0.a9 = 10;
+  a0.a10 = 11;
+  a0.a11 = 12;
+  a0.a12 = 13;
+  a0.a13 = 14;
+  a0.a14 = 15;
+  a0.a15 = 16;
+  a0.a16 = 17;
+  a0.a17 = 18;
+  a0.a18 = 19;
+  a0.a19 = 20;
+  a0.a20 = 21;
+  a0.a21 = 22;
+  a0.a22 = 23;
+  a0.a23 = 24;
+  a0.a24 = 25;
+  a0.a25 = 26;
+  a0.a26 = 27;
+  a0.a27 = 28;
+  a0.a28 = 29;
+  a0.a29 = 30;
+  a0.a30 = 31;
+  a0.a31 = 32;
+  a0.a32 = 33;
+  a0.a33 = 34;
+  a0.a34 = 35;
+  a0.a35 = 36;
+  a0.a36 = 37;
+  a0.a37 = 38;
+  a0.a38 = 39;
+  a0.a39 = 40;
+  a0.a40 = 41;
+  a0.a41 = 42;
+  a0.a42 = 43;
+  a0.a43 = 44;
+  a0.a44 = 45;
+  a0.a45 = 46;
+  a0.a46 = 47;
+  a0.a47 = 48;
+  a0.a48 = 49;
+  a0.a49 = 50;
+  a0.a50 = 51;
+  a0.a51 = 52;
+  a0.a52 = 53;
+  a0.a53 = 54;
+  a0.a54 = 55;
+  a0.a55 = 56;
+  a0.a56 = 57;
+  a0.a57 = 58;
+  a0.a58 = 59;
+  a0.a59 = 60;
+  a0.a60 = 61;
+  a0.a61 = 62;
+  a0.a62 = 63;
+  a0.a63 = 64;
+  a0.a64 = 65;
+  a0.a65 = 66;
+  a0.a66 = 67;
+  a0.a67 = 68;
+  a0.a68 = 69;
+  a0.a69 = 70;
+  a0.a70 = 71;
+  a0.a71 = 72;
+  a0.a72 = 73;
+  a0.a73 = 74;
+  a0.a74 = 75;
+  a0.a75 = 76;
+  a0.a76 = 77;
+  a0.a77 = 78;
+  a0.a78 = 79;
+  a0.a79 = 80;
+  a0.a80 = 81;
+  a0.a81 = 82;
+  a0.a82 = 83;
+  a0.a83 = 84;
+  a0.a84 = 85;
+  a0.a85 = 86;
+  a0.a86 = 87;
+  a0.a87 = 88;
+  a0.a88 = 89;
+  a0.a89 = 90;
+  a0.a90 = 91;
+  a0.a91 = 92;
+  a0.a92 = 93;
+  a0.a93 = 94;
+  a0.a94 = 95;
+  a0.a95 = 96;
+  a0.a96 = 97;
+  a0.a97 = 98;
+  a0.a98 = 99;
+  a0.a99 = 100;
+  a0.a100 = 101;
+  a0.a101 = 102;
+  a0.a102 = 103;
+  a0.a103 = 104;
+  a0.a104 = 105;
+  a0.a105 = 106;
+  a0.a106 = 107;
+  a0.a107 = 108;
+  a0.a108 = 109;
+  a0.a109 = 110;
+  a0.a110 = 111;
+  a0.a111 = 112;
+  a0.a112 = 113;
+  a0.a113 = 114;
+  a0.a114 = 115;
+  a0.a115 = 116;
+  a0.a116 = 117;
+  a0.a117 = 118;
+  a0.a118 = 119;
+  a0.a119 = 120;
+  a0.a120 = 121;
+  a0.a121 = 122;
+  a0.a122 = 123;
+  a0.a123 = 124;
+  a0.a124 = 125;
+  a0.a125 = 126;
+  a0.a126 = 127;
+  a0.a127 = 128;
+
+  final result = passStruct1024BytesHomogeneousUint64Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(8256, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf =
+    ffiTestFunctions.lookupFunction<
+            Float Function(
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float),
+            double Function(
+                double,
+                Struct16BytesHomogeneousFloat,
+                double,
+                Struct16BytesHomogeneousFloat,
+                double,
+                Struct16BytesHomogeneousFloat,
+                double,
+                Struct16BytesHomogeneousFloat,
+                double)>("PassFloatStruct16BytesHomogeneousFloatFloatStruct1",
+        isLeaf: true);
+
+/// Tests the alignment of structs in FPU registers and backfilling.
+void testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf() {
+  double a0;
+  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
+  double a2;
+  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
+  double a4;
+  final a5Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a5 = a5Pointer.ref;
+  double a6;
+  final a7Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a7 = a7Pointer.ref;
+  double a8;
+
+  a0 = -1.0;
+  a1.a0 = 2.0;
+  a1.a1 = -3.0;
+  a1.a2 = 4.0;
+  a1.a3 = -5.0;
+  a2 = 6.0;
+  a3.a0 = -7.0;
+  a3.a1 = 8.0;
+  a3.a2 = -9.0;
+  a3.a3 = 10.0;
+  a4 = -11.0;
+  a5.a0 = 12.0;
+  a5.a1 = -13.0;
+  a5.a2 = 14.0;
+  a5.a3 = -15.0;
+  a6 = 16.0;
+  a7.a0 = -17.0;
+  a7.a1 = 18.0;
+  a7.a2 = -19.0;
+  a7.a3 = 20.0;
+  a8 = -21.0;
+
+  final result = passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-11.0, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float),
+            double Function(
+                double,
+                Struct32BytesHomogeneousDouble,
+                double,
+                Struct32BytesHomogeneousDouble,
+                double,
+                Struct32BytesHomogeneousDouble,
+                double,
+                Struct32BytesHomogeneousDouble,
+                double)>("PassFloatStruct32BytesHomogeneousDoubleFloatStruct",
+        isLeaf: true);
+
+/// Tests the alignment of structs in FPU registers and backfilling.
+void testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf() {
+  double a0;
+  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
+  double a2;
+  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
+  double a4;
+  final a5Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a5 = a5Pointer.ref;
+  double a6;
+  final a7Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a7 = a7Pointer.ref;
+  double a8;
+
+  a0 = -1.0;
+  a1.a0 = 2.0;
+  a1.a1 = -3.0;
+  a1.a2 = 4.0;
+  a1.a3 = -5.0;
+  a2 = 6.0;
+  a3.a0 = -7.0;
+  a3.a1 = 8.0;
+  a3.a2 = -9.0;
+  a3.a3 = 10.0;
+  a4 = -11.0;
+  a5.a0 = 12.0;
+  a5.a1 = -13.0;
+  a5.a2 = 14.0;
+  a5.a3 = -15.0;
+  a6 = 16.0;
+  a7.a0 = -17.0;
+  a7.a1 = 18.0;
+  a7.a2 = -19.0;
+  a7.a3 = 20.0;
+  a8 = -21.0;
+
+  final result = passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-11.0, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(Int8, Struct16BytesMixed, Int8, Struct16BytesMixed,
+                Int8, Struct16BytesMixed, Int8, Struct16BytesMixed, Int8),
+            double Function(
+                int,
+                Struct16BytesMixed,
+                int,
+                Struct16BytesMixed,
+                int,
+                Struct16BytesMixed,
+                int,
+                Struct16BytesMixed,
+                int)>("PassInt8Struct16BytesMixedInt8Struct16BytesMixedIn",
+        isLeaf: true);
+
+/// Tests the alignment of structs in integers registers and on the stack.
+/// Arm32 aligns this struct at 8.
+/// Also, arm32 allocates the second struct partially in registers, partially
+/// on stack.
+/// Test backfilling of integer registers.
+void testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf() {
+  int a0;
+  final a1Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a1 = a1Pointer.ref;
+  int a2;
+  final a3Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a3 = a3Pointer.ref;
+  int a4;
+  final a5Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a5 = a5Pointer.ref;
+  int a6;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  int a8;
+
+  a0 = -1;
+  a1.a0 = 2.0;
+  a1.a1 = -3;
+  a2 = 4;
+  a3.a0 = -5.0;
+  a3.a1 = 6;
+  a4 = -7;
+  a5.a0 = 8.0;
+  a5.a1 = -9;
+  a6 = 10;
+  a7.a0 = -11.0;
+  a7.a1 = 12;
+  a8 = -13;
+
+  final result = passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-7.0, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passDoublex6Struct16BytesMixedx4Int32Leaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Int32),
+        double Function(
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            int)>("PassDoublex6Struct16BytesMixedx4Int32", isLeaf: true);
+
+/// On Linux x64, it will exhaust xmm registers first, after 6 doubles and 2
+/// structs. The rest of the structs will go on the stack.
+/// The int will be backfilled into the int register.
+void testPassDoublex6Struct16BytesMixedx4Int32Leaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+  double a4;
+  double a5;
+  final a6Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a9 = a9Pointer.ref;
+  int a10;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+  a4 = -5.0;
+  a5 = 6.0;
+  a6.a0 = -7.0;
+  a6.a1 = 8;
+  a7.a0 = -9.0;
+  a7.a1 = 10;
+  a8.a0 = -11.0;
+  a8.a1 = 12;
+  a9.a0 = -13.0;
+  a9.a1 = 14;
+  a10 = -15;
+
+  final result = passDoublex6Struct16BytesMixedx4Int32Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
+
+  print("result = $result");
+
+  Expect.approxEquals(-8.0, result);
+
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passInt32x4Struct16BytesMixedx4DoubleLeaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(Int32, Int32, Int32, Int32, Struct16BytesMixed,
+            Struct16BytesMixed, Struct16BytesMixed, Struct16BytesMixed, Double),
+        double Function(
+            int,
+            int,
+            int,
+            int,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            double)>("PassInt32x4Struct16BytesMixedx4Double", isLeaf: true);
+
+/// On Linux x64, it will exhaust int registers first.
+/// The rest of the structs will go on the stack.
+/// The double will be backfilled into the xmm register.
+void testPassInt32x4Struct16BytesMixedx4DoubleLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  final a4Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  double a8;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4.a0 = -5.0;
+  a4.a1 = 6;
+  a5.a0 = -7.0;
+  a5.a1 = 8;
+  a6.a0 = -9.0;
+  a6.a1 = 10;
+  a7.a0 = -11.0;
+  a7.a1 = 12;
+  a8 = -13.0;
+
+  final result = passInt32x4Struct16BytesMixedx4DoubleLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-7.0, result);
+
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(Struct40BytesHomogeneousDouble,
+                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat),
+            double Function(Struct40BytesHomogeneousDouble,
+                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat)>(
+        "PassStruct40BytesHomogeneousDoubleStruct4BytesHomo",
+        isLeaf: true);
+
+/// On various architectures, first struct is allocated on stack.
+/// Check that the other two arguments are allocated on registers.
+void testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf() {
+  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
+  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a0.a4 = -5.0;
+  a1.a0 = 6;
+  a1.a1 = -7;
+  a2.a0 = 8.0;
+  a2.a1 = -9.0;
+
+  final result =
+      passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.approxEquals(-5.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+}
+
+final passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Int64,
+            Int8,
+            Struct1ByteInt,
+            Int64,
+            Int8,
+            Struct4BytesHomogeneousInt16,
+            Int64,
+            Int8,
+            Struct8BytesInt,
+            Int64,
+            Int8,
+            Struct8BytesHomogeneousFloat,
+            Int64,
+            Int8,
+            Struct8BytesMixed,
+            Int64,
+            Int8,
+            StructAlignmentInt16,
+            Int64,
+            Int8,
+            StructAlignmentInt32,
+            Int64,
+            Int8,
+            StructAlignmentInt64),
+        double Function(
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            int,
+            int,
+            Struct1ByteInt,
+            int,
+            int,
+            Struct4BytesHomogeneousInt16,
+            int,
+            int,
+            Struct8BytesInt,
+            int,
+            int,
+            Struct8BytesHomogeneousFloat,
+            int,
+            int,
+            Struct8BytesMixed,
+            int,
+            int,
+            StructAlignmentInt16,
+            int,
+            int,
+            StructAlignmentInt32,
+            int,
+            int,
+            StructAlignmentInt64)>("PassInt32x8Doublex8Int64Int8Struct1ByteIntInt64Int", isLeaf: true);
+
+/// Test alignment and padding of 16 byte int within struct.
+void testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  double a8;
+  double a9;
+  double a10;
+  double a11;
+  double a12;
+  double a13;
+  double a14;
+  double a15;
+  int a16;
+  int a17;
+  final a18Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a18 = a18Pointer.ref;
+  int a19;
+  int a20;
+  final a21Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a21 = a21Pointer.ref;
+  int a22;
+  int a23;
+  final a24Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a24 = a24Pointer.ref;
+  int a25;
+  int a26;
+  final a27Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a27 = a27Pointer.ref;
+  int a28;
+  int a29;
+  final a30Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a30 = a30Pointer.ref;
+  int a31;
+  int a32;
+  final a33Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a33 = a33Pointer.ref;
+  int a34;
+  int a35;
+  final a36Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a36 = a36Pointer.ref;
+  int a37;
+  int a38;
+  final a39Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a39 = a39Pointer.ref;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+  a5 = 6;
+  a6 = -7;
+  a7 = 8;
+  a8 = -9.0;
+  a9 = 10.0;
+  a10 = -11.0;
+  a11 = 12.0;
+  a12 = -13.0;
+  a13 = 14.0;
+  a14 = -15.0;
+  a15 = 16.0;
+  a16 = -17;
+  a17 = 18;
+  a18.a0 = -19;
+  a19 = 20;
+  a20 = -21;
+  a21.a0 = 22;
+  a21.a1 = -23;
+  a22 = 24;
+  a23 = -25;
+  a24.a0 = 26;
+  a24.a1 = -27;
+  a24.a2 = 28;
+  a25 = -29;
+  a26 = 30;
+  a27.a0 = -31.0;
+  a27.a1 = 32.0;
+  a28 = -33;
+  a29 = 34;
+  a30.a0 = -35.0;
+  a30.a1 = 36;
+  a30.a2 = -37;
+  a31 = 38;
+  a32 = -39;
+  a33.a0 = 40;
+  a33.a1 = -41;
+  a33.a2 = 42;
+  a34 = -43;
+  a35 = 44;
+  a36.a0 = -45;
+  a36.a1 = 46;
+  a36.a2 = -47;
+  a37 = 48;
+  a38 = -49;
+  a39.a0 = 50;
+  a39.a1 = -51;
+  a39.a2 = 52;
+
+  final result = passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf(
+      a0,
+      a1,
+      a2,
+      a3,
+      a4,
+      a5,
+      a6,
+      a7,
+      a8,
+      a9,
+      a10,
+      a11,
+      a12,
+      a13,
+      a14,
+      a15,
+      a16,
+      a17,
+      a18,
+      a19,
+      a20,
+      a21,
+      a22,
+      a23,
+      a24,
+      a25,
+      a26,
+      a27,
+      a28,
+      a29,
+      a30,
+      a31,
+      a32,
+      a33,
+      a34,
+      a35,
+      a36,
+      a37,
+      a38,
+      a39);
+
+  print("result = $result");
+
+  Expect.approxEquals(26.0, result);
+
+  calloc.free(a18Pointer);
+  calloc.free(a21Pointer);
+  calloc.free(a24Pointer);
+  calloc.free(a27Pointer);
+  calloc.free(a30Pointer);
+  calloc.free(a33Pointer);
+  calloc.free(a36Pointer);
+  calloc.free(a39Pointer);
+}
+
+final passStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(StructAlignmentInt16),
+    int Function(
+        StructAlignmentInt16)>("PassStructAlignmentInt16", isLeaf: true);
+
+/// Test alignment and padding of 16 byte int within struct.
+void testPassStructAlignmentInt16Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = passStructAlignmentInt16Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(-2, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(StructAlignmentInt32),
+    int Function(
+        StructAlignmentInt32)>("PassStructAlignmentInt32", isLeaf: true);
+
+/// Test alignment and padding of 32 byte int within struct.
+void testPassStructAlignmentInt32Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = passStructAlignmentInt32Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(-2, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(StructAlignmentInt64),
+    int Function(
+        StructAlignmentInt64)>("PassStructAlignmentInt64", isLeaf: true);
+
+/// Test alignment and padding of 64 byte int within struct.
+void testPassStructAlignmentInt64Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = passStructAlignmentInt64Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(-2, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct8BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt),
+    int Function(
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt)>("PassStruct8BytesNestedIntx10", isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust registers on all platforms.
+void testPassStruct8BytesNestedIntx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a1.a0 = -3;
+  a0.a1.a1 = 4;
+  a1.a0.a0 = -5;
+  a1.a0.a1 = 6;
+  a1.a1.a0 = -7;
+  a1.a1.a1 = 8;
+  a2.a0.a0 = -9;
+  a2.a0.a1 = 10;
+  a2.a1.a0 = -11;
+  a2.a1.a1 = 12;
+  a3.a0.a0 = -13;
+  a3.a0.a1 = 14;
+  a3.a1.a0 = -15;
+  a3.a1.a1 = 16;
+  a4.a0.a0 = -17;
+  a4.a0.a1 = 18;
+  a4.a1.a0 = -19;
+  a4.a1.a1 = 20;
+  a5.a0.a0 = -21;
+  a5.a0.a1 = 22;
+  a5.a1.a0 = -23;
+  a5.a1.a1 = 24;
+  a6.a0.a0 = -25;
+  a6.a0.a1 = 26;
+  a6.a1.a0 = -27;
+  a6.a1.a1 = 28;
+  a7.a0.a0 = -29;
+  a7.a0.a1 = 30;
+  a7.a1.a0 = -31;
+  a7.a1.a1 = 32;
+  a8.a0.a0 = -33;
+  a8.a0.a1 = 34;
+  a8.a1.a0 = -35;
+  a8.a1.a1 = 36;
+  a9.a0.a0 = -37;
+  a9.a0.a1 = 38;
+  a9.a1.a0 = -39;
+  a9.a1.a1 = 40;
+
+  final result =
+      passStruct8BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(20, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat),
+        double Function(
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat)>("PassStruct8BytesNestedFloatx10",
+    isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust fpu registers on all platforms.
+void testPassStruct8BytesNestedFloatx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1.a0 = 2.0;
+  a1.a0.a0 = -3.0;
+  a1.a1.a0 = 4.0;
+  a2.a0.a0 = -5.0;
+  a2.a1.a0 = 6.0;
+  a3.a0.a0 = -7.0;
+  a3.a1.a0 = 8.0;
+  a4.a0.a0 = -9.0;
+  a4.a1.a0 = 10.0;
+  a5.a0.a0 = -11.0;
+  a5.a1.a0 = 12.0;
+  a6.a0.a0 = -13.0;
+  a6.a1.a0 = 14.0;
+  a7.a0.a0 = -15.0;
+  a7.a1.a0 = 16.0;
+  a8.a0.a0 = -17.0;
+  a8.a1.a0 = 18.0;
+  a9.a0.a0 = -19.0;
+  a9.a1.a0 = 20.0;
+
+  final result = passStruct8BytesNestedFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesNestedFloat2x10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2),
+        double Function(
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2)>("PassStruct8BytesNestedFloat2x10",
+    isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust fpu registers on all platforms.
+/// The nesting is irregular, testing homogenous float rules on arm and arm64,
+/// and the fpu register usage on x64.
+void testPassStruct8BytesNestedFloat2x10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a1.a0.a0 = -3.0;
+  a1.a1 = 4.0;
+  a2.a0.a0 = -5.0;
+  a2.a1 = 6.0;
+  a3.a0.a0 = -7.0;
+  a3.a1 = 8.0;
+  a4.a0.a0 = -9.0;
+  a4.a1 = 10.0;
+  a5.a0.a0 = -11.0;
+  a5.a1 = 12.0;
+  a6.a0.a0 = -13.0;
+  a6.a1 = 14.0;
+  a7.a0.a0 = -15.0;
+  a7.a1 = 16.0;
+  a8.a0.a0 = -17.0;
+  a8.a1 = 18.0;
+  a9.a0.a0 = -19.0;
+  a9.a1 = 20.0;
+
+  final result = passStruct8BytesNestedFloat2x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesNestedMixedx10Leaf = ffiTestFunctions.lookupFunction<
+        Double Function(
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed),
+        double Function(
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed)>("PassStruct8BytesNestedMixedx10",
+    isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust all registers on all platforms.
+void testPassStruct8BytesNestedMixedx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a1.a0 = -3.0;
+  a1.a0.a0 = 4;
+  a1.a0.a1 = -5;
+  a1.a1.a0 = 6.0;
+  a2.a0.a0 = -7;
+  a2.a0.a1 = 8;
+  a2.a1.a0 = -9.0;
+  a3.a0.a0 = 10;
+  a3.a0.a1 = -11;
+  a3.a1.a0 = 12.0;
+  a4.a0.a0 = -13;
+  a4.a0.a1 = 14;
+  a4.a1.a0 = -15.0;
+  a5.a0.a0 = 16;
+  a5.a0.a1 = -17;
+  a5.a1.a0 = 18.0;
+  a6.a0.a0 = -19;
+  a6.a0.a1 = 20;
+  a6.a1.a0 = -21.0;
+  a7.a0.a0 = 22;
+  a7.a0.a1 = -23;
+  a7.a1.a0 = 24.0;
+  a8.a0.a0 = -25;
+  a8.a0.a1 = 26;
+  a8.a1.a0 = -27.0;
+  a9.a0.a0 = 28;
+  a9.a0.a1 = -29;
+  a9.a1.a0 = 30.0;
+
+  final result = passStruct8BytesNestedMixedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(15.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct16BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(Struct16BytesNestedInt, Struct16BytesNestedInt),
+    int Function(Struct16BytesNestedInt,
+        Struct16BytesNestedInt)>("PassStruct16BytesNestedIntx2", isLeaf: true);
+
+/// Deeper nested struct to test recursive member access.
+void testPassStruct16BytesNestedIntx2Leaf() {
+  final a0Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0.a0 = -1;
+  a0.a0.a0.a1 = 2;
+  a0.a0.a1.a0 = -3;
+  a0.a0.a1.a1 = 4;
+  a0.a1.a0.a0 = -5;
+  a0.a1.a0.a1 = 6;
+  a0.a1.a1.a0 = -7;
+  a0.a1.a1.a1 = 8;
+  a1.a0.a0.a0 = -9;
+  a1.a0.a0.a1 = 10;
+  a1.a0.a1.a0 = -11;
+  a1.a0.a1.a1 = 12;
+  a1.a1.a0.a0 = -13;
+  a1.a1.a0.a1 = 14;
+  a1.a1.a1.a0 = -15;
+  a1.a1.a1.a1 = 16;
+
+  final result = passStruct16BytesNestedIntx2Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(8, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final passStruct32BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(Struct32BytesNestedInt, Struct32BytesNestedInt),
+    int Function(Struct32BytesNestedInt,
+        Struct32BytesNestedInt)>("PassStruct32BytesNestedIntx2", isLeaf: true);
+
+/// Even deeper nested struct to test recursive member access.
+void testPassStruct32BytesNestedIntx2Leaf() {
+  final a0Pointer = calloc<Struct32BytesNestedInt>();
+  final Struct32BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct32BytesNestedInt>();
+  final Struct32BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0.a0.a0 = -1;
+  a0.a0.a0.a0.a1 = 2;
+  a0.a0.a0.a1.a0 = -3;
+  a0.a0.a0.a1.a1 = 4;
+  a0.a0.a1.a0.a0 = -5;
+  a0.a0.a1.a0.a1 = 6;
+  a0.a0.a1.a1.a0 = -7;
+  a0.a0.a1.a1.a1 = 8;
+  a0.a1.a0.a0.a0 = -9;
+  a0.a1.a0.a0.a1 = 10;
+  a0.a1.a0.a1.a0 = -11;
+  a0.a1.a0.a1.a1 = 12;
+  a0.a1.a1.a0.a0 = -13;
+  a0.a1.a1.a0.a1 = 14;
+  a0.a1.a1.a1.a0 = -15;
+  a0.a1.a1.a1.a1 = 16;
+  a1.a0.a0.a0.a0 = -17;
+  a1.a0.a0.a0.a1 = 18;
+  a1.a0.a0.a1.a0 = -19;
+  a1.a0.a0.a1.a1 = 20;
+  a1.a0.a1.a0.a0 = -21;
+  a1.a0.a1.a0.a1 = 22;
+  a1.a0.a1.a1.a0 = -23;
+  a1.a0.a1.a1.a1 = 24;
+  a1.a1.a0.a0.a0 = -25;
+  a1.a1.a0.a0.a1 = 26;
+  a1.a1.a0.a1.a0 = -27;
+  a1.a1.a0.a1.a1 = 28;
+  a1.a1.a1.a0.a0 = -29;
+  a1.a1.a1.a0.a1 = 30;
+  a1.a1.a1.a1.a0 = -31;
+  a1.a1.a1.a1.a1 = 32;
+
+  final result = passStruct32BytesNestedIntx2Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(16, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final passStructNestedIntStructAlignmentInt16Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(StructNestedIntStructAlignmentInt16),
+            int Function(StructNestedIntStructAlignmentInt16)>(
+        "PassStructNestedIntStructAlignmentInt16",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 16 byte int.
+void testPassStructNestedIntStructAlignmentInt16Leaf() {
+  final a0Pointer = calloc<StructNestedIntStructAlignmentInt16>();
+  final StructNestedIntStructAlignmentInt16 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a0.a1.a0 = 4;
+  a0.a1.a1 = -5;
+  a0.a1.a2 = 6;
+
+  final result = passStructNestedIntStructAlignmentInt16Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(3, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedIntStructAlignmentInt32Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(StructNestedIntStructAlignmentInt32),
+            int Function(StructNestedIntStructAlignmentInt32)>(
+        "PassStructNestedIntStructAlignmentInt32",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 32 byte int.
+void testPassStructNestedIntStructAlignmentInt32Leaf() {
+  final a0Pointer = calloc<StructNestedIntStructAlignmentInt32>();
+  final StructNestedIntStructAlignmentInt32 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a0.a1.a0 = 4;
+  a0.a1.a1 = -5;
+  a0.a1.a2 = 6;
+
+  final result = passStructNestedIntStructAlignmentInt32Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(3, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedIntStructAlignmentInt64Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(StructNestedIntStructAlignmentInt64),
+            int Function(StructNestedIntStructAlignmentInt64)>(
+        "PassStructNestedIntStructAlignmentInt64",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 64 byte int.
+void testPassStructNestedIntStructAlignmentInt64Leaf() {
+  final a0Pointer = calloc<StructNestedIntStructAlignmentInt64>();
+  final StructNestedIntStructAlignmentInt64 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a0.a1.a0 = 4;
+  a0.a1.a1 = -5;
+  a0.a1.a2 = 6;
+
+  final result = passStructNestedIntStructAlignmentInt64Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(3, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedIrregularEvenBiggerx4Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger),
+            double Function(
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger)>(
+        "PassStructNestedIrregularEvenBiggerx4",
+        isLeaf: true);
+
+/// Return big irregular struct as smoke test.
+void testPassStructNestedIrregularEvenBiggerx4Leaf() {
+  final a0Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a3 = a3Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1.a0.a0 = 2;
+  a0.a1.a0.a1.a0.a0 = -3;
+  a0.a1.a0.a1.a0.a1 = 4;
+  a0.a1.a0.a1.a1.a0 = -5.0;
+  a0.a1.a0.a2 = 6;
+  a0.a1.a0.a3.a0.a0 = -7.0;
+  a0.a1.a0.a3.a1 = 8.0;
+  a0.a1.a0.a4 = 9;
+  a0.a1.a0.a5.a0.a0 = 10.0;
+  a0.a1.a0.a5.a1.a0 = -11.0;
+  a0.a1.a0.a6 = 12;
+  a0.a1.a1.a0.a0 = -13;
+  a0.a1.a1.a0.a1 = 14;
+  a0.a1.a1.a1.a0 = -15.0;
+  a0.a1.a2 = 16.0;
+  a0.a1.a3 = -17.0;
+  a0.a2.a0.a0 = 18;
+  a0.a2.a0.a1.a0.a0 = -19;
+  a0.a2.a0.a1.a0.a1 = 20;
+  a0.a2.a0.a1.a1.a0 = -21.0;
+  a0.a2.a0.a2 = 22;
+  a0.a2.a0.a3.a0.a0 = -23.0;
+  a0.a2.a0.a3.a1 = 24.0;
+  a0.a2.a0.a4 = 25;
+  a0.a2.a0.a5.a0.a0 = 26.0;
+  a0.a2.a0.a5.a1.a0 = -27.0;
+  a0.a2.a0.a6 = 28;
+  a0.a2.a1.a0.a0 = -29;
+  a0.a2.a1.a0.a1 = 30;
+  a0.a2.a1.a1.a0 = -31.0;
+  a0.a2.a2 = 32.0;
+  a0.a2.a3 = -33.0;
+  a0.a3 = 34.0;
+  a1.a0 = 35;
+  a1.a1.a0.a0 = 36;
+  a1.a1.a0.a1.a0.a0 = -37;
+  a1.a1.a0.a1.a0.a1 = 38;
+  a1.a1.a0.a1.a1.a0 = -39.0;
+  a1.a1.a0.a2 = 40;
+  a1.a1.a0.a3.a0.a0 = -41.0;
+  a1.a1.a0.a3.a1 = 42.0;
+  a1.a1.a0.a4 = 43;
+  a1.a1.a0.a5.a0.a0 = 44.0;
+  a1.a1.a0.a5.a1.a0 = -45.0;
+  a1.a1.a0.a6 = 46;
+  a1.a1.a1.a0.a0 = -47;
+  a1.a1.a1.a0.a1 = 48;
+  a1.a1.a1.a1.a0 = -49.0;
+  a1.a1.a2 = 50.0;
+  a1.a1.a3 = -51.0;
+  a1.a2.a0.a0 = 52;
+  a1.a2.a0.a1.a0.a0 = -53;
+  a1.a2.a0.a1.a0.a1 = 54;
+  a1.a2.a0.a1.a1.a0 = -55.0;
+  a1.a2.a0.a2 = 56;
+  a1.a2.a0.a3.a0.a0 = -57.0;
+  a1.a2.a0.a3.a1 = 58.0;
+  a1.a2.a0.a4 = 59;
+  a1.a2.a0.a5.a0.a0 = 60.0;
+  a1.a2.a0.a5.a1.a0 = -61.0;
+  a1.a2.a0.a6 = 62;
+  a1.a2.a1.a0.a0 = -63;
+  a1.a2.a1.a0.a1 = 64;
+  a1.a2.a1.a1.a0 = -65.0;
+  a1.a2.a2 = 66.0;
+  a1.a2.a3 = -67.0;
+  a1.a3 = 68.0;
+  a2.a0 = 69;
+  a2.a1.a0.a0 = 70;
+  a2.a1.a0.a1.a0.a0 = -71;
+  a2.a1.a0.a1.a0.a1 = 72;
+  a2.a1.a0.a1.a1.a0 = -73.0;
+  a2.a1.a0.a2 = 74;
+  a2.a1.a0.a3.a0.a0 = -75.0;
+  a2.a1.a0.a3.a1 = 76.0;
+  a2.a1.a0.a4 = 77;
+  a2.a1.a0.a5.a0.a0 = 78.0;
+  a2.a1.a0.a5.a1.a0 = -79.0;
+  a2.a1.a0.a6 = 80;
+  a2.a1.a1.a0.a0 = -81;
+  a2.a1.a1.a0.a1 = 82;
+  a2.a1.a1.a1.a0 = -83.0;
+  a2.a1.a2 = 84.0;
+  a2.a1.a3 = -85.0;
+  a2.a2.a0.a0 = 86;
+  a2.a2.a0.a1.a0.a0 = -87;
+  a2.a2.a0.a1.a0.a1 = 88;
+  a2.a2.a0.a1.a1.a0 = -89.0;
+  a2.a2.a0.a2 = 90;
+  a2.a2.a0.a3.a0.a0 = -91.0;
+  a2.a2.a0.a3.a1 = 92.0;
+  a2.a2.a0.a4 = 93;
+  a2.a2.a0.a5.a0.a0 = 94.0;
+  a2.a2.a0.a5.a1.a0 = -95.0;
+  a2.a2.a0.a6 = 96;
+  a2.a2.a1.a0.a0 = -97;
+  a2.a2.a1.a0.a1 = 98;
+  a2.a2.a1.a1.a0 = -99.0;
+  a2.a2.a2 = 100.0;
+  a2.a2.a3 = -101.0;
+  a2.a3 = 102.0;
+  a3.a0 = 103;
+  a3.a1.a0.a0 = 104;
+  a3.a1.a0.a1.a0.a0 = -105;
+  a3.a1.a0.a1.a0.a1 = 106;
+  a3.a1.a0.a1.a1.a0 = -107.0;
+  a3.a1.a0.a2 = 108;
+  a3.a1.a0.a3.a0.a0 = -109.0;
+  a3.a1.a0.a3.a1 = 110.0;
+  a3.a1.a0.a4 = 111;
+  a3.a1.a0.a5.a0.a0 = 112.0;
+  a3.a1.a0.a5.a1.a0 = -113.0;
+  a3.a1.a0.a6 = 114;
+  a3.a1.a1.a0.a0 = -115;
+  a3.a1.a1.a0.a1 = 116;
+  a3.a1.a1.a1.a0 = -117.0;
+  a3.a1.a2 = 118.0;
+  a3.a1.a3 = -119.0;
+  a3.a2.a0.a0 = 120;
+  a3.a2.a0.a1.a0.a0 = -121;
+  a3.a2.a0.a1.a0.a1 = 122;
+  a3.a2.a0.a1.a1.a0 = -123.0;
+  a3.a2.a0.a2 = 124;
+  a3.a2.a0.a3.a0.a0 = -125.0;
+  a3.a2.a0.a3.a1 = 126.0;
+  a3.a2.a0.a4 = 127;
+  a3.a2.a0.a5.a0.a0 = 128.0;
+  a3.a2.a0.a5.a1.a0 = -129.0;
+  a3.a2.a0.a6 = 130;
+  a3.a2.a1.a0.a0 = -131;
+  a3.a2.a1.a0.a1 = 132;
+  a3.a2.a1.a1.a0 = -133.0;
+  a3.a2.a2 = 134.0;
+  a3.a2.a3 = -135.0;
+  a3.a3 = 136.0;
+
+  final result = passStructNestedIrregularEvenBiggerx4Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(1572.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+}
+
+final passStruct8BytesInlineArrayIntx4Leaf = ffiTestFunctions.lookupFunction<
+        Int32 Function(Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt),
+        int Function(
+            Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt)>("PassStruct8BytesInlineArrayIntx4",
+    isLeaf: true);
+
+/// Simple struct with inline array.
+void testPassStruct8BytesInlineArrayIntx4Leaf() {
+  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a3 = a3Pointer.ref;
+
+  a0.a0[0] = 1;
+  a0.a0[1] = 2;
+  a0.a0[2] = 3;
+  a0.a0[3] = 4;
+  a0.a0[4] = 5;
+  a0.a0[5] = 6;
+  a0.a0[6] = 7;
+  a0.a0[7] = 8;
+  a1.a0[0] = 9;
+  a1.a0[1] = 10;
+  a1.a0[2] = 11;
+  a1.a0[3] = 12;
+  a1.a0[4] = 13;
+  a1.a0[5] = 14;
+  a1.a0[6] = 15;
+  a1.a0[7] = 16;
+  a2.a0[0] = 17;
+  a2.a0[1] = 18;
+  a2.a0[2] = 19;
+  a2.a0[3] = 20;
+  a2.a0[4] = 21;
+  a2.a0[5] = 22;
+  a2.a0[6] = 23;
+  a2.a0[7] = 24;
+  a3.a0[0] = 25;
+  a3.a0[1] = 26;
+  a3.a0[2] = 27;
+  a3.a0[3] = 28;
+  a3.a0[4] = 29;
+  a3.a0[5] = 30;
+  a3.a0[6] = 31;
+  a3.a0[7] = 32;
+
+  final result = passStruct8BytesInlineArrayIntx4Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.equals(528, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+}
+
+final passStructInlineArrayIrregularx4Leaf = ffiTestFunctions.lookupFunction<
+        Int32 Function(StructInlineArrayIrregular, StructInlineArrayIrregular,
+            StructInlineArrayIrregular, StructInlineArrayIrregular),
+        int Function(
+            StructInlineArrayIrregular,
+            StructInlineArrayIrregular,
+            StructInlineArrayIrregular,
+            StructInlineArrayIrregular)>("PassStructInlineArrayIrregularx4",
+    isLeaf: true);
+
+/// Irregular struct with inline array.
+void testPassStructInlineArrayIrregularx4Leaf() {
+  final a0Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a3 = a3Pointer.ref;
+
+  a0.a0[0].a0 = -1;
+  a0.a0[0].a1 = 2;
+  a0.a0[1].a0 = -3;
+  a0.a0[1].a1 = 4;
+  a0.a1 = 5;
+  a1.a0[0].a0 = 6;
+  a1.a0[0].a1 = -7;
+  a1.a0[1].a0 = 8;
+  a1.a0[1].a1 = -9;
+  a1.a1 = 10;
+  a2.a0[0].a0 = -11;
+  a2.a0[0].a1 = 12;
+  a2.a0[1].a0 = -13;
+  a2.a0[1].a1 = 14;
+  a2.a1 = 15;
+  a3.a0[0].a0 = 16;
+  a3.a0[0].a1 = -17;
+  a3.a0[1].a0 = 18;
+  a3.a0[1].a1 = -19;
+  a3.a1 = 20;
+
+  final result = passStructInlineArrayIrregularx4Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.equals(50, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+}
+
+final passStructInlineArray100BytesLeaf = ffiTestFunctions.lookupFunction<
+        Int32 Function(StructInlineArray100Bytes),
+        int Function(StructInlineArray100Bytes)>(
+    "PassStructInlineArray100Bytes",
+    isLeaf: true);
+
+/// Regular larger struct with inline array.
+void testPassStructInlineArray100BytesLeaf() {
+  final a0Pointer = calloc<StructInlineArray100Bytes>();
+  final StructInlineArray100Bytes a0 = a0Pointer.ref;
+
+  a0.a0[0] = 1;
+  a0.a0[1] = 2;
+  a0.a0[2] = 3;
+  a0.a0[3] = 4;
+  a0.a0[4] = 5;
+  a0.a0[5] = 6;
+  a0.a0[6] = 7;
+  a0.a0[7] = 8;
+  a0.a0[8] = 9;
+  a0.a0[9] = 10;
+  a0.a0[10] = 11;
+  a0.a0[11] = 12;
+  a0.a0[12] = 13;
+  a0.a0[13] = 14;
+  a0.a0[14] = 15;
+  a0.a0[15] = 16;
+  a0.a0[16] = 17;
+  a0.a0[17] = 18;
+  a0.a0[18] = 19;
+  a0.a0[19] = 20;
+  a0.a0[20] = 21;
+  a0.a0[21] = 22;
+  a0.a0[22] = 23;
+  a0.a0[23] = 24;
+  a0.a0[24] = 25;
+  a0.a0[25] = 26;
+  a0.a0[26] = 27;
+  a0.a0[27] = 28;
+  a0.a0[28] = 29;
+  a0.a0[29] = 30;
+  a0.a0[30] = 31;
+  a0.a0[31] = 32;
+  a0.a0[32] = 33;
+  a0.a0[33] = 34;
+  a0.a0[34] = 35;
+  a0.a0[35] = 36;
+  a0.a0[36] = 37;
+  a0.a0[37] = 38;
+  a0.a0[38] = 39;
+  a0.a0[39] = 40;
+  a0.a0[40] = 41;
+  a0.a0[41] = 42;
+  a0.a0[42] = 43;
+  a0.a0[43] = 44;
+  a0.a0[44] = 45;
+  a0.a0[45] = 46;
+  a0.a0[46] = 47;
+  a0.a0[47] = 48;
+  a0.a0[48] = 49;
+  a0.a0[49] = 50;
+  a0.a0[50] = 51;
+  a0.a0[51] = 52;
+  a0.a0[52] = 53;
+  a0.a0[53] = 54;
+  a0.a0[54] = 55;
+  a0.a0[55] = 56;
+  a0.a0[56] = 57;
+  a0.a0[57] = 58;
+  a0.a0[58] = 59;
+  a0.a0[59] = 60;
+  a0.a0[60] = 61;
+  a0.a0[61] = 62;
+  a0.a0[62] = 63;
+  a0.a0[63] = 64;
+  a0.a0[64] = 65;
+  a0.a0[65] = 66;
+  a0.a0[66] = 67;
+  a0.a0[67] = 68;
+  a0.a0[68] = 69;
+  a0.a0[69] = 70;
+  a0.a0[70] = 71;
+  a0.a0[71] = 72;
+  a0.a0[72] = 73;
+  a0.a0[73] = 74;
+  a0.a0[74] = 75;
+  a0.a0[75] = 76;
+  a0.a0[76] = 77;
+  a0.a0[77] = 78;
+  a0.a0[78] = 79;
+  a0.a0[79] = 80;
+  a0.a0[80] = 81;
+  a0.a0[81] = 82;
+  a0.a0[82] = 83;
+  a0.a0[83] = 84;
+  a0.a0[84] = 85;
+  a0.a0[85] = 86;
+  a0.a0[86] = 87;
+  a0.a0[87] = 88;
+  a0.a0[88] = 89;
+  a0.a0[89] = 90;
+  a0.a0[90] = 91;
+  a0.a0[91] = 92;
+  a0.a0[92] = 93;
+  a0.a0[93] = 94;
+  a0.a0[94] = 95;
+  a0.a0[95] = 96;
+  a0.a0[96] = 97;
+  a0.a0[97] = 98;
+  a0.a0[98] = 99;
+  a0.a0[99] = 100;
+
+  final result = passStructInlineArray100BytesLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(5050, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructStruct16BytesHomogeneousFloat2x5Leaf =
+    ffiTestFunctions.lookupFunction<
+            Float Function(
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2),
+            double Function(
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2)>(
+        "PassStructStruct16BytesHomogeneousFloat2x5",
+        isLeaf: true);
+
+/// Arguments in FPU registers on arm hardfp and arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStructStruct16BytesHomogeneousFloat2x5Leaf() {
+  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a4 = a4Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+  a1.a0.a0 = -5.0;
+  a1.a1[0].a0 = 6.0;
+  a1.a1[1].a0 = -7.0;
+  a1.a2 = 8.0;
+  a2.a0.a0 = -9.0;
+  a2.a1[0].a0 = 10.0;
+  a2.a1[1].a0 = -11.0;
+  a2.a2 = 12.0;
+  a3.a0.a0 = -13.0;
+  a3.a1[0].a0 = 14.0;
+  a3.a1[1].a0 = -15.0;
+  a3.a2 = 16.0;
+  a4.a0.a0 = -17.0;
+  a4.a1[0].a0 = 18.0;
+  a4.a1[1].a0 = -19.0;
+  a4.a2 = 20.0;
+
+  final result =
+      passStructStruct16BytesHomogeneousFloat2x5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStructStruct32BytesHomogeneousDouble2x5Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2),
+            double Function(
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2)>(
+        "PassStructStruct32BytesHomogeneousDouble2x5",
+        isLeaf: true);
+
+/// Arguments in FPU registers on arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStructStruct32BytesHomogeneousDouble2x5Leaf() {
+  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a4 = a4Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+  a1.a0.a0 = -5.0;
+  a1.a1[0].a0 = 6.0;
+  a1.a1[1].a0 = -7.0;
+  a1.a2 = 8.0;
+  a2.a0.a0 = -9.0;
+  a2.a1[0].a0 = 10.0;
+  a2.a1[1].a0 = -11.0;
+  a2.a2 = 12.0;
+  a3.a0.a0 = -13.0;
+  a3.a1[0].a0 = 14.0;
+  a3.a1[1].a0 = -15.0;
+  a3.a2 = 16.0;
+  a4.a0.a0 = -17.0;
+  a4.a1[0].a0 = 18.0;
+  a4.a1[1].a0 = -19.0;
+  a4.a2 = 20.0;
+
+  final result =
+      passStructStruct32BytesHomogeneousDouble2x5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStructStruct16BytesMixed3x10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3),
+        double Function(
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3)>("PassStructStruct16BytesMixed3x10",
+    isLeaf: true);
+
+/// On x64, arguments are split over FP and int registers.
+/// On x64, it will exhaust the integer registers with the 6th argument.
+/// The rest goes on the stack.
+/// On arm, arguments are 4 byte aligned.
+void testPassStructStruct16BytesMixed3x10Leaf() {
+  final a0Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[0].a1 = -3;
+  a0.a1[0].a2 = 4;
+  a0.a2[0] = -5;
+  a0.a2[1] = 6;
+  a1.a0.a0 = -7.0;
+  a1.a1[0].a0 = 8.0;
+  a1.a1[0].a1 = -9;
+  a1.a1[0].a2 = 10;
+  a1.a2[0] = -11;
+  a1.a2[1] = 12;
+  a2.a0.a0 = -13.0;
+  a2.a1[0].a0 = 14.0;
+  a2.a1[0].a1 = -15;
+  a2.a1[0].a2 = 16;
+  a2.a2[0] = -17;
+  a2.a2[1] = 18;
+  a3.a0.a0 = -19.0;
+  a3.a1[0].a0 = 20.0;
+  a3.a1[0].a1 = -21;
+  a3.a1[0].a2 = 22;
+  a3.a2[0] = -23;
+  a3.a2[1] = 24;
+  a4.a0.a0 = -25.0;
+  a4.a1[0].a0 = 26.0;
+  a4.a1[0].a1 = -27;
+  a4.a1[0].a2 = 28;
+  a4.a2[0] = -29;
+  a4.a2[1] = 30;
+  a5.a0.a0 = -31.0;
+  a5.a1[0].a0 = 32.0;
+  a5.a1[0].a1 = -33;
+  a5.a1[0].a2 = 34;
+  a5.a2[0] = -35;
+  a5.a2[1] = 36;
+  a6.a0.a0 = -37.0;
+  a6.a1[0].a0 = 38.0;
+  a6.a1[0].a1 = -39;
+  a6.a1[0].a2 = 40;
+  a6.a2[0] = -41;
+  a6.a2[1] = 42;
+  a7.a0.a0 = -43.0;
+  a7.a1[0].a0 = 44.0;
+  a7.a1[0].a1 = -45;
+  a7.a1[0].a2 = 46;
+  a7.a2[0] = -47;
+  a7.a2[1] = 48;
+  a8.a0.a0 = -49.0;
+  a8.a1[0].a0 = 50.0;
+  a8.a1[0].a1 = -51;
+  a8.a1[0].a2 = 52;
+  a8.a2[0] = -53;
+  a8.a2[1] = 54;
+  a9.a0.a0 = -55.0;
+  a9.a1[0].a0 = 56.0;
+  a9.a1[0].a1 = -57;
+  a9.a1[0].a2 = 58;
+  a9.a2[0] = -59;
+  a9.a2[1] = 60;
+
+  final result = passStructStruct16BytesMixed3x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(30.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUint8Struct32BytesInlineArrayMultiDimensionalILeaf =
+    ffiTestFunctions.lookupFunction<
+            Uint32 Function(
+                Uint8,
+                Struct32BytesInlineArrayMultiDimensionalInt,
+                Uint8,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                Uint8,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                Uint8),
+            int Function(
+                int,
+                Struct32BytesInlineArrayMultiDimensionalInt,
+                int,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                int,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                int)>("PassUint8Struct32BytesInlineArrayMultiDimensionalI",
+        isLeaf: true);
+
+/// Test multi dimensional inline array struct as argument.
+void testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf() {
+  int a0;
+  final a1Pointer = calloc<Struct32BytesInlineArrayMultiDimensionalInt>();
+  final Struct32BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
+  int a2;
+  final a3Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
+  final Struct8BytesInlineArrayMultiDimensionalInt a3 = a3Pointer.ref;
+  int a4;
+  final a5Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
+  final Struct8BytesInlineArrayMultiDimensionalInt a5 = a5Pointer.ref;
+  int a6;
+
+  a0 = 1;
+  a1.a0[0][0][0][0][0] = 2;
+  a1.a0[0][0][0][0][1] = 3;
+  a1.a0[0][0][0][1][0] = 4;
+  a1.a0[0][0][0][1][1] = 5;
+  a1.a0[0][0][1][0][0] = 6;
+  a1.a0[0][0][1][0][1] = 7;
+  a1.a0[0][0][1][1][0] = 8;
+  a1.a0[0][0][1][1][1] = 9;
+  a1.a0[0][1][0][0][0] = 10;
+  a1.a0[0][1][0][0][1] = 11;
+  a1.a0[0][1][0][1][0] = 12;
+  a1.a0[0][1][0][1][1] = 13;
+  a1.a0[0][1][1][0][0] = 14;
+  a1.a0[0][1][1][0][1] = 15;
+  a1.a0[0][1][1][1][0] = 16;
+  a1.a0[0][1][1][1][1] = 17;
+  a1.a0[1][0][0][0][0] = 18;
+  a1.a0[1][0][0][0][1] = 19;
+  a1.a0[1][0][0][1][0] = 20;
+  a1.a0[1][0][0][1][1] = 21;
+  a1.a0[1][0][1][0][0] = 22;
+  a1.a0[1][0][1][0][1] = 23;
+  a1.a0[1][0][1][1][0] = 24;
+  a1.a0[1][0][1][1][1] = 25;
+  a1.a0[1][1][0][0][0] = 26;
+  a1.a0[1][1][0][0][1] = 27;
+  a1.a0[1][1][0][1][0] = 28;
+  a1.a0[1][1][0][1][1] = 29;
+  a1.a0[1][1][1][0][0] = 30;
+  a1.a0[1][1][1][0][1] = 31;
+  a1.a0[1][1][1][1][0] = 32;
+  a1.a0[1][1][1][1][1] = 33;
+  a2 = 34;
+  a3.a0[0][0][0] = 35;
+  a3.a0[0][0][1] = 36;
+  a3.a0[0][1][0] = 37;
+  a3.a0[0][1][1] = 38;
+  a3.a0[1][0][0] = 39;
+  a3.a0[1][0][1] = 40;
+  a3.a0[1][1][0] = 41;
+  a3.a0[1][1][1] = 42;
+  a4 = 43;
+  a5.a0[0][0][0] = 44;
+  a5.a0[0][0][1] = 45;
+  a5.a0[0][1][0] = 46;
+  a5.a0[0][1][1] = 47;
+  a5.a0[1][0][0] = 48;
+  a5.a0[1][0][1] = 49;
+  a5.a0[1][1][0] = 50;
+  a5.a0[1][1][1] = 51;
+  a6 = 52;
+
+  final result = passUint8Struct32BytesInlineArrayMultiDimensionalILeaf(
+      a0, a1, a2, a3, a4, a5, a6);
+
+  print("result = $result");
+
+  Expect.equals(1378, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+}
+
+final passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf =
+    ffiTestFunctions.lookupFunction<
+            Uint32 Function(
+                Uint8, Struct4BytesInlineArrayMultiDimensionalInt, Uint8),
+            int Function(int, Struct4BytesInlineArrayMultiDimensionalInt, int)>(
+        "PassUint8Struct4BytesInlineArrayMultiDimensionalIn",
+        isLeaf: true);
+
+/// Test struct in multi dimensional inline array.
+void testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf() {
+  int a0;
+  final a1Pointer = calloc<Struct4BytesInlineArrayMultiDimensionalInt>();
+  final Struct4BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
+  int a2;
+
+  a0 = 1;
+  a1.a0[0][0].a0 = 2;
+  a1.a0[0][1].a0 = -3;
+  a1.a0[1][0].a0 = 4;
+  a1.a0[1][1].a0 = -5;
+  a2 = 6;
+
+  final result =
+      passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(5, result);
+
+  calloc.free(a1Pointer);
+}
+
+final passStruct3BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt),
+    int Function(
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt)>("PassStruct3BytesPackedIntx10", isLeaf: true);
+
+/// Small struct with mis-aligned member.
+void testPassStruct3BytesPackedIntx10Leaf() {
+  final a0Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result =
+      passStruct3BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt),
+    int Function(
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt)>("PassStruct8BytesPackedIntx10", isLeaf: true);
+
+/// Struct with mis-aligned member.
+void testPassStruct8BytesPackedIntx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a1.a0 = 6;
+  a1.a1 = 7;
+  a1.a2 = 8;
+  a1.a3 = 9;
+  a1.a4 = 10;
+  a2.a0 = 11;
+  a2.a1 = 12;
+  a2.a2 = 13;
+  a2.a3 = 14;
+  a2.a4 = 15;
+  a3.a0 = 16;
+  a3.a1 = 17;
+  a3.a2 = 18;
+  a3.a3 = 19;
+  a3.a4 = 20;
+  a4.a0 = 21;
+  a4.a1 = 22;
+  a4.a2 = 23;
+  a4.a3 = 24;
+  a4.a4 = 25;
+  a5.a0 = 26;
+  a5.a1 = 27;
+  a5.a2 = 28;
+  a5.a3 = 29;
+  a5.a4 = 30;
+  a6.a0 = 31;
+  a6.a1 = 32;
+  a6.a2 = 33;
+  a6.a3 = 34;
+  a6.a4 = 35;
+  a7.a0 = 36;
+  a7.a1 = 37;
+  a7.a2 = 38;
+  a7.a3 = 39;
+  a7.a4 = 40;
+  a8.a0 = 41;
+  a8.a1 = 42;
+  a8.a2 = 43;
+  a8.a3 = 44;
+  a8.a4 = 45;
+  a9.a0 = 46;
+  a9.a1 = 47;
+  a9.a2 = 48;
+  a9.a3 = 49;
+  a9.a4 = 50;
+
+  final result =
+      passStruct8BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(1275, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct9BytesPackedMixedx10DoubleInt32x2Leaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Double,
+            Int32,
+            Int32),
+        double Function(
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            double,
+            int,
+            int)>("PassStruct9BytesPackedMixedx10DoubleInt32x2", isLeaf: true);
+
+/// Struct with mis-aligned member.
+/// Tests backfilling of CPU and FPU registers.
+void testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf() {
+  final a0Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a9 = a9Pointer.ref;
+  double a10;
+  int a11;
+  int a12;
+
+  a0.a0 = 1;
+  a0.a1 = 2.0;
+  a1.a0 = 3;
+  a1.a1 = 4.0;
+  a2.a0 = 5;
+  a2.a1 = 6.0;
+  a3.a0 = 7;
+  a3.a1 = 8.0;
+  a4.a0 = 9;
+  a4.a1 = 10.0;
+  a5.a0 = 11;
+  a5.a1 = 12.0;
+  a6.a0 = 13;
+  a6.a1 = 14.0;
+  a7.a0 = 15;
+  a7.a1 = 16.0;
+  a8.a0 = 17;
+  a8.a1 = 18.0;
+  a9.a0 = 19;
+  a9.a1 = 20.0;
+  a10 = -21.0;
+  a11 = 22;
+  a12 = -23;
+
+  final result = passStruct9BytesPackedMixedx10DoubleInt32x2Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
+
+  print("result = $result");
+
+  Expect.approxEquals(188.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct5BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
+    Double Function(Struct5BytesPackedMixed),
+    double Function(
+        Struct5BytesPackedMixed)>("PassStruct5BytesPackedMixed", isLeaf: true);
+
+/// This packed struct happens to have only aligned members.
+void testPassStruct5BytesPackedMixedLeaf() {
+  final a0Pointer = calloc<Struct5BytesPackedMixed>();
+  final Struct5BytesPackedMixed a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2;
+
+  final result = passStruct5BytesPackedMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(1.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedAlignmentStruct5BytesPackedMixedLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(StructNestedAlignmentStruct5BytesPackedMixed),
+            double Function(StructNestedAlignmentStruct5BytesPackedMixed)>(
+        "PassStructNestedAlignmentStruct5BytesPackedMixed",
+        isLeaf: true);
+
+/// Check alignment of packed struct in non-packed struct.
+void testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf() {
+  final a0Pointer = calloc<StructNestedAlignmentStruct5BytesPackedMixed>();
+  final StructNestedAlignmentStruct5BytesPackedMixed a0 = a0Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1.a0 = 2.0;
+  a0.a1.a1 = 3;
+
+  final result = passStructNestedAlignmentStruct5BytesPackedMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(6.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct6BytesInlineArrayIntLeaf = ffiTestFunctions.lookupFunction<
+        Double Function(Struct6BytesInlineArrayInt),
+        double Function(Struct6BytesInlineArrayInt)>(
+    "PassStruct6BytesInlineArrayInt",
+    isLeaf: true);
+
+/// Check alignment of packed struct array in non-packed struct.
+void testPassStruct6BytesInlineArrayIntLeaf() {
+  final a0Pointer = calloc<Struct6BytesInlineArrayInt>();
+  final Struct6BytesInlineArrayInt a0 = a0Pointer.ref;
+
+  a0.a0[0].a0 = -1;
+  a0.a0[0].a1 = 2;
+  a0.a0[1].a0 = -3;
+  a0.a0[1].a1 = 4;
+
+  final result = passStruct6BytesInlineArrayIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(2.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct15BytesInlineArrayMixedLeaf = ffiTestFunctions.lookupFunction<
+        Double Function(Struct15BytesInlineArrayMixed),
+        double Function(Struct15BytesInlineArrayMixed)>(
+    "PassStruct15BytesInlineArrayMixed",
+    isLeaf: true);
+
+/// Check alignment of packed struct array in non-packed struct.
+void testPassStruct15BytesInlineArrayMixedLeaf() {
+  final a0Pointer = calloc<Struct15BytesInlineArrayMixed>();
+  final Struct15BytesInlineArrayMixed a0 = a0Pointer.ref;
+
+  a0.a0[0].a0 = -1.0;
+  a0.a0[0].a1 = 2;
+  a0.a0[1].a0 = -3.0;
+  a0.a0[1].a1 = 4;
+  a0.a0[2].a0 = -5.0;
+  a0.a0[2].a1 = 6;
+
+  final result = passStruct15BytesInlineArrayMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(3.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passUnion4BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed),
+    double Function(
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed)>("PassUnion4BytesMixedx10", isLeaf: true);
+
+/// Check placement of mixed integer/float union.
+void testPassUnion4BytesMixedx10Leaf() {
+  final a0Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a1.a0 = 2;
+  a2.a0 = 3;
+  a3.a0 = 4;
+  a4.a0 = 5;
+  a5.a0 = 6;
+  a6.a0 = 7;
+  a7.a0 = 8;
+  a8.a0 = 9;
+  a9.a0 = 10;
+
+  final result =
+      passUnion4BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(55.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat),
+    double Function(
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat)>("PassUnion8BytesNestedFloatx10", isLeaf: true);
+
+/// Check placement of mixed floats union.
+void testPassUnion8BytesNestedFloatx10Leaf() {
+  final a0Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a1.a0 = 2.0;
+  a2.a0 = -3.0;
+  a3.a0 = 4.0;
+  a4.a0 = -5.0;
+  a5.a0 = 6.0;
+  a6.a0 = -7.0;
+  a7.a0 = 8.0;
+  a8.a0 = -9.0;
+  a9.a0 = 10.0;
+
+  final result =
+      passUnion8BytesNestedFloatx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(5.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion9BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt),
+    double Function(
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt)>("PassUnion9BytesNestedIntx10", isLeaf: true);
+
+/// Mixed-size union argument.
+void testPassUnion9BytesNestedIntx10Leaf() {
+  final a0Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a1.a0.a0 = 4;
+  a1.a0.a1 = -5;
+  a1.a0.a2 = 6;
+  a2.a0.a0 = -7;
+  a2.a0.a1 = 8;
+  a2.a0.a2 = -9;
+  a3.a0.a0 = 10;
+  a3.a0.a1 = -11;
+  a3.a0.a2 = 12;
+  a4.a0.a0 = -13;
+  a4.a0.a1 = 14;
+  a4.a0.a2 = -15;
+  a5.a0.a0 = 16;
+  a5.a0.a1 = -17;
+  a5.a0.a2 = 18;
+  a6.a0.a0 = -19;
+  a6.a0.a1 = 20;
+  a6.a0.a2 = -21;
+  a7.a0.a0 = 22;
+  a7.a0.a1 = -23;
+  a7.a0.a2 = 24;
+  a8.a0.a0 = -25;
+  a8.a0.a1 = 26;
+  a8.a0.a2 = -27;
+  a9.a0.a0 = 28;
+  a9.a0.a1 = -29;
+  a9.a0.a2 = 30;
+
+  final result =
+      passUnion9BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(15.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion16BytesNestedInlineArrayFloatx10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat),
+            double Function(
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat)>(
+        "PassUnion16BytesNestedInlineArrayFloatx10",
+        isLeaf: true);
+
+/// Union with homogenous floats.
+void testPassUnion16BytesNestedInlineArrayFloatx10Leaf() {
+  final a0Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a9 = a9Pointer.ref;
+
+  a0.a0[0] = -1.0;
+  a0.a0[1] = 2.0;
+  a0.a0[2] = -3.0;
+  a0.a0[3] = 4.0;
+  a1.a0[0] = -5.0;
+  a1.a0[1] = 6.0;
+  a1.a0[2] = -7.0;
+  a1.a0[3] = 8.0;
+  a2.a0[0] = -9.0;
+  a2.a0[1] = 10.0;
+  a2.a0[2] = -11.0;
+  a2.a0[3] = 12.0;
+  a3.a0[0] = -13.0;
+  a3.a0[1] = 14.0;
+  a3.a0[2] = -15.0;
+  a3.a0[3] = 16.0;
+  a4.a0[0] = -17.0;
+  a4.a0[1] = 18.0;
+  a4.a0[2] = -19.0;
+  a4.a0[3] = 20.0;
+  a5.a0[0] = -21.0;
+  a5.a0[1] = 22.0;
+  a5.a0[2] = -23.0;
+  a5.a0[3] = 24.0;
+  a6.a0[0] = -25.0;
+  a6.a0[1] = 26.0;
+  a6.a0[2] = -27.0;
+  a6.a0[3] = 28.0;
+  a7.a0[0] = -29.0;
+  a7.a0[1] = 30.0;
+  a7.a0[2] = -31.0;
+  a7.a0[3] = 32.0;
+  a8.a0[0] = -33.0;
+  a8.a0[1] = 34.0;
+  a8.a0[2] = -35.0;
+  a8.a0[3] = 36.0;
+  a9.a0[0] = -37.0;
+  a9.a0[1] = 38.0;
+  a9.a0[2] = -39.0;
+  a9.a0[3] = 40.0;
+
+  final result = passUnion16BytesNestedInlineArrayFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(20.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion16BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
+        Double Function(
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat),
+        double Function(
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat)>("PassUnion16BytesNestedFloatx10",
+    isLeaf: true);
+
+/// Union with homogenous floats.
+void testPassUnion16BytesNestedFloatx10Leaf() {
+  final a0Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a0.a1 = 2.0;
+  a1.a0.a0 = -3.0;
+  a1.a0.a1 = 4.0;
+  a2.a0.a0 = -5.0;
+  a2.a0.a1 = 6.0;
+  a3.a0.a0 = -7.0;
+  a3.a0.a1 = 8.0;
+  a4.a0.a0 = -9.0;
+  a4.a0.a1 = 10.0;
+  a5.a0.a0 = -11.0;
+  a5.a0.a1 = 12.0;
+  a6.a0.a0 = -13.0;
+  a6.a0.a1 = 14.0;
+  a7.a0.a0 = -15.0;
+  a7.a0.a1 = 16.0;
+  a8.a0.a0 = -17.0;
+  a8.a0.a1 = 18.0;
+  a9.a0.a0 = -19.0;
+  a9.a0.a1 = 20.0;
+
+  final result = passUnion16BytesNestedFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final returnStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct1ByteInt Function(Int8),
+    Struct1ByteInt Function(int)>("ReturnStruct1ByteInt", isLeaf: true);
+
+/// Smallest struct with data.
+void testReturnStruct1ByteIntLeaf() {
+  int a0;
+
+  a0 = -1;
+
+  final result = returnStruct1ByteIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+}
+
+final returnStruct3BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct3BytesHomogeneousUint8 Function(Uint8, Uint8, Uint8),
+    Struct3BytesHomogeneousUint8 Function(
+        int, int, int)>("ReturnStruct3BytesHomogeneousUint8", isLeaf: true);
+
+/// Smaller than word size return value on all architectures.
+void testReturnStruct3BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+
+  final result = returnStruct3BytesHomogeneousUint8Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct3BytesInt2ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
+    Struct3BytesInt2ByteAligned Function(Int16, Int8),
+    Struct3BytesInt2ByteAligned Function(
+        int, int)>("ReturnStruct3BytesInt2ByteAligned", isLeaf: true);
+
+/// Smaller than word size return value on all architectures.
+/// With alignment rules taken into account size is 4 bytes.
+void testReturnStruct3BytesInt2ByteAlignedLeaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct3BytesInt2ByteAlignedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct4BytesHomogeneousInt16Leaf = ffiTestFunctions.lookupFunction<
+    Struct4BytesHomogeneousInt16 Function(Int16, Int16),
+    Struct4BytesHomogeneousInt16 Function(
+        int, int)>("ReturnStruct4BytesHomogeneousInt16", isLeaf: true);
+
+/// Word size return value on 32 bit architectures..
+void testReturnStruct4BytesHomogeneousInt16Leaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct4BytesHomogeneousInt16Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct7BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct7BytesHomogeneousUint8 Function(
+        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
+    Struct7BytesHomogeneousUint8 Function(int, int, int, int, int, int,
+        int)>("ReturnStruct7BytesHomogeneousUint8", isLeaf: true);
+
+/// Non-wordsize return value.
+void testReturnStruct7BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+
+  final result =
+      returnStruct7BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5, a6);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+}
+
+final returnStruct7BytesInt4ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
+    Struct7BytesInt4ByteAligned Function(Int32, Int16, Int8),
+    Struct7BytesInt4ByteAligned Function(
+        int, int, int)>("ReturnStruct7BytesInt4ByteAligned", isLeaf: true);
+
+/// Non-wordsize return value.
+/// With alignment rules taken into account size is 8 bytes.
+void testReturnStruct7BytesInt4ByteAlignedLeaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct7BytesInt4ByteAlignedLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct8BytesIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesInt Function(Int16, Int16, Int32),
+    Struct8BytesInt Function(
+        int, int, int)>("ReturnStruct8BytesInt", isLeaf: true);
+
+/// Return value in integer registers on many architectures.
+void testReturnStruct8BytesIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct8BytesIntLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct8BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesHomogeneousFloat Function(Float, Float),
+    Struct8BytesHomogeneousFloat Function(
+        double, double)>("ReturnStruct8BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value in FP registers on many architectures.
+void testReturnStruct8BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+
+  a0 = -1.0;
+  a1 = 2.0;
+
+  final result = returnStruct8BytesHomogeneousFloatLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+}
+
+final returnStruct8BytesMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesMixed Function(Float, Int16, Int16),
+    Struct8BytesMixed Function(
+        double, int, int)>("ReturnStruct8BytesMixed", isLeaf: true);
+
+/// Return value split over FP and integer register in x64.
+void testReturnStruct8BytesMixedLeaf() {
+  double a0;
+  int a1;
+  int a2;
+
+  a0 = -1.0;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct8BytesMixedLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct9BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct9BytesHomogeneousUint8 Function(
+        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
+    Struct9BytesHomogeneousUint8 Function(int, int, int, int, int, int, int,
+        int, int)>("ReturnStruct9BytesHomogeneousUint8", isLeaf: true);
+
+/// The minimum alignment of this struct is only 1 byte based on its fields.
+/// Test that the memory backing these structs is the right size and that
+/// dart:ffi trampolines do not write outside this size.
+void testReturnStruct9BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  int a8;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+  a7 = 8;
+  a8 = 9;
+
+  final result = returnStruct9BytesHomogeneousUint8Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+  Expect.equals(a7, result.a7);
+  Expect.equals(a8, result.a8);
+}
+
+final returnStruct9BytesInt4Or8ByteAlignedLeaf =
+    ffiTestFunctions.lookupFunction<
+        Struct9BytesInt4Or8ByteAligned Function(Int64, Int8),
+        Struct9BytesInt4Or8ByteAligned Function(
+            int, int)>("ReturnStruct9BytesInt4Or8ByteAligned", isLeaf: true);
+
+/// Return value in two integer registers on x64.
+/// With alignment rules taken into account size is 12 or 16 bytes.
+void testReturnStruct9BytesInt4Or8ByteAlignedLeaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct9BytesInt4Or8ByteAlignedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct12BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct12BytesHomogeneousFloat Function(Float, Float, Float),
+    Struct12BytesHomogeneousFloat Function(double, double,
+        double)>("ReturnStruct12BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value in FPU registers, but does not use all registers on arm hardfp
+/// and arm64.
+void testReturnStruct12BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+  double a2;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+
+  final result = returnStruct12BytesHomogeneousFloatLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+}
+
+final returnStruct16BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesHomogeneousFloat Function(Float, Float, Float, Float),
+    Struct16BytesHomogeneousFloat Function(double, double, double,
+        double)>("ReturnStruct16BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value in FPU registers on arm hardfp and arm64.
+void testReturnStruct16BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+
+  final result = returnStruct16BytesHomogeneousFloatLeaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+}
+
+final returnStruct16BytesMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesMixed Function(Double, Int64),
+    Struct16BytesMixed Function(
+        double, int)>("ReturnStruct16BytesMixed", isLeaf: true);
+
+/// Return value split over FP and integer register in x64.
+void testReturnStruct16BytesMixedLeaf() {
+  double a0;
+  int a1;
+
+  a0 = -1.0;
+  a1 = 2;
+
+  final result = returnStruct16BytesMixedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct16BytesMixed2Leaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesMixed2 Function(Float, Float, Float, Int32),
+    Struct16BytesMixed2 Function(double, double, double,
+        int)>("ReturnStruct16BytesMixed2", isLeaf: true);
+
+/// Return value split over FP and integer register in x64.
+/// The integer register contains half float half int.
+void testReturnStruct16BytesMixed2Leaf() {
+  double a0;
+  double a1;
+  double a2;
+  int a3;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4;
+
+  final result = returnStruct16BytesMixed2Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+}
+
+final returnStruct17BytesIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct17BytesInt Function(Int64, Int64, Int8),
+    Struct17BytesInt Function(
+        int, int, int)>("ReturnStruct17BytesInt", isLeaf: true);
+
+/// Rerturn value returned in preallocated space passed by pointer on most ABIs.
+/// Is non word size on purpose, to test that structs are rounded up to word size
+/// on all ABIs.
+void testReturnStruct17BytesIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct17BytesIntLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct19BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct19BytesHomogeneousUint8 Function(
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8),
+    Struct19BytesHomogeneousUint8 Function(
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int)>("ReturnStruct19BytesHomogeneousUint8", isLeaf: true);
+
+/// The minimum alignment of this struct is only 1 byte based on its fields.
+/// Test that the memory backing these structs is the right size and that
+/// dart:ffi trampolines do not write outside this size.
+void testReturnStruct19BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  int a8;
+  int a9;
+  int a10;
+  int a11;
+  int a12;
+  int a13;
+  int a14;
+  int a15;
+  int a16;
+  int a17;
+  int a18;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+  a7 = 8;
+  a8 = 9;
+  a9 = 10;
+  a10 = 11;
+  a11 = 12;
+  a12 = 13;
+  a13 = 14;
+  a14 = 15;
+  a15 = 16;
+  a16 = 17;
+  a17 = 18;
+  a18 = 19;
+
+  final result = returnStruct19BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5,
+      a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+  Expect.equals(a7, result.a7);
+  Expect.equals(a8, result.a8);
+  Expect.equals(a9, result.a9);
+  Expect.equals(a10, result.a10);
+  Expect.equals(a11, result.a11);
+  Expect.equals(a12, result.a12);
+  Expect.equals(a13, result.a13);
+  Expect.equals(a14, result.a14);
+  Expect.equals(a15, result.a15);
+  Expect.equals(a16, result.a16);
+  Expect.equals(a17, result.a17);
+  Expect.equals(a18, result.a18);
+}
+
+final returnStruct20BytesHomogeneousInt32Leaf = ffiTestFunctions.lookupFunction<
+    Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32, Int32),
+    Struct20BytesHomogeneousInt32 Function(int, int, int, int,
+        int)>("ReturnStruct20BytesHomogeneousInt32", isLeaf: true);
+
+/// Return value too big to go in cpu registers on arm64.
+void testReturnStruct20BytesHomogeneousInt32Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+
+  final result = returnStruct20BytesHomogeneousInt32Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+}
+
+final returnStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct20BytesHomogeneousFloat Function(Float, Float, Float, Float, Float),
+    Struct20BytesHomogeneousFloat Function(double, double, double, double,
+        double)>("ReturnStruct20BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value too big to go in FPU registers on x64, arm hardfp and arm64.
+void testReturnStruct20BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+  double a4;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+  a4 = -5.0;
+
+  final result = returnStruct20BytesHomogeneousFloatLeaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+  Expect.approxEquals(a4, result.a4);
+}
+
+final returnStruct32BytesHomogeneousDoubleLeaf =
+    ffiTestFunctions.lookupFunction<
+        Struct32BytesHomogeneousDouble Function(Double, Double, Double, Double),
+        Struct32BytesHomogeneousDouble Function(double, double, double,
+            double)>("ReturnStruct32BytesHomogeneousDouble", isLeaf: true);
+
+/// Return value in FPU registers on arm64.
+void testReturnStruct32BytesHomogeneousDoubleLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+
+  final result = returnStruct32BytesHomogeneousDoubleLeaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+}
+
+final returnStruct40BytesHomogeneousDoubleLeaf =
+    ffiTestFunctions.lookupFunction<
+        Struct40BytesHomogeneousDouble Function(
+            Double, Double, Double, Double, Double),
+        Struct40BytesHomogeneousDouble Function(double, double, double, double,
+            double)>("ReturnStruct40BytesHomogeneousDouble", isLeaf: true);
+
+/// Return value too big to go in FPU registers on arm64.
+void testReturnStruct40BytesHomogeneousDoubleLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+  double a4;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+  a4 = -5.0;
+
+  final result = returnStruct40BytesHomogeneousDoubleLeaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+  Expect.approxEquals(a4, result.a4);
+}
+
+final returnStruct1024BytesHomogeneousUint64Leaf =
+    ffiTestFunctions.lookupFunction<
+        Struct1024BytesHomogeneousUint64 Function(
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64),
+        Struct1024BytesHomogeneousUint64 Function(
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int)>("ReturnStruct1024BytesHomogeneousUint64", isLeaf: true);
+
+/// Test 1kb struct.
+void testReturnStruct1024BytesHomogeneousUint64Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  int a8;
+  int a9;
+  int a10;
+  int a11;
+  int a12;
+  int a13;
+  int a14;
+  int a15;
+  int a16;
+  int a17;
+  int a18;
+  int a19;
+  int a20;
+  int a21;
+  int a22;
+  int a23;
+  int a24;
+  int a25;
+  int a26;
+  int a27;
+  int a28;
+  int a29;
+  int a30;
+  int a31;
+  int a32;
+  int a33;
+  int a34;
+  int a35;
+  int a36;
+  int a37;
+  int a38;
+  int a39;
+  int a40;
+  int a41;
+  int a42;
+  int a43;
+  int a44;
+  int a45;
+  int a46;
+  int a47;
+  int a48;
+  int a49;
+  int a50;
+  int a51;
+  int a52;
+  int a53;
+  int a54;
+  int a55;
+  int a56;
+  int a57;
+  int a58;
+  int a59;
+  int a60;
+  int a61;
+  int a62;
+  int a63;
+  int a64;
+  int a65;
+  int a66;
+  int a67;
+  int a68;
+  int a69;
+  int a70;
+  int a71;
+  int a72;
+  int a73;
+  int a74;
+  int a75;
+  int a76;
+  int a77;
+  int a78;
+  int a79;
+  int a80;
+  int a81;
+  int a82;
+  int a83;
+  int a84;
+  int a85;
+  int a86;
+  int a87;
+  int a88;
+  int a89;
+  int a90;
+  int a91;
+  int a92;
+  int a93;
+  int a94;
+  int a95;
+  int a96;
+  int a97;
+  int a98;
+  int a99;
+  int a100;
+  int a101;
+  int a102;
+  int a103;
+  int a104;
+  int a105;
+  int a106;
+  int a107;
+  int a108;
+  int a109;
+  int a110;
+  int a111;
+  int a112;
+  int a113;
+  int a114;
+  int a115;
+  int a116;
+  int a117;
+  int a118;
+  int a119;
+  int a120;
+  int a121;
+  int a122;
+  int a123;
+  int a124;
+  int a125;
+  int a126;
+  int a127;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+  a7 = 8;
+  a8 = 9;
+  a9 = 10;
+  a10 = 11;
+  a11 = 12;
+  a12 = 13;
+  a13 = 14;
+  a14 = 15;
+  a15 = 16;
+  a16 = 17;
+  a17 = 18;
+  a18 = 19;
+  a19 = 20;
+  a20 = 21;
+  a21 = 22;
+  a22 = 23;
+  a23 = 24;
+  a24 = 25;
+  a25 = 26;
+  a26 = 27;
+  a27 = 28;
+  a28 = 29;
+  a29 = 30;
+  a30 = 31;
+  a31 = 32;
+  a32 = 33;
+  a33 = 34;
+  a34 = 35;
+  a35 = 36;
+  a36 = 37;
+  a37 = 38;
+  a38 = 39;
+  a39 = 40;
+  a40 = 41;
+  a41 = 42;
+  a42 = 43;
+  a43 = 44;
+  a44 = 45;
+  a45 = 46;
+  a46 = 47;
+  a47 = 48;
+  a48 = 49;
+  a49 = 50;
+  a50 = 51;
+  a51 = 52;
+  a52 = 53;
+  a53 = 54;
+  a54 = 55;
+  a55 = 56;
+  a56 = 57;
+  a57 = 58;
+  a58 = 59;
+  a59 = 60;
+  a60 = 61;
+  a61 = 62;
+  a62 = 63;
+  a63 = 64;
+  a64 = 65;
+  a65 = 66;
+  a66 = 67;
+  a67 = 68;
+  a68 = 69;
+  a69 = 70;
+  a70 = 71;
+  a71 = 72;
+  a72 = 73;
+  a73 = 74;
+  a74 = 75;
+  a75 = 76;
+  a76 = 77;
+  a77 = 78;
+  a78 = 79;
+  a79 = 80;
+  a80 = 81;
+  a81 = 82;
+  a82 = 83;
+  a83 = 84;
+  a84 = 85;
+  a85 = 86;
+  a86 = 87;
+  a87 = 88;
+  a88 = 89;
+  a89 = 90;
+  a90 = 91;
+  a91 = 92;
+  a92 = 93;
+  a93 = 94;
+  a94 = 95;
+  a95 = 96;
+  a96 = 97;
+  a97 = 98;
+  a98 = 99;
+  a99 = 100;
+  a100 = 101;
+  a101 = 102;
+  a102 = 103;
+  a103 = 104;
+  a104 = 105;
+  a105 = 106;
+  a106 = 107;
+  a107 = 108;
+  a108 = 109;
+  a109 = 110;
+  a110 = 111;
+  a111 = 112;
+  a112 = 113;
+  a113 = 114;
+  a114 = 115;
+  a115 = 116;
+  a116 = 117;
+  a117 = 118;
+  a118 = 119;
+  a119 = 120;
+  a120 = 121;
+  a121 = 122;
+  a122 = 123;
+  a123 = 124;
+  a124 = 125;
+  a125 = 126;
+  a126 = 127;
+  a127 = 128;
+
+  final result = returnStruct1024BytesHomogeneousUint64Leaf(
+      a0,
+      a1,
+      a2,
+      a3,
+      a4,
+      a5,
+      a6,
+      a7,
+      a8,
+      a9,
+      a10,
+      a11,
+      a12,
+      a13,
+      a14,
+      a15,
+      a16,
+      a17,
+      a18,
+      a19,
+      a20,
+      a21,
+      a22,
+      a23,
+      a24,
+      a25,
+      a26,
+      a27,
+      a28,
+      a29,
+      a30,
+      a31,
+      a32,
+      a33,
+      a34,
+      a35,
+      a36,
+      a37,
+      a38,
+      a39,
+      a40,
+      a41,
+      a42,
+      a43,
+      a44,
+      a45,
+      a46,
+      a47,
+      a48,
+      a49,
+      a50,
+      a51,
+      a52,
+      a53,
+      a54,
+      a55,
+      a56,
+      a57,
+      a58,
+      a59,
+      a60,
+      a61,
+      a62,
+      a63,
+      a64,
+      a65,
+      a66,
+      a67,
+      a68,
+      a69,
+      a70,
+      a71,
+      a72,
+      a73,
+      a74,
+      a75,
+      a76,
+      a77,
+      a78,
+      a79,
+      a80,
+      a81,
+      a82,
+      a83,
+      a84,
+      a85,
+      a86,
+      a87,
+      a88,
+      a89,
+      a90,
+      a91,
+      a92,
+      a93,
+      a94,
+      a95,
+      a96,
+      a97,
+      a98,
+      a99,
+      a100,
+      a101,
+      a102,
+      a103,
+      a104,
+      a105,
+      a106,
+      a107,
+      a108,
+      a109,
+      a110,
+      a111,
+      a112,
+      a113,
+      a114,
+      a115,
+      a116,
+      a117,
+      a118,
+      a119,
+      a120,
+      a121,
+      a122,
+      a123,
+      a124,
+      a125,
+      a126,
+      a127);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+  Expect.equals(a7, result.a7);
+  Expect.equals(a8, result.a8);
+  Expect.equals(a9, result.a9);
+  Expect.equals(a10, result.a10);
+  Expect.equals(a11, result.a11);
+  Expect.equals(a12, result.a12);
+  Expect.equals(a13, result.a13);
+  Expect.equals(a14, result.a14);
+  Expect.equals(a15, result.a15);
+  Expect.equals(a16, result.a16);
+  Expect.equals(a17, result.a17);
+  Expect.equals(a18, result.a18);
+  Expect.equals(a19, result.a19);
+  Expect.equals(a20, result.a20);
+  Expect.equals(a21, result.a21);
+  Expect.equals(a22, result.a22);
+  Expect.equals(a23, result.a23);
+  Expect.equals(a24, result.a24);
+  Expect.equals(a25, result.a25);
+  Expect.equals(a26, result.a26);
+  Expect.equals(a27, result.a27);
+  Expect.equals(a28, result.a28);
+  Expect.equals(a29, result.a29);
+  Expect.equals(a30, result.a30);
+  Expect.equals(a31, result.a31);
+  Expect.equals(a32, result.a32);
+  Expect.equals(a33, result.a33);
+  Expect.equals(a34, result.a34);
+  Expect.equals(a35, result.a35);
+  Expect.equals(a36, result.a36);
+  Expect.equals(a37, result.a37);
+  Expect.equals(a38, result.a38);
+  Expect.equals(a39, result.a39);
+  Expect.equals(a40, result.a40);
+  Expect.equals(a41, result.a41);
+  Expect.equals(a42, result.a42);
+  Expect.equals(a43, result.a43);
+  Expect.equals(a44, result.a44);
+  Expect.equals(a45, result.a45);
+  Expect.equals(a46, result.a46);
+  Expect.equals(a47, result.a47);
+  Expect.equals(a48, result.a48);
+  Expect.equals(a49, result.a49);
+  Expect.equals(a50, result.a50);
+  Expect.equals(a51, result.a51);
+  Expect.equals(a52, result.a52);
+  Expect.equals(a53, result.a53);
+  Expect.equals(a54, result.a54);
+  Expect.equals(a55, result.a55);
+  Expect.equals(a56, result.a56);
+  Expect.equals(a57, result.a57);
+  Expect.equals(a58, result.a58);
+  Expect.equals(a59, result.a59);
+  Expect.equals(a60, result.a60);
+  Expect.equals(a61, result.a61);
+  Expect.equals(a62, result.a62);
+  Expect.equals(a63, result.a63);
+  Expect.equals(a64, result.a64);
+  Expect.equals(a65, result.a65);
+  Expect.equals(a66, result.a66);
+  Expect.equals(a67, result.a67);
+  Expect.equals(a68, result.a68);
+  Expect.equals(a69, result.a69);
+  Expect.equals(a70, result.a70);
+  Expect.equals(a71, result.a71);
+  Expect.equals(a72, result.a72);
+  Expect.equals(a73, result.a73);
+  Expect.equals(a74, result.a74);
+  Expect.equals(a75, result.a75);
+  Expect.equals(a76, result.a76);
+  Expect.equals(a77, result.a77);
+  Expect.equals(a78, result.a78);
+  Expect.equals(a79, result.a79);
+  Expect.equals(a80, result.a80);
+  Expect.equals(a81, result.a81);
+  Expect.equals(a82, result.a82);
+  Expect.equals(a83, result.a83);
+  Expect.equals(a84, result.a84);
+  Expect.equals(a85, result.a85);
+  Expect.equals(a86, result.a86);
+  Expect.equals(a87, result.a87);
+  Expect.equals(a88, result.a88);
+  Expect.equals(a89, result.a89);
+  Expect.equals(a90, result.a90);
+  Expect.equals(a91, result.a91);
+  Expect.equals(a92, result.a92);
+  Expect.equals(a93, result.a93);
+  Expect.equals(a94, result.a94);
+  Expect.equals(a95, result.a95);
+  Expect.equals(a96, result.a96);
+  Expect.equals(a97, result.a97);
+  Expect.equals(a98, result.a98);
+  Expect.equals(a99, result.a99);
+  Expect.equals(a100, result.a100);
+  Expect.equals(a101, result.a101);
+  Expect.equals(a102, result.a102);
+  Expect.equals(a103, result.a103);
+  Expect.equals(a104, result.a104);
+  Expect.equals(a105, result.a105);
+  Expect.equals(a106, result.a106);
+  Expect.equals(a107, result.a107);
+  Expect.equals(a108, result.a108);
+  Expect.equals(a109, result.a109);
+  Expect.equals(a110, result.a110);
+  Expect.equals(a111, result.a111);
+  Expect.equals(a112, result.a112);
+  Expect.equals(a113, result.a113);
+  Expect.equals(a114, result.a114);
+  Expect.equals(a115, result.a115);
+  Expect.equals(a116, result.a116);
+  Expect.equals(a117, result.a117);
+  Expect.equals(a118, result.a118);
+  Expect.equals(a119, result.a119);
+  Expect.equals(a120, result.a120);
+  Expect.equals(a121, result.a121);
+  Expect.equals(a122, result.a122);
+  Expect.equals(a123, result.a123);
+  Expect.equals(a124, result.a124);
+  Expect.equals(a125, result.a125);
+  Expect.equals(a126, result.a126);
+  Expect.equals(a127, result.a127);
+}
+
+final returnStruct3BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct3BytesPackedInt Function(Int8, Int16),
+    Struct3BytesPackedInt Function(
+        int, int)>("ReturnStruct3BytesPackedInt", isLeaf: true);
+
+/// Small struct with mis-aligned member.
+void testReturnStruct3BytesPackedIntLeaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct3BytesPackedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct8BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesPackedInt Function(Uint8, Uint32, Uint8, Uint8, Uint8),
+    Struct8BytesPackedInt Function(
+        int, int, int, int, int)>("ReturnStruct8BytesPackedInt", isLeaf: true);
+
+/// Struct with mis-aligned member.
+void testReturnStruct8BytesPackedIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+
+  final result = returnStruct8BytesPackedIntLeaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+}
+
+final returnStruct9BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct9BytesPackedMixed Function(Uint8, Double),
+    Struct9BytesPackedMixed Function(
+        int, double)>("ReturnStruct9BytesPackedMixed", isLeaf: true);
+
+/// Struct with mis-aligned member.
+/// Tests backfilling of CPU and FPU registers.
+void testReturnStruct9BytesPackedMixedLeaf() {
+  int a0;
+  double a1;
+
+  a0 = 1;
+  a1 = 2.0;
+
+  final result = returnStruct9BytesPackedMixedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+}
+
+final returnUnion4BytesMixedLeaf = ffiTestFunctions.lookupFunction<
+    Union4BytesMixed Function(Uint32),
+    Union4BytesMixed Function(int)>("ReturnUnion4BytesMixed", isLeaf: true);
+
+/// Returning a mixed integer/float union.
+void testReturnUnion4BytesMixedLeaf() {
+  int a0;
+
+  a0 = 1;
+
+  final result = returnUnion4BytesMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+}
+
+final returnUnion8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
+    Union8BytesNestedFloat Function(Double),
+    Union8BytesNestedFloat Function(
+        double)>("ReturnUnion8BytesNestedFloat", isLeaf: true);
+
+/// Returning a floating point only union.
+void testReturnUnion8BytesNestedFloatLeaf() {
+  double a0;
+
+  a0 = -1.0;
+
+  final result = returnUnion8BytesNestedFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+}
+
+final returnUnion9BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+    Union9BytesNestedInt Function(Struct8BytesInt),
+    Union9BytesNestedInt Function(
+        Struct8BytesInt)>("ReturnUnion9BytesNestedInt", isLeaf: true);
+
+/// Returning a mixed-size union.
+void testReturnUnion9BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = returnUnion9BytesNestedIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+
+  calloc.free(a0Pointer);
+}
+
+final returnUnion16BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
+        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat),
+        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat)>(
+    "ReturnUnion16BytesNestedFloat",
+    isLeaf: true);
+
+/// Returning union with homogenous floats.
+void testReturnUnion16BytesNestedFloatLeaf() {
+  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+
+  final result = returnUnion16BytesNestedFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0.a0);
+  Expect.approxEquals(a0.a1, result.a0.a1);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct1ByteInt Function(Struct1ByteInt),
+    Struct1ByteInt Function(
+        Struct1ByteInt)>("ReturnStructArgumentStruct1ByteInt", isLeaf: true);
+
+/// Test that a struct passed in as argument can be returned.
+/// Especially for ffi callbacks.
+/// Struct is passed in int registers in most ABIs.
+void testReturnStructArgumentStruct1ByteIntLeaf() {
+  final a0Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+
+  final result = returnStructArgumentStruct1ByteIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentInt32x8Struct1ByteIntLeaf =
+    ffiTestFunctions
+        .lookupFunction<
+                Struct1ByteInt Function(Int32, Int32, Int32, Int32, Int32, Int32,
+                    Int32, Int32, Struct1ByteInt),
+                Struct1ByteInt Function(
+                    int, int, int, int, int, int, int, int, Struct1ByteInt)>(
+            "ReturnStructArgumentInt32x8Struct1ByteInt",
+            isLeaf: true);
+
+/// Test that a struct passed in as argument can be returned.
+/// Especially for ffi callbacks.
+/// Struct is passed on stack on all ABIs.
+void testReturnStructArgumentInt32x8Struct1ByteIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  final a8Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a8 = a8Pointer.ref;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+  a5 = 6;
+  a6 = -7;
+  a7 = 8;
+  a8.a0 = -9;
+
+  final result = returnStructArgumentInt32x8Struct1ByteIntLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.equals(a8.a0, result.a0);
+
+  calloc.free(a8Pointer);
+}
+
+final returnStructArgumentStruct8BytesHomogeneousFloatLeaf =
+    ffiTestFunctions.lookupFunction<
+            Struct8BytesHomogeneousFloat Function(Struct8BytesHomogeneousFloat),
+            Struct8BytesHomogeneousFloat Function(
+                Struct8BytesHomogeneousFloat)>(
+        "ReturnStructArgumentStruct8BytesHomogeneousFloat",
+        isLeaf: true);
+
+/// Test that a struct passed in as argument can be returned.
+/// Especially for ffi callbacks.
+/// Struct is passed in float registers in most ABIs.
+void testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf() {
+  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+
+  final result = returnStructArgumentStruct8BytesHomogeneousFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0);
+  Expect.approxEquals(a0.a1, result.a1);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStruct20BytesHomogeneousInt32Leaf =
+    ffiTestFunctions
+        .lookupFunction<
+                Struct20BytesHomogeneousInt32 Function(
+                    Struct20BytesHomogeneousInt32),
+                Struct20BytesHomogeneousInt32 Function(
+                    Struct20BytesHomogeneousInt32)>(
+            "ReturnStructArgumentStruct20BytesHomogeneousInt32",
+            isLeaf: true);
+
+/// On arm64, both argument and return value are passed in by pointer.
+void testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf() {
+  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a0.a3 = 4;
+  a0.a4 = -5;
+
+  final result = returnStructArgumentStruct20BytesHomogeneousInt32Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0);
+  Expect.equals(a0.a1, result.a1);
+  Expect.equals(a0.a2, result.a2);
+  Expect.equals(a0.a3, result.a3);
+  Expect.equals(a0.a4, result.a4);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf =
+    ffiTestFunctions.lookupFunction<
+            Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32,
+                Int32, Int32, Int32, Int32, Struct20BytesHomogeneousInt32),
+            Struct20BytesHomogeneousInt32 Function(int, int, int, int, int, int,
+                int, int, Struct20BytesHomogeneousInt32)>(
+        "ReturnStructArgumentInt32x8Struct20BytesHomogeneou",
+        isLeaf: true);
+
+/// On arm64, both argument and return value are passed in by pointer.
+/// Ints exhaust registers, so that pointer is passed on stack.
+void testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+  a5 = 6;
+  a6 = -7;
+  a7 = 8;
+  a8.a0 = -9;
+  a8.a1 = 10;
+  a8.a2 = -11;
+  a8.a3 = 12;
+  a8.a4 = -13;
+
+  final result = returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.equals(a8.a0, result.a0);
+  Expect.equals(a8.a1, result.a1);
+  Expect.equals(a8.a2, result.a2);
+  Expect.equals(a8.a3, result.a3);
+  Expect.equals(a8.a4, result.a4);
+
+  calloc.free(a8Pointer);
+}
+
+final returnStructArgumentStruct8BytesInlineArrayIntLeaf =
+    ffiTestFunctions.lookupFunction<
+            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt),
+            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt)>(
+        "ReturnStructArgumentStruct8BytesInlineArrayInt",
+        isLeaf: true);
+
+/// Test returning struct with inline array.
+void testReturnStructArgumentStruct8BytesInlineArrayIntLeaf() {
+  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
+
+  a0.a0[0] = 1;
+  a0.a0[1] = 2;
+  a0.a0[2] = 3;
+  a0.a0[3] = 4;
+  a0.a0[4] = 5;
+  a0.a0[5] = 6;
+  a0.a0[6] = 7;
+  a0.a0[7] = 8;
+
+  final result = returnStructArgumentStruct8BytesInlineArrayIntLeaf(a0);
+
+  print("result = $result");
+
+  for (int i = 0; i < 8; i++) {
+    Expect.equals(a0.a0[i], result.a0[i]);
+  }
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStructStruct16BytesHomogeneousLeaf =
+    ffiTestFunctions.lookupFunction<
+            StructStruct16BytesHomogeneousFloat2 Function(
+                StructStruct16BytesHomogeneousFloat2),
+            StructStruct16BytesHomogeneousFloat2 Function(
+                StructStruct16BytesHomogeneousFloat2)>(
+        "ReturnStructArgumentStructStruct16BytesHomogeneous",
+        isLeaf: true);
+
+/// Return value in FPU registers on arm hardfp and arm64.
+void testReturnStructArgumentStructStruct16BytesHomogeneousLeaf() {
+  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+
+  final result = returnStructArgumentStructStruct16BytesHomogeneousLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0.a0, result.a0.a0);
+  for (int i = 0; i < 2; i++) {
+    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
+  }
+  Expect.approxEquals(a0.a2, result.a2);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStructStruct32BytesHomogeneousLeaf =
+    ffiTestFunctions.lookupFunction<
+            StructStruct32BytesHomogeneousDouble2 Function(
+                StructStruct32BytesHomogeneousDouble2),
+            StructStruct32BytesHomogeneousDouble2 Function(
+                StructStruct32BytesHomogeneousDouble2)>(
+        "ReturnStructArgumentStructStruct32BytesHomogeneous",
+        isLeaf: true);
+
+/// Return value in FPU registers on arm64.
+void testReturnStructArgumentStructStruct32BytesHomogeneousLeaf() {
+  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+
+  final result = returnStructArgumentStructStruct32BytesHomogeneousLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0.a0, result.a0.a0);
+  for (int i = 0; i < 2; i++) {
+    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
+  }
+  Expect.approxEquals(a0.a2, result.a2);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStructStruct16BytesMixed3Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3),
+            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3)>(
+        "ReturnStructArgumentStructStruct16BytesMixed3",
+        isLeaf: true);
+
+/// On x64 Linux, return value is split over FP and int registers.
+void testReturnStructArgumentStructStruct16BytesMixed3Leaf() {
+  final a0Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[0].a1 = -3;
+  a0.a1[0].a2 = 4;
+  a0.a2[0] = -5;
+  a0.a2[1] = 6;
+
+  final result = returnStructArgumentStructStruct16BytesMixed3Leaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0.a0, result.a0.a0);
+  for (int i = 0; i < 1; i++) {
+    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
+    Expect.equals(a0.a1[i].a1, result.a1[i].a1);
+    Expect.equals(a0.a1[i].a2, result.a1[i].a2);
+  }
+  for (int i = 0; i < 2; i++) {
+    Expect.equals(a0.a2[i], result.a2[i]);
+  }
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
+    StructAlignmentInt16 Function(Int8, Int16, Int8),
+    StructAlignmentInt16 Function(
+        int, int, int)>("ReturnStructAlignmentInt16", isLeaf: true);
+
+/// Test alignment and padding of 16 byte int within struct.
+void testReturnStructAlignmentInt16Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStructAlignmentInt16Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
+    StructAlignmentInt32 Function(Int8, Int32, Int8),
+    StructAlignmentInt32 Function(
+        int, int, int)>("ReturnStructAlignmentInt32", isLeaf: true);
+
+/// Test alignment and padding of 32 byte int within struct.
+void testReturnStructAlignmentInt32Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStructAlignmentInt32Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
+    StructAlignmentInt64 Function(Int8, Int64, Int8),
+    StructAlignmentInt64 Function(
+        int, int, int)>("ReturnStructAlignmentInt64", isLeaf: true);
+
+/// Test alignment and padding of 64 byte int within struct.
+void testReturnStructAlignmentInt64Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStructAlignmentInt64Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct8BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+        Struct8BytesNestedInt Function(
+            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16),
+        Struct8BytesNestedInt Function(
+            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16)>(
+    "ReturnStruct8BytesNestedInt",
+    isLeaf: true);
+
+/// Simple nested struct.
+void testReturnStruct8BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+
+  final result = returnStruct8BytesNestedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesNestedFloat Function(Struct4BytesFloat, Struct4BytesFloat),
+    Struct8BytesNestedFloat Function(Struct4BytesFloat,
+        Struct4BytesFloat)>("ReturnStruct8BytesNestedFloat", isLeaf: true);
+
+/// Simple nested struct with floats.
+void testReturnStruct8BytesNestedFloatLeaf() {
+  final a0Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a1 = a1Pointer.ref;
+
+  a0.a0 = -1.0;
+  a1.a0 = 2.0;
+
+  final result = returnStruct8BytesNestedFloatLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0.a0);
+  Expect.approxEquals(a1.a0, result.a1.a0);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct8BytesNestedFloat2Leaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesNestedFloat2 Function(Struct4BytesFloat, Float),
+    Struct8BytesNestedFloat2 Function(Struct4BytesFloat,
+        double)>("ReturnStruct8BytesNestedFloat2", isLeaf: true);
+
+/// The nesting is irregular, testing homogenous float rules on arm and arm64,
+/// and the fpu register usage on x64.
+void testReturnStruct8BytesNestedFloat2Leaf() {
+  final a0Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a0 = a0Pointer.ref;
+  double a1;
+
+  a0.a0 = -1.0;
+  a1 = 2.0;
+
+  final result = returnStruct8BytesNestedFloat2Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0.a0);
+  Expect.approxEquals(a1, result.a1);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStruct8BytesNestedMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesNestedMixed Function(
+        Struct4BytesHomogeneousInt16, Struct4BytesFloat),
+    Struct8BytesNestedMixed Function(Struct4BytesHomogeneousInt16,
+        Struct4BytesFloat)>("ReturnStruct8BytesNestedMixed", isLeaf: true);
+
+/// Simple nested struct with mixed members.
+void testReturnStruct8BytesNestedMixedLeaf() {
+  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3.0;
+
+  final result = returnStruct8BytesNestedMixedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.approxEquals(a1.a0, result.a1.a0);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct16BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesNestedInt Function(
+        Struct8BytesNestedInt, Struct8BytesNestedInt),
+    Struct16BytesNestedInt Function(Struct8BytesNestedInt,
+        Struct8BytesNestedInt)>("ReturnStruct16BytesNestedInt", isLeaf: true);
+
+/// Deeper nested struct to test recursive member access.
+void testReturnStruct16BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a1.a0 = -3;
+  a0.a1.a1 = 4;
+  a1.a0.a0 = -5;
+  a1.a0.a1 = 6;
+  a1.a1.a0 = -7;
+  a1.a1.a1 = 8;
+
+  final result = returnStruct16BytesNestedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0.a0, result.a0.a0.a0);
+  Expect.equals(a0.a0.a1, result.a0.a0.a1);
+  Expect.equals(a0.a1.a0, result.a0.a1.a0);
+  Expect.equals(a0.a1.a1, result.a0.a1.a1);
+  Expect.equals(a1.a0.a0, result.a1.a0.a0);
+  Expect.equals(a1.a0.a1, result.a1.a0.a1);
+  Expect.equals(a1.a1.a0, result.a1.a1.a0);
+  Expect.equals(a1.a1.a1, result.a1.a1.a1);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct32BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct32BytesNestedInt Function(
+        Struct16BytesNestedInt, Struct16BytesNestedInt),
+    Struct32BytesNestedInt Function(Struct16BytesNestedInt,
+        Struct16BytesNestedInt)>("ReturnStruct32BytesNestedInt", isLeaf: true);
+
+/// Even deeper nested struct to test recursive member access.
+void testReturnStruct32BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0.a0 = -1;
+  a0.a0.a0.a1 = 2;
+  a0.a0.a1.a0 = -3;
+  a0.a0.a1.a1 = 4;
+  a0.a1.a0.a0 = -5;
+  a0.a1.a0.a1 = 6;
+  a0.a1.a1.a0 = -7;
+  a0.a1.a1.a1 = 8;
+  a1.a0.a0.a0 = -9;
+  a1.a0.a0.a1 = 10;
+  a1.a0.a1.a0 = -11;
+  a1.a0.a1.a1 = 12;
+  a1.a1.a0.a0 = -13;
+  a1.a1.a0.a1 = 14;
+  a1.a1.a1.a0 = -15;
+  a1.a1.a1.a1 = 16;
+
+  final result = returnStruct32BytesNestedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0.a0.a0, result.a0.a0.a0.a0);
+  Expect.equals(a0.a0.a0.a1, result.a0.a0.a0.a1);
+  Expect.equals(a0.a0.a1.a0, result.a0.a0.a1.a0);
+  Expect.equals(a0.a0.a1.a1, result.a0.a0.a1.a1);
+  Expect.equals(a0.a1.a0.a0, result.a0.a1.a0.a0);
+  Expect.equals(a0.a1.a0.a1, result.a0.a1.a0.a1);
+  Expect.equals(a0.a1.a1.a0, result.a0.a1.a1.a0);
+  Expect.equals(a0.a1.a1.a1, result.a0.a1.a1.a1);
+  Expect.equals(a1.a0.a0.a0, result.a1.a0.a0.a0);
+  Expect.equals(a1.a0.a0.a1, result.a1.a0.a0.a1);
+  Expect.equals(a1.a0.a1.a0, result.a1.a0.a1.a0);
+  Expect.equals(a1.a0.a1.a1, result.a1.a0.a1.a1);
+  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
+  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
+  Expect.equals(a1.a1.a1.a0, result.a1.a1.a1.a0);
+  Expect.equals(a1.a1.a1.a1, result.a1.a1.a1.a1);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIntStructAlignmentInt16Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructNestedIntStructAlignmentInt16 Function(
+                StructAlignmentInt16, StructAlignmentInt16),
+            StructNestedIntStructAlignmentInt16 Function(
+                StructAlignmentInt16, StructAlignmentInt16)>(
+        "ReturnStructNestedIntStructAlignmentInt16",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 16 byte int.
+void testReturnStructNestedIntStructAlignmentInt16Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+
+  final result = returnStructNestedIntStructAlignmentInt16Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+  Expect.equals(a1.a2, result.a1.a2);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIntStructAlignmentInt32Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructNestedIntStructAlignmentInt32 Function(
+                StructAlignmentInt32, StructAlignmentInt32),
+            StructNestedIntStructAlignmentInt32 Function(
+                StructAlignmentInt32, StructAlignmentInt32)>(
+        "ReturnStructNestedIntStructAlignmentInt32",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 32 byte int.
+void testReturnStructNestedIntStructAlignmentInt32Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+
+  final result = returnStructNestedIntStructAlignmentInt32Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+  Expect.equals(a1.a2, result.a1.a2);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIntStructAlignmentInt64Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructNestedIntStructAlignmentInt64 Function(
+                StructAlignmentInt64, StructAlignmentInt64),
+            StructNestedIntStructAlignmentInt64 Function(
+                StructAlignmentInt64, StructAlignmentInt64)>(
+        "ReturnStructNestedIntStructAlignmentInt64",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 64 byte int.
+void testReturnStructNestedIntStructAlignmentInt64Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+
+  final result = returnStructNestedIntStructAlignmentInt64Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+  Expect.equals(a1.a2, result.a1.a2);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIrregularEvenBiggerLeaf =
+    ffiTestFunctions.lookupFunction<
+        StructNestedIrregularEvenBigger Function(Uint64,
+            StructNestedIrregularBigger, StructNestedIrregularBigger, Double),
+        StructNestedIrregularEvenBigger Function(
+            int,
+            StructNestedIrregularBigger,
+            StructNestedIrregularBigger,
+            double)>("ReturnStructNestedIrregularEvenBigger", isLeaf: true);
+
+/// Return big irregular struct as smoke test.
+void testReturnStructNestedIrregularEvenBiggerLeaf() {
+  int a0;
+  final a1Pointer = calloc<StructNestedIrregularBigger>();
+  final StructNestedIrregularBigger a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructNestedIrregularBigger>();
+  final StructNestedIrregularBigger a2 = a2Pointer.ref;
+  double a3;
+
+  a0 = 1;
+  a1.a0.a0 = 2;
+  a1.a0.a1.a0.a0 = -3;
+  a1.a0.a1.a0.a1 = 4;
+  a1.a0.a1.a1.a0 = -5.0;
+  a1.a0.a2 = 6;
+  a1.a0.a3.a0.a0 = -7.0;
+  a1.a0.a3.a1 = 8.0;
+  a1.a0.a4 = 9;
+  a1.a0.a5.a0.a0 = 10.0;
+  a1.a0.a5.a1.a0 = -11.0;
+  a1.a0.a6 = 12;
+  a1.a1.a0.a0 = -13;
+  a1.a1.a0.a1 = 14;
+  a1.a1.a1.a0 = -15.0;
+  a1.a2 = 16.0;
+  a1.a3 = -17.0;
+  a2.a0.a0 = 18;
+  a2.a0.a1.a0.a0 = -19;
+  a2.a0.a1.a0.a1 = 20;
+  a2.a0.a1.a1.a0 = -21.0;
+  a2.a0.a2 = 22;
+  a2.a0.a3.a0.a0 = -23.0;
+  a2.a0.a3.a1 = 24.0;
+  a2.a0.a4 = 25;
+  a2.a0.a5.a0.a0 = 26.0;
+  a2.a0.a5.a1.a0 = -27.0;
+  a2.a0.a6 = 28;
+  a2.a1.a0.a0 = -29;
+  a2.a1.a0.a1 = 30;
+  a2.a1.a1.a0 = -31.0;
+  a2.a2 = 32.0;
+  a2.a3 = -33.0;
+  a3 = 34.0;
+
+  final result = returnStructNestedIrregularEvenBiggerLeaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1.a0.a0, result.a1.a0.a0);
+  Expect.equals(a1.a0.a1.a0.a0, result.a1.a0.a1.a0.a0);
+  Expect.equals(a1.a0.a1.a0.a1, result.a1.a0.a1.a0.a1);
+  Expect.approxEquals(a1.a0.a1.a1.a0, result.a1.a0.a1.a1.a0);
+  Expect.equals(a1.a0.a2, result.a1.a0.a2);
+  Expect.approxEquals(a1.a0.a3.a0.a0, result.a1.a0.a3.a0.a0);
+  Expect.approxEquals(a1.a0.a3.a1, result.a1.a0.a3.a1);
+  Expect.equals(a1.a0.a4, result.a1.a0.a4);
+  Expect.approxEquals(a1.a0.a5.a0.a0, result.a1.a0.a5.a0.a0);
+  Expect.approxEquals(a1.a0.a5.a1.a0, result.a1.a0.a5.a1.a0);
+  Expect.equals(a1.a0.a6, result.a1.a0.a6);
+  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
+  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
+  Expect.approxEquals(a1.a1.a1.a0, result.a1.a1.a1.a0);
+  Expect.approxEquals(a1.a2, result.a1.a2);
+  Expect.approxEquals(a1.a3, result.a1.a3);
+  Expect.equals(a2.a0.a0, result.a2.a0.a0);
+  Expect.equals(a2.a0.a1.a0.a0, result.a2.a0.a1.a0.a0);
+  Expect.equals(a2.a0.a1.a0.a1, result.a2.a0.a1.a0.a1);
+  Expect.approxEquals(a2.a0.a1.a1.a0, result.a2.a0.a1.a1.a0);
+  Expect.equals(a2.a0.a2, result.a2.a0.a2);
+  Expect.approxEquals(a2.a0.a3.a0.a0, result.a2.a0.a3.a0.a0);
+  Expect.approxEquals(a2.a0.a3.a1, result.a2.a0.a3.a1);
+  Expect.equals(a2.a0.a4, result.a2.a0.a4);
+  Expect.approxEquals(a2.a0.a5.a0.a0, result.a2.a0.a5.a0.a0);
+  Expect.approxEquals(a2.a0.a5.a1.a0, result.a2.a0.a5.a1.a0);
+  Expect.equals(a2.a0.a6, result.a2.a0.a6);
+  Expect.equals(a2.a1.a0.a0, result.a2.a1.a0.a0);
+  Expect.equals(a2.a1.a0.a1, result.a2.a1.a0.a1);
+  Expect.approxEquals(a2.a1.a1.a0, result.a2.a1.a1.a0);
+  Expect.approxEquals(a2.a2, result.a2.a2);
+  Expect.approxEquals(a2.a3, result.a2.a3);
+  Expect.approxEquals(a3, result.a3);
+
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+}
diff --git a/tests/ffi/function_structs_by_value_generated_test.dart b/tests/ffi/function_structs_by_value_generated_test.dart
index 9504081..14557da 100644
--- a/tests/ffi/function_structs_by_value_generated_test.dart
+++ b/tests/ffi/function_structs_by_value_generated_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 //
 // This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
 //
 // SharedObjects=ffi_test_functions
 // VMOptions=
@@ -17,6 +18,9 @@
 
 import 'dylib_utils.dart';
 
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
 final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 void main() {
   for (int i = 0; i < 10; ++i) {
@@ -133,1324 +137,9 @@
     testReturnStructNestedIntStructAlignmentInt32();
     testReturnStructNestedIntStructAlignmentInt64();
     testReturnStructNestedIrregularEvenBigger();
-    testPassStruct1ByteIntx10Leaf();
-    testPassStruct3BytesHomogeneousUint8x10Leaf();
-    testPassStruct3BytesInt2ByteAlignedx10Leaf();
-    testPassStruct4BytesHomogeneousInt16x10Leaf();
-    testPassStruct7BytesHomogeneousUint8x10Leaf();
-    testPassStruct7BytesInt4ByteAlignedx10Leaf();
-    testPassStruct8BytesIntx10Leaf();
-    testPassStruct8BytesHomogeneousFloatx10Leaf();
-    testPassStruct8BytesMixedx10Leaf();
-    testPassStruct9BytesHomogeneousUint8x10Leaf();
-    testPassStruct9BytesInt4Or8ByteAlignedx10Leaf();
-    testPassStruct12BytesHomogeneousFloatx6Leaf();
-    testPassStruct16BytesHomogeneousFloatx5Leaf();
-    testPassStruct16BytesMixedx10Leaf();
-    testPassStruct16BytesMixed2x10Leaf();
-    testPassStruct17BytesIntx10Leaf();
-    testPassStruct19BytesHomogeneousUint8x10Leaf();
-    testPassStruct20BytesHomogeneousInt32x10Leaf();
-    testPassStruct20BytesHomogeneousFloatLeaf();
-    testPassStruct32BytesHomogeneousDoublex5Leaf();
-    testPassStruct40BytesHomogeneousDoubleLeaf();
-    testPassStruct1024BytesHomogeneousUint64Leaf();
-    testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf();
-    testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf();
-    testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf();
-    testPassDoublex6Struct16BytesMixedx4Int32Leaf();
-    testPassInt32x4Struct16BytesMixedx4DoubleLeaf();
-    testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf();
-    testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf();
-    testPassStructAlignmentInt16Leaf();
-    testPassStructAlignmentInt32Leaf();
-    testPassStructAlignmentInt64Leaf();
-    testPassStruct8BytesNestedIntx10Leaf();
-    testPassStruct8BytesNestedFloatx10Leaf();
-    testPassStruct8BytesNestedFloat2x10Leaf();
-    testPassStruct8BytesNestedMixedx10Leaf();
-    testPassStruct16BytesNestedIntx2Leaf();
-    testPassStruct32BytesNestedIntx2Leaf();
-    testPassStructNestedIntStructAlignmentInt16Leaf();
-    testPassStructNestedIntStructAlignmentInt32Leaf();
-    testPassStructNestedIntStructAlignmentInt64Leaf();
-    testPassStructNestedIrregularEvenBiggerx4Leaf();
-    testPassStruct8BytesInlineArrayIntx4Leaf();
-    testPassStructInlineArrayIrregularx4Leaf();
-    testPassStructInlineArray100BytesLeaf();
-    testPassStructStruct16BytesHomogeneousFloat2x5Leaf();
-    testPassStructStruct32BytesHomogeneousDouble2x5Leaf();
-    testPassStructStruct16BytesMixed3x10Leaf();
-    testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf();
-    testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf();
-    testPassStruct3BytesPackedIntx10Leaf();
-    testPassStruct8BytesPackedIntx10Leaf();
-    testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf();
-    testPassStruct5BytesPackedMixedLeaf();
-    testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf();
-    testPassStruct6BytesInlineArrayIntLeaf();
-    testPassStruct15BytesInlineArrayMixedLeaf();
-    testPassUnion4BytesMixedx10Leaf();
-    testPassUnion8BytesNestedFloatx10Leaf();
-    testPassUnion9BytesNestedIntx10Leaf();
-    testPassUnion16BytesNestedInlineArrayFloatx10Leaf();
-    testPassUnion16BytesNestedFloatx10Leaf();
-    testReturnStruct1ByteIntLeaf();
-    testReturnStruct3BytesHomogeneousUint8Leaf();
-    testReturnStruct3BytesInt2ByteAlignedLeaf();
-    testReturnStruct4BytesHomogeneousInt16Leaf();
-    testReturnStruct7BytesHomogeneousUint8Leaf();
-    testReturnStruct7BytesInt4ByteAlignedLeaf();
-    testReturnStruct8BytesIntLeaf();
-    testReturnStruct8BytesHomogeneousFloatLeaf();
-    testReturnStruct8BytesMixedLeaf();
-    testReturnStruct9BytesHomogeneousUint8Leaf();
-    testReturnStruct9BytesInt4Or8ByteAlignedLeaf();
-    testReturnStruct12BytesHomogeneousFloatLeaf();
-    testReturnStruct16BytesHomogeneousFloatLeaf();
-    testReturnStruct16BytesMixedLeaf();
-    testReturnStruct16BytesMixed2Leaf();
-    testReturnStruct17BytesIntLeaf();
-    testReturnStruct19BytesHomogeneousUint8Leaf();
-    testReturnStruct20BytesHomogeneousInt32Leaf();
-    testReturnStruct20BytesHomogeneousFloatLeaf();
-    testReturnStruct32BytesHomogeneousDoubleLeaf();
-    testReturnStruct40BytesHomogeneousDoubleLeaf();
-    testReturnStruct1024BytesHomogeneousUint64Leaf();
-    testReturnStruct3BytesPackedIntLeaf();
-    testReturnStruct8BytesPackedIntLeaf();
-    testReturnStruct9BytesPackedMixedLeaf();
-    testReturnUnion4BytesMixedLeaf();
-    testReturnUnion8BytesNestedFloatLeaf();
-    testReturnUnion9BytesNestedIntLeaf();
-    testReturnUnion16BytesNestedFloatLeaf();
-    testReturnStructArgumentStruct1ByteIntLeaf();
-    testReturnStructArgumentInt32x8Struct1ByteIntLeaf();
-    testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf();
-    testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf();
-    testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf();
-    testReturnStructArgumentStruct8BytesInlineArrayIntLeaf();
-    testReturnStructArgumentStructStruct16BytesHomogeneousLeaf();
-    testReturnStructArgumentStructStruct32BytesHomogeneousLeaf();
-    testReturnStructArgumentStructStruct16BytesMixed3Leaf();
-    testReturnStructAlignmentInt16Leaf();
-    testReturnStructAlignmentInt32Leaf();
-    testReturnStructAlignmentInt64Leaf();
-    testReturnStruct8BytesNestedIntLeaf();
-    testReturnStruct8BytesNestedFloatLeaf();
-    testReturnStruct8BytesNestedFloat2Leaf();
-    testReturnStruct8BytesNestedMixedLeaf();
-    testReturnStruct16BytesNestedIntLeaf();
-    testReturnStruct32BytesNestedIntLeaf();
-    testReturnStructNestedIntStructAlignmentInt16Leaf();
-    testReturnStructNestedIntStructAlignmentInt32Leaf();
-    testReturnStructNestedIntStructAlignmentInt64Leaf();
-    testReturnStructNestedIrregularEvenBiggerLeaf();
   }
 }
 
-class Struct1ByteInt extends Struct {
-  @Int8()
-  external int a0;
-
-  String toString() => "(${a0})";
-}
-
-class Struct3BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  external int a0;
-
-  @Uint8()
-  external int a1;
-
-  @Uint8()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct3BytesInt2ByteAligned extends Struct {
-  @Int16()
-  external int a0;
-
-  @Int8()
-  external int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct4BytesHomogeneousInt16 extends Struct {
-  @Int16()
-  external int a0;
-
-  @Int16()
-  external int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct4BytesFloat extends Struct {
-  @Float()
-  external double a0;
-
-  String toString() => "(${a0})";
-}
-
-class Struct7BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  external int a0;
-
-  @Uint8()
-  external int a1;
-
-  @Uint8()
-  external int a2;
-
-  @Uint8()
-  external int a3;
-
-  @Uint8()
-  external int a4;
-
-  @Uint8()
-  external int a5;
-
-  @Uint8()
-  external int a6;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
-}
-
-class Struct7BytesInt4ByteAligned extends Struct {
-  @Int32()
-  external int a0;
-
-  @Int16()
-  external int a1;
-
-  @Int8()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct8BytesInt extends Struct {
-  @Int16()
-  external int a0;
-
-  @Int16()
-  external int a1;
-
-  @Int32()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct8BytesHomogeneousFloat extends Struct {
-  @Float()
-  external double a0;
-
-  @Float()
-  external double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesFloat extends Struct {
-  @Double()
-  external double a0;
-
-  String toString() => "(${a0})";
-}
-
-class Struct8BytesMixed extends Struct {
-  @Float()
-  external double a0;
-
-  @Int16()
-  external int a1;
-
-  @Int16()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct9BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  external int a0;
-
-  @Uint8()
-  external int a1;
-
-  @Uint8()
-  external int a2;
-
-  @Uint8()
-  external int a3;
-
-  @Uint8()
-  external int a4;
-
-  @Uint8()
-  external int a5;
-
-  @Uint8()
-  external int a6;
-
-  @Uint8()
-  external int a7;
-
-  @Uint8()
-  external int a8;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})";
-}
-
-class Struct9BytesInt4Or8ByteAligned extends Struct {
-  @Int64()
-  external int a0;
-
-  @Int8()
-  external int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct12BytesHomogeneousFloat extends Struct {
-  @Float()
-  external double a0;
-
-  @Float()
-  external double a1;
-
-  @Float()
-  external double a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct16BytesHomogeneousFloat extends Struct {
-  @Float()
-  external double a0;
-
-  @Float()
-  external double a1;
-
-  @Float()
-  external double a2;
-
-  @Float()
-  external double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct16BytesMixed extends Struct {
-  @Double()
-  external double a0;
-
-  @Int64()
-  external int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct16BytesMixed2 extends Struct {
-  @Float()
-  external double a0;
-
-  @Float()
-  external double a1;
-
-  @Float()
-  external double a2;
-
-  @Int32()
-  external int a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct17BytesInt extends Struct {
-  @Int64()
-  external int a0;
-
-  @Int64()
-  external int a1;
-
-  @Int8()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct19BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  external int a0;
-
-  @Uint8()
-  external int a1;
-
-  @Uint8()
-  external int a2;
-
-  @Uint8()
-  external int a3;
-
-  @Uint8()
-  external int a4;
-
-  @Uint8()
-  external int a5;
-
-  @Uint8()
-  external int a6;
-
-  @Uint8()
-  external int a7;
-
-  @Uint8()
-  external int a8;
-
-  @Uint8()
-  external int a9;
-
-  @Uint8()
-  external int a10;
-
-  @Uint8()
-  external int a11;
-
-  @Uint8()
-  external int a12;
-
-  @Uint8()
-  external int a13;
-
-  @Uint8()
-  external int a14;
-
-  @Uint8()
-  external int a15;
-
-  @Uint8()
-  external int a16;
-
-  @Uint8()
-  external int a17;
-
-  @Uint8()
-  external int a18;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18})";
-}
-
-class Struct20BytesHomogeneousInt32 extends Struct {
-  @Int32()
-  external int a0;
-
-  @Int32()
-  external int a1;
-
-  @Int32()
-  external int a2;
-
-  @Int32()
-  external int a3;
-
-  @Int32()
-  external int a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-class Struct20BytesHomogeneousFloat extends Struct {
-  @Float()
-  external double a0;
-
-  @Float()
-  external double a1;
-
-  @Float()
-  external double a2;
-
-  @Float()
-  external double a3;
-
-  @Float()
-  external double a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-class Struct32BytesHomogeneousDouble extends Struct {
-  @Double()
-  external double a0;
-
-  @Double()
-  external double a1;
-
-  @Double()
-  external double a2;
-
-  @Double()
-  external double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct40BytesHomogeneousDouble extends Struct {
-  @Double()
-  external double a0;
-
-  @Double()
-  external double a1;
-
-  @Double()
-  external double a2;
-
-  @Double()
-  external double a3;
-
-  @Double()
-  external double a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-class Struct1024BytesHomogeneousUint64 extends Struct {
-  @Uint64()
-  external int a0;
-
-  @Uint64()
-  external int a1;
-
-  @Uint64()
-  external int a2;
-
-  @Uint64()
-  external int a3;
-
-  @Uint64()
-  external int a4;
-
-  @Uint64()
-  external int a5;
-
-  @Uint64()
-  external int a6;
-
-  @Uint64()
-  external int a7;
-
-  @Uint64()
-  external int a8;
-
-  @Uint64()
-  external int a9;
-
-  @Uint64()
-  external int a10;
-
-  @Uint64()
-  external int a11;
-
-  @Uint64()
-  external int a12;
-
-  @Uint64()
-  external int a13;
-
-  @Uint64()
-  external int a14;
-
-  @Uint64()
-  external int a15;
-
-  @Uint64()
-  external int a16;
-
-  @Uint64()
-  external int a17;
-
-  @Uint64()
-  external int a18;
-
-  @Uint64()
-  external int a19;
-
-  @Uint64()
-  external int a20;
-
-  @Uint64()
-  external int a21;
-
-  @Uint64()
-  external int a22;
-
-  @Uint64()
-  external int a23;
-
-  @Uint64()
-  external int a24;
-
-  @Uint64()
-  external int a25;
-
-  @Uint64()
-  external int a26;
-
-  @Uint64()
-  external int a27;
-
-  @Uint64()
-  external int a28;
-
-  @Uint64()
-  external int a29;
-
-  @Uint64()
-  external int a30;
-
-  @Uint64()
-  external int a31;
-
-  @Uint64()
-  external int a32;
-
-  @Uint64()
-  external int a33;
-
-  @Uint64()
-  external int a34;
-
-  @Uint64()
-  external int a35;
-
-  @Uint64()
-  external int a36;
-
-  @Uint64()
-  external int a37;
-
-  @Uint64()
-  external int a38;
-
-  @Uint64()
-  external int a39;
-
-  @Uint64()
-  external int a40;
-
-  @Uint64()
-  external int a41;
-
-  @Uint64()
-  external int a42;
-
-  @Uint64()
-  external int a43;
-
-  @Uint64()
-  external int a44;
-
-  @Uint64()
-  external int a45;
-
-  @Uint64()
-  external int a46;
-
-  @Uint64()
-  external int a47;
-
-  @Uint64()
-  external int a48;
-
-  @Uint64()
-  external int a49;
-
-  @Uint64()
-  external int a50;
-
-  @Uint64()
-  external int a51;
-
-  @Uint64()
-  external int a52;
-
-  @Uint64()
-  external int a53;
-
-  @Uint64()
-  external int a54;
-
-  @Uint64()
-  external int a55;
-
-  @Uint64()
-  external int a56;
-
-  @Uint64()
-  external int a57;
-
-  @Uint64()
-  external int a58;
-
-  @Uint64()
-  external int a59;
-
-  @Uint64()
-  external int a60;
-
-  @Uint64()
-  external int a61;
-
-  @Uint64()
-  external int a62;
-
-  @Uint64()
-  external int a63;
-
-  @Uint64()
-  external int a64;
-
-  @Uint64()
-  external int a65;
-
-  @Uint64()
-  external int a66;
-
-  @Uint64()
-  external int a67;
-
-  @Uint64()
-  external int a68;
-
-  @Uint64()
-  external int a69;
-
-  @Uint64()
-  external int a70;
-
-  @Uint64()
-  external int a71;
-
-  @Uint64()
-  external int a72;
-
-  @Uint64()
-  external int a73;
-
-  @Uint64()
-  external int a74;
-
-  @Uint64()
-  external int a75;
-
-  @Uint64()
-  external int a76;
-
-  @Uint64()
-  external int a77;
-
-  @Uint64()
-  external int a78;
-
-  @Uint64()
-  external int a79;
-
-  @Uint64()
-  external int a80;
-
-  @Uint64()
-  external int a81;
-
-  @Uint64()
-  external int a82;
-
-  @Uint64()
-  external int a83;
-
-  @Uint64()
-  external int a84;
-
-  @Uint64()
-  external int a85;
-
-  @Uint64()
-  external int a86;
-
-  @Uint64()
-  external int a87;
-
-  @Uint64()
-  external int a88;
-
-  @Uint64()
-  external int a89;
-
-  @Uint64()
-  external int a90;
-
-  @Uint64()
-  external int a91;
-
-  @Uint64()
-  external int a92;
-
-  @Uint64()
-  external int a93;
-
-  @Uint64()
-  external int a94;
-
-  @Uint64()
-  external int a95;
-
-  @Uint64()
-  external int a96;
-
-  @Uint64()
-  external int a97;
-
-  @Uint64()
-  external int a98;
-
-  @Uint64()
-  external int a99;
-
-  @Uint64()
-  external int a100;
-
-  @Uint64()
-  external int a101;
-
-  @Uint64()
-  external int a102;
-
-  @Uint64()
-  external int a103;
-
-  @Uint64()
-  external int a104;
-
-  @Uint64()
-  external int a105;
-
-  @Uint64()
-  external int a106;
-
-  @Uint64()
-  external int a107;
-
-  @Uint64()
-  external int a108;
-
-  @Uint64()
-  external int a109;
-
-  @Uint64()
-  external int a110;
-
-  @Uint64()
-  external int a111;
-
-  @Uint64()
-  external int a112;
-
-  @Uint64()
-  external int a113;
-
-  @Uint64()
-  external int a114;
-
-  @Uint64()
-  external int a115;
-
-  @Uint64()
-  external int a116;
-
-  @Uint64()
-  external int a117;
-
-  @Uint64()
-  external int a118;
-
-  @Uint64()
-  external int a119;
-
-  @Uint64()
-  external int a120;
-
-  @Uint64()
-  external int a121;
-
-  @Uint64()
-  external int a122;
-
-  @Uint64()
-  external int a123;
-
-  @Uint64()
-  external int a124;
-
-  @Uint64()
-  external int a125;
-
-  @Uint64()
-  external int a126;
-
-  @Uint64()
-  external int a127;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18}, ${a19}, ${a20}, ${a21}, ${a22}, ${a23}, ${a24}, ${a25}, ${a26}, ${a27}, ${a28}, ${a29}, ${a30}, ${a31}, ${a32}, ${a33}, ${a34}, ${a35}, ${a36}, ${a37}, ${a38}, ${a39}, ${a40}, ${a41}, ${a42}, ${a43}, ${a44}, ${a45}, ${a46}, ${a47}, ${a48}, ${a49}, ${a50}, ${a51}, ${a52}, ${a53}, ${a54}, ${a55}, ${a56}, ${a57}, ${a58}, ${a59}, ${a60}, ${a61}, ${a62}, ${a63}, ${a64}, ${a65}, ${a66}, ${a67}, ${a68}, ${a69}, ${a70}, ${a71}, ${a72}, ${a73}, ${a74}, ${a75}, ${a76}, ${a77}, ${a78}, ${a79}, ${a80}, ${a81}, ${a82}, ${a83}, ${a84}, ${a85}, ${a86}, ${a87}, ${a88}, ${a89}, ${a90}, ${a91}, ${a92}, ${a93}, ${a94}, ${a95}, ${a96}, ${a97}, ${a98}, ${a99}, ${a100}, ${a101}, ${a102}, ${a103}, ${a104}, ${a105}, ${a106}, ${a107}, ${a108}, ${a109}, ${a110}, ${a111}, ${a112}, ${a113}, ${a114}, ${a115}, ${a116}, ${a117}, ${a118}, ${a119}, ${a120}, ${a121}, ${a122}, ${a123}, ${a124}, ${a125}, ${a126}, ${a127})";
-}
-
-class StructAlignmentInt16 extends Struct {
-  @Int8()
-  external int a0;
-
-  @Int16()
-  external int a1;
-
-  @Int8()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class StructAlignmentInt32 extends Struct {
-  @Int8()
-  external int a0;
-
-  @Int32()
-  external int a1;
-
-  @Int8()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class StructAlignmentInt64 extends Struct {
-  @Int8()
-  external int a0;
-
-  @Int64()
-  external int a1;
-
-  @Int8()
-  external int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct8BytesNestedInt extends Struct {
-  external Struct4BytesHomogeneousInt16 a0;
-
-  external Struct4BytesHomogeneousInt16 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesNestedFloat extends Struct {
-  external Struct4BytesFloat a0;
-
-  external Struct4BytesFloat a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesNestedFloat2 extends Struct {
-  external Struct4BytesFloat a0;
-
-  @Float()
-  external double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesNestedMixed extends Struct {
-  external Struct4BytesHomogeneousInt16 a0;
-
-  external Struct4BytesFloat a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct16BytesNestedInt extends Struct {
-  external Struct8BytesNestedInt a0;
-
-  external Struct8BytesNestedInt a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct32BytesNestedInt extends Struct {
-  external Struct16BytesNestedInt a0;
-
-  external Struct16BytesNestedInt a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIntStructAlignmentInt16 extends Struct {
-  external StructAlignmentInt16 a0;
-
-  external StructAlignmentInt16 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIntStructAlignmentInt32 extends Struct {
-  external StructAlignmentInt32 a0;
-
-  external StructAlignmentInt32 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIntStructAlignmentInt64 extends Struct {
-  external StructAlignmentInt64 a0;
-
-  external StructAlignmentInt64 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIrregularBig extends Struct {
-  @Uint16()
-  external int a0;
-
-  external Struct8BytesNestedMixed a1;
-
-  @Uint16()
-  external int a2;
-
-  external Struct8BytesNestedFloat2 a3;
-
-  @Uint16()
-  external int a4;
-
-  external Struct8BytesNestedFloat a5;
-
-  @Uint16()
-  external int a6;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
-}
-
-class StructNestedIrregularBigger extends Struct {
-  external StructNestedIrregularBig a0;
-
-  external Struct8BytesNestedMixed a1;
-
-  @Float()
-  external double a2;
-
-  @Double()
-  external double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class StructNestedIrregularEvenBigger extends Struct {
-  @Uint64()
-  external int a0;
-
-  external StructNestedIrregularBigger a1;
-
-  external StructNestedIrregularBigger a2;
-
-  @Double()
-  external double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct8BytesInlineArrayInt extends Struct {
-  @Array(8)
-  external Array<Uint8> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 8; i0 += 1) a0[i0]]})";
-}
-
-class StructInlineArrayIrregular extends Struct {
-  @Array(2)
-  external Array<Struct3BytesInt2ByteAligned> a0;
-
-  @Uint8()
-  external int a1;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]}, ${a1})";
-}
-
-class StructInlineArray100Bytes extends Struct {
-  @Array(100)
-  external Array<Uint8> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 100; i0 += 1) a0[i0]]})";
-}
-
-class StructInlineArrayBig extends Struct {
-  @Uint32()
-  external int a0;
-
-  @Uint32()
-  external int a1;
-
-  @Array(4000)
-  external Array<Uint8> a2;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${[for (var i0 = 0; i0 < 4000; i0 += 1) a2[i0]]})";
-}
-
-class StructStruct16BytesHomogeneousFloat2 extends Struct {
-  external Struct4BytesFloat a0;
-
-  @Array(2)
-  external Array<Struct4BytesFloat> a1;
-
-  @Float()
-  external double a2;
-
-  String toString() =>
-      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
-}
-
-class StructStruct32BytesHomogeneousDouble2 extends Struct {
-  external Struct8BytesFloat a0;
-
-  @Array(2)
-  external Array<Struct8BytesFloat> a1;
-
-  @Double()
-  external double a2;
-
-  String toString() =>
-      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
-}
-
-class StructStruct16BytesMixed3 extends Struct {
-  external Struct4BytesFloat a0;
-
-  @Array(1)
-  external Array<Struct8BytesMixed> a1;
-
-  @Array(2)
-  external Array<Int16> a2;
-
-  String toString() => "(${a0}, ${[
-        for (var i0 = 0; i0 < 1; i0 += 1) a1[i0]
-      ]}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a2[i0]]})";
-}
-
-class Struct8BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array(2, 2, 2)
-  external Array<Array<Array<Uint8>>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [
-            for (var i1 = 0; i1 < 2; i1 += 1)
-              [for (var i2 = 0; i2 < 2; i2 += 1) a0[i0][i1][i2]]
-          ]
-      ]})";
-}
-
-class Struct32BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array(2, 2, 2, 2, 2)
-  external Array<Array<Array<Array<Array<Uint8>>>>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [
-            for (var i1 = 0; i1 < 2; i1 += 1)
-              [
-                for (var i2 = 0; i2 < 2; i2 += 1)
-                  [
-                    for (var i3 = 0; i3 < 2; i3 += 1)
-                      [for (var i4 = 0; i4 < 2; i4 += 1) a0[i0][i1][i2][i3][i4]]
-                  ]
-              ]
-          ]
-      ]})";
-}
-
-class Struct64BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array.multi([2, 2, 2, 2, 2, 2])
-  external Array<Array<Array<Array<Array<Array<Uint8>>>>>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [
-            for (var i1 = 0; i1 < 2; i1 += 1)
-              [
-                for (var i2 = 0; i2 < 2; i2 += 1)
-                  [
-                    for (var i3 = 0; i3 < 2; i3 += 1)
-                      [
-                        for (var i4 = 0; i4 < 2; i4 += 1)
-                          [
-                            for (var i5 = 0; i5 < 2; i5 += 1)
-                              a0[i0][i1][i2][i3][i4][i5]
-                          ]
-                      ]
-                  ]
-              ]
-          ]
-      ]})";
-}
-
-class Struct4BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array(2, 2)
-  external Array<Array<Struct1ByteInt>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [for (var i1 = 0; i1 < 2; i1 += 1) a0[i0][i1]]
-      ]})";
-}
-
-@Packed(1)
-class Struct3BytesPackedInt extends Struct {
-  @Int8()
-  external int a0;
-
-  @Int16()
-  external int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-@Packed(1)
-class Struct3BytesPackedIntMembersAligned extends Struct {
-  @Int8()
-  external int a0;
-
-  @Int16()
-  external int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-@Packed(1)
-class Struct5BytesPackedMixed extends Struct {
-  @Float()
-  external double a0;
-
-  @Uint8()
-  external int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedAlignmentStruct5BytesPackedMixed extends Struct {
-  @Uint8()
-  external int a0;
-
-  external Struct5BytesPackedMixed a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct6BytesInlineArrayInt extends Struct {
-  @Array(2)
-  external Array<Struct3BytesPackedIntMembersAligned> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]})";
-}
-
-@Packed(1)
-class Struct8BytesPackedInt extends Struct {
-  @Uint8()
-  external int a0;
-
-  @Uint32()
-  external int a1;
-
-  @Uint8()
-  external int a2;
-
-  @Uint8()
-  external int a3;
-
-  @Uint8()
-  external int a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-@Packed(1)
-class Struct9BytesPackedMixed extends Struct {
-  @Uint8()
-  external int a0;
-
-  @Double()
-  external double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct15BytesInlineArrayMixed extends Struct {
-  @Array(3)
-  external Array<Struct5BytesPackedMixed> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 3; i0 += 1) a0[i0]]})";
-}
-
-class Union4BytesMixed extends Union {
-  @Uint32()
-  external int a0;
-
-  @Float()
-  external double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Union8BytesNestedFloat extends Union {
-  @Double()
-  external double a0;
-
-  external Struct8BytesHomogeneousFloat a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Union9BytesNestedInt extends Union {
-  external Struct8BytesInt a0;
-
-  external Struct9BytesHomogeneousUint8 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Union16BytesNestedInlineArrayFloat extends Union {
-  @Array(4)
-  external Array<Float> a0;
-
-  external Struct16BytesHomogeneousFloat a1;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 4; i0 += 1) a0[i0]]}, ${a1})";
-}
-
-class Union16BytesNestedFloat extends Union {
-  external Struct8BytesHomogeneousFloat a0;
-
-  external Struct12BytesHomogeneousFloat a1;
-
-  external Struct16BytesHomogeneousFloat a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
 final passStruct1ByteIntx10 = ffiTestFunctions.lookupFunction<
     Int64 Function(
         Struct1ByteInt,
@@ -8887,7545 +7576,3 @@
   calloc.free(a1Pointer);
   calloc.free(a2Pointer);
 }
-
-final passStruct1ByteIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt),
-    int Function(
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt)>("PassStruct1ByteIntx10", isLeaf: true);
-
-/// Smallest struct with data.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct1ByteIntx10Leaf() {
-  final a0Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a1.a0 = 2;
-  a2.a0 = -3;
-  a3.a0 = 4;
-  a4.a0 = -5;
-  a5.a0 = 6;
-  a6.a0 = -7;
-  a7.a0 = 8;
-  a8.a0 = -9;
-  a9.a0 = 10;
-
-  final result =
-      passStruct1ByteIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(5, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct3BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8),
-        int Function(
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8)>(
-    "PassStruct3BytesHomogeneousUint8x10",
-    isLeaf: true);
-
-/// Not a multiple of word size, not a power of two.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct3BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a1.a0 = 4;
-  a1.a1 = 5;
-  a1.a2 = 6;
-  a2.a0 = 7;
-  a2.a1 = 8;
-  a2.a2 = 9;
-  a3.a0 = 10;
-  a3.a1 = 11;
-  a3.a2 = 12;
-  a4.a0 = 13;
-  a4.a1 = 14;
-  a4.a2 = 15;
-  a5.a0 = 16;
-  a5.a1 = 17;
-  a5.a2 = 18;
-  a6.a0 = 19;
-  a6.a1 = 20;
-  a6.a2 = 21;
-  a7.a0 = 22;
-  a7.a1 = 23;
-  a7.a2 = 24;
-  a8.a0 = 25;
-  a8.a1 = 26;
-  a8.a2 = 27;
-  a9.a0 = 28;
-  a9.a1 = 29;
-  a9.a2 = 30;
-
-  final result = passStruct3BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(465, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct3BytesInt2ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned),
-        int Function(
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned)>("PassStruct3BytesInt2ByteAlignedx10",
-    isLeaf: true);
-
-/// Not a multiple of word size, not a power of two.
-/// With alignment rules taken into account size is 4 bytes.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct3BytesInt2ByteAlignedx10Leaf() {
-  final a0Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result = passStruct3BytesInt2ByteAlignedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct4BytesHomogeneousInt16x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16),
-        int Function(
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16)>(
-    "PassStruct4BytesHomogeneousInt16x10",
-    isLeaf: true);
-
-/// Exactly word size on 32-bit architectures.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct4BytesHomogeneousInt16x10Leaf() {
-  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result = passStruct4BytesHomogeneousInt16x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct7BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8),
-        int Function(
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8)>(
-    "PassStruct7BytesHomogeneousUint8x10",
-    isLeaf: true);
-
-/// Sub word size on 64 bit architectures.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct7BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a1.a0 = 8;
-  a1.a1 = 9;
-  a1.a2 = 10;
-  a1.a3 = 11;
-  a1.a4 = 12;
-  a1.a5 = 13;
-  a1.a6 = 14;
-  a2.a0 = 15;
-  a2.a1 = 16;
-  a2.a2 = 17;
-  a2.a3 = 18;
-  a2.a4 = 19;
-  a2.a5 = 20;
-  a2.a6 = 21;
-  a3.a0 = 22;
-  a3.a1 = 23;
-  a3.a2 = 24;
-  a3.a3 = 25;
-  a3.a4 = 26;
-  a3.a5 = 27;
-  a3.a6 = 28;
-  a4.a0 = 29;
-  a4.a1 = 30;
-  a4.a2 = 31;
-  a4.a3 = 32;
-  a4.a4 = 33;
-  a4.a5 = 34;
-  a4.a6 = 35;
-  a5.a0 = 36;
-  a5.a1 = 37;
-  a5.a2 = 38;
-  a5.a3 = 39;
-  a5.a4 = 40;
-  a5.a5 = 41;
-  a5.a6 = 42;
-  a6.a0 = 43;
-  a6.a1 = 44;
-  a6.a2 = 45;
-  a6.a3 = 46;
-  a6.a4 = 47;
-  a6.a5 = 48;
-  a6.a6 = 49;
-  a7.a0 = 50;
-  a7.a1 = 51;
-  a7.a2 = 52;
-  a7.a3 = 53;
-  a7.a4 = 54;
-  a7.a5 = 55;
-  a7.a6 = 56;
-  a8.a0 = 57;
-  a8.a1 = 58;
-  a8.a2 = 59;
-  a8.a3 = 60;
-  a8.a4 = 61;
-  a8.a5 = 62;
-  a8.a6 = 63;
-  a9.a0 = 64;
-  a9.a1 = 65;
-  a9.a2 = 66;
-  a9.a3 = 67;
-  a9.a4 = 68;
-  a9.a5 = 69;
-  a9.a6 = 70;
-
-  final result = passStruct7BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(2485, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct7BytesInt4ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned),
-        int Function(
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned)>("PassStruct7BytesInt4ByteAlignedx10",
-    isLeaf: true);
-
-/// Sub word size on 64 bit architectures.
-/// With alignment rules taken into account size is 8 bytes.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct7BytesInt4ByteAlignedx10Leaf() {
-  final a0Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result = passStruct7BytesInt4ByteAlignedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(15, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt),
-    int Function(
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt)>("PassStruct8BytesIntx10", isLeaf: true);
-
-/// Exactly word size struct on 64bit architectures.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct8BytesIntx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result =
-      passStruct8BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(15, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesHomogeneousFloatx10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat),
-        double Function(
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat)>(
-    "PassStruct8BytesHomogeneousFloatx10",
-    isLeaf: true);
-
-/// Arguments passed in FP registers as long as they fit.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct8BytesHomogeneousFloatx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a1.a0 = -3.0;
-  a1.a1 = 4.0;
-  a2.a0 = -5.0;
-  a2.a1 = 6.0;
-  a3.a0 = -7.0;
-  a3.a1 = 8.0;
-  a4.a0 = -9.0;
-  a4.a1 = 10.0;
-  a5.a0 = -11.0;
-  a5.a1 = 12.0;
-  a6.a0 = -13.0;
-  a6.a1 = 14.0;
-  a7.a0 = -15.0;
-  a7.a1 = 16.0;
-  a8.a0 = -17.0;
-  a8.a1 = 18.0;
-  a9.a0 = -19.0;
-  a9.a1 = 20.0;
-
-  final result = passStruct8BytesHomogeneousFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
-    Float Function(
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed),
-    double Function(
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed)>("PassStruct8BytesMixedx10", isLeaf: true);
-
-/// On x64, arguments go in int registers because it is not only float.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct8BytesMixedx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4.0;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7.0;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10.0;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13.0;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16.0;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19.0;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22.0;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25.0;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28.0;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result =
-      passStruct8BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(15.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct9BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8),
-        int Function(
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8)>(
-    "PassStruct9BytesHomogeneousUint8x10",
-    isLeaf: true);
-
-/// Argument is a single byte over a multiple of word size.
-/// 10 struct arguments will exhaust available registers.
-/// Struct only has 1-byte aligned fields to test struct alignment itself.
-/// Tests upper bytes in the integer registers that are partly filled.
-/// Tests stack alignment of non word size stack arguments.
-void testPassStruct9BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a0.a7 = 8;
-  a0.a8 = 9;
-  a1.a0 = 10;
-  a1.a1 = 11;
-  a1.a2 = 12;
-  a1.a3 = 13;
-  a1.a4 = 14;
-  a1.a5 = 15;
-  a1.a6 = 16;
-  a1.a7 = 17;
-  a1.a8 = 18;
-  a2.a0 = 19;
-  a2.a1 = 20;
-  a2.a2 = 21;
-  a2.a3 = 22;
-  a2.a4 = 23;
-  a2.a5 = 24;
-  a2.a6 = 25;
-  a2.a7 = 26;
-  a2.a8 = 27;
-  a3.a0 = 28;
-  a3.a1 = 29;
-  a3.a2 = 30;
-  a3.a3 = 31;
-  a3.a4 = 32;
-  a3.a5 = 33;
-  a3.a6 = 34;
-  a3.a7 = 35;
-  a3.a8 = 36;
-  a4.a0 = 37;
-  a4.a1 = 38;
-  a4.a2 = 39;
-  a4.a3 = 40;
-  a4.a4 = 41;
-  a4.a5 = 42;
-  a4.a6 = 43;
-  a4.a7 = 44;
-  a4.a8 = 45;
-  a5.a0 = 46;
-  a5.a1 = 47;
-  a5.a2 = 48;
-  a5.a3 = 49;
-  a5.a4 = 50;
-  a5.a5 = 51;
-  a5.a6 = 52;
-  a5.a7 = 53;
-  a5.a8 = 54;
-  a6.a0 = 55;
-  a6.a1 = 56;
-  a6.a2 = 57;
-  a6.a3 = 58;
-  a6.a4 = 59;
-  a6.a5 = 60;
-  a6.a6 = 61;
-  a6.a7 = 62;
-  a6.a8 = 63;
-  a7.a0 = 64;
-  a7.a1 = 65;
-  a7.a2 = 66;
-  a7.a3 = 67;
-  a7.a4 = 68;
-  a7.a5 = 69;
-  a7.a6 = 70;
-  a7.a7 = 71;
-  a7.a8 = 72;
-  a8.a0 = 73;
-  a8.a1 = 74;
-  a8.a2 = 75;
-  a8.a3 = 76;
-  a8.a4 = 77;
-  a8.a5 = 78;
-  a8.a6 = 79;
-  a8.a7 = 80;
-  a8.a8 = 81;
-  a9.a0 = 82;
-  a9.a1 = 83;
-  a9.a2 = 84;
-  a9.a3 = 85;
-  a9.a4 = 86;
-  a9.a5 = 87;
-  a9.a6 = 88;
-  a9.a7 = 89;
-  a9.a8 = 90;
-
-  final result = passStruct9BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(4095, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct9BytesInt4Or8ByteAlignedx10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned),
-            int Function(
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned)>(
-        "PassStruct9BytesInt4Or8ByteAlignedx10",
-        isLeaf: true);
-
-/// Argument is a single byte over a multiple of word size.
-/// With alignment rules taken into account size is 12 or 16 bytes.
-/// 10 struct arguments will exhaust available registers.
-///
-void testPassStruct9BytesInt4Or8ByteAlignedx10Leaf() {
-  final a0Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result = passStruct9BytesInt4Or8ByteAlignedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct12BytesHomogeneousFloatx6Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat),
-        double Function(
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat)>(
-    "PassStruct12BytesHomogeneousFloatx6",
-    isLeaf: true);
-
-/// Arguments in FPU registers on arm hardfp and arm64.
-/// Struct arguments will exhaust available registers, and leave some empty.
-/// The last argument is to test whether arguments are backfilled.
-void testPassStruct12BytesHomogeneousFloatx6Leaf() {
-  final a0Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a5 = a5Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a1.a0 = 4.0;
-  a1.a1 = -5.0;
-  a1.a2 = 6.0;
-  a2.a0 = -7.0;
-  a2.a1 = 8.0;
-  a2.a2 = -9.0;
-  a3.a0 = 10.0;
-  a3.a1 = -11.0;
-  a3.a2 = 12.0;
-  a4.a0 = -13.0;
-  a4.a1 = 14.0;
-  a4.a2 = -15.0;
-  a5.a0 = 16.0;
-  a5.a1 = -17.0;
-  a5.a2 = 18.0;
-
-  final result =
-      passStruct12BytesHomogeneousFloatx6Leaf(a0, a1, a2, a3, a4, a5);
-
-  print("result = $result");
-
-  Expect.approxEquals(9.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-}
-
-final passStruct16BytesHomogeneousFloatx5Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat),
-        double Function(
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat)>(
-    "PassStruct16BytesHomogeneousFloatx5",
-    isLeaf: true);
-
-/// On Linux x64 argument is transferred on stack because it is over 16 bytes.
-/// Arguments in FPU registers on arm hardfp and arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStruct16BytesHomogeneousFloatx5Leaf() {
-  final a0Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a4 = a4Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a1.a0 = -5.0;
-  a1.a1 = 6.0;
-  a1.a2 = -7.0;
-  a1.a3 = 8.0;
-  a2.a0 = -9.0;
-  a2.a1 = 10.0;
-  a2.a2 = -11.0;
-  a2.a3 = 12.0;
-  a3.a0 = -13.0;
-  a3.a1 = 14.0;
-  a3.a2 = -15.0;
-  a3.a3 = 16.0;
-  a4.a0 = -17.0;
-  a4.a1 = 18.0;
-  a4.a2 = -19.0;
-  a4.a3 = 20.0;
-
-  final result = passStruct16BytesHomogeneousFloatx5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStruct16BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed),
-    double Function(
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed)>("PassStruct16BytesMixedx10", isLeaf: true);
-
-/// On x64, arguments are split over FP and int registers.
-/// On x64, it will exhaust the integer registers with the 6th argument.
-/// The rest goes on the stack.
-/// On arm, arguments are 8 byte aligned.
-void testPassStruct16BytesMixedx10Leaf() {
-  final a0Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2;
-  a1.a0 = -3.0;
-  a1.a1 = 4;
-  a2.a0 = -5.0;
-  a2.a1 = 6;
-  a3.a0 = -7.0;
-  a3.a1 = 8;
-  a4.a0 = -9.0;
-  a4.a1 = 10;
-  a5.a0 = -11.0;
-  a5.a1 = 12;
-  a6.a0 = -13.0;
-  a6.a1 = 14;
-  a7.a0 = -15.0;
-  a7.a1 = 16;
-  a8.a0 = -17.0;
-  a8.a1 = 18;
-  a9.a0 = -19.0;
-  a9.a1 = 20;
-
-  final result =
-      passStruct16BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct16BytesMixed2x10Leaf = ffiTestFunctions.lookupFunction<
-    Float Function(
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2),
-    double Function(
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2)>("PassStruct16BytesMixed2x10", isLeaf: true);
-
-/// On x64, arguments are split over FP and int registers.
-/// On x64, it will exhaust the integer registers with the 6th argument.
-/// The rest goes on the stack.
-/// On arm, arguments are 4 byte aligned.
-void testPassStruct16BytesMixed2x10Leaf() {
-  final a0Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4;
-  a1.a0 = -5.0;
-  a1.a1 = 6.0;
-  a1.a2 = -7.0;
-  a1.a3 = 8;
-  a2.a0 = -9.0;
-  a2.a1 = 10.0;
-  a2.a2 = -11.0;
-  a2.a3 = 12;
-  a3.a0 = -13.0;
-  a3.a1 = 14.0;
-  a3.a2 = -15.0;
-  a3.a3 = 16;
-  a4.a0 = -17.0;
-  a4.a1 = 18.0;
-  a4.a2 = -19.0;
-  a4.a3 = 20;
-  a5.a0 = -21.0;
-  a5.a1 = 22.0;
-  a5.a2 = -23.0;
-  a5.a3 = 24;
-  a6.a0 = -25.0;
-  a6.a1 = 26.0;
-  a6.a2 = -27.0;
-  a6.a3 = 28;
-  a7.a0 = -29.0;
-  a7.a1 = 30.0;
-  a7.a2 = -31.0;
-  a7.a3 = 32;
-  a8.a0 = -33.0;
-  a8.a1 = 34.0;
-  a8.a2 = -35.0;
-  a8.a3 = 36;
-  a9.a0 = -37.0;
-  a9.a1 = 38.0;
-  a9.a2 = -39.0;
-  a9.a3 = 40;
-
-  final result =
-      passStruct16BytesMixed2x10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(20.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct17BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt),
-    int Function(
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt)>("PassStruct17BytesIntx10", isLeaf: true);
-
-/// Arguments are passed as pointer to copy on arm64.
-/// Tests that the memory allocated for copies are rounded up to word size.
-void testPassStruct17BytesIntx10Leaf() {
-  final a0Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result =
-      passStruct17BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(15, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct19BytesHomogeneousUint8x10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8),
-            int Function(
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8)>(
-        "PassStruct19BytesHomogeneousUint8x10",
-        isLeaf: true);
-
-/// The minimum alignment of this struct is only 1 byte based on its fields.
-/// Test that the memory backing these structs is extended to the right size.
-///
-void testPassStruct19BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a0.a7 = 8;
-  a0.a8 = 9;
-  a0.a9 = 10;
-  a0.a10 = 11;
-  a0.a11 = 12;
-  a0.a12 = 13;
-  a0.a13 = 14;
-  a0.a14 = 15;
-  a0.a15 = 16;
-  a0.a16 = 17;
-  a0.a17 = 18;
-  a0.a18 = 19;
-  a1.a0 = 20;
-  a1.a1 = 21;
-  a1.a2 = 22;
-  a1.a3 = 23;
-  a1.a4 = 24;
-  a1.a5 = 25;
-  a1.a6 = 26;
-  a1.a7 = 27;
-  a1.a8 = 28;
-  a1.a9 = 29;
-  a1.a10 = 30;
-  a1.a11 = 31;
-  a1.a12 = 32;
-  a1.a13 = 33;
-  a1.a14 = 34;
-  a1.a15 = 35;
-  a1.a16 = 36;
-  a1.a17 = 37;
-  a1.a18 = 38;
-  a2.a0 = 39;
-  a2.a1 = 40;
-  a2.a2 = 41;
-  a2.a3 = 42;
-  a2.a4 = 43;
-  a2.a5 = 44;
-  a2.a6 = 45;
-  a2.a7 = 46;
-  a2.a8 = 47;
-  a2.a9 = 48;
-  a2.a10 = 49;
-  a2.a11 = 50;
-  a2.a12 = 51;
-  a2.a13 = 52;
-  a2.a14 = 53;
-  a2.a15 = 54;
-  a2.a16 = 55;
-  a2.a17 = 56;
-  a2.a18 = 57;
-  a3.a0 = 58;
-  a3.a1 = 59;
-  a3.a2 = 60;
-  a3.a3 = 61;
-  a3.a4 = 62;
-  a3.a5 = 63;
-  a3.a6 = 64;
-  a3.a7 = 65;
-  a3.a8 = 66;
-  a3.a9 = 67;
-  a3.a10 = 68;
-  a3.a11 = 69;
-  a3.a12 = 70;
-  a3.a13 = 71;
-  a3.a14 = 72;
-  a3.a15 = 73;
-  a3.a16 = 74;
-  a3.a17 = 75;
-  a3.a18 = 76;
-  a4.a0 = 77;
-  a4.a1 = 78;
-  a4.a2 = 79;
-  a4.a3 = 80;
-  a4.a4 = 81;
-  a4.a5 = 82;
-  a4.a6 = 83;
-  a4.a7 = 84;
-  a4.a8 = 85;
-  a4.a9 = 86;
-  a4.a10 = 87;
-  a4.a11 = 88;
-  a4.a12 = 89;
-  a4.a13 = 90;
-  a4.a14 = 91;
-  a4.a15 = 92;
-  a4.a16 = 93;
-  a4.a17 = 94;
-  a4.a18 = 95;
-  a5.a0 = 96;
-  a5.a1 = 97;
-  a5.a2 = 98;
-  a5.a3 = 99;
-  a5.a4 = 100;
-  a5.a5 = 101;
-  a5.a6 = 102;
-  a5.a7 = 103;
-  a5.a8 = 104;
-  a5.a9 = 105;
-  a5.a10 = 106;
-  a5.a11 = 107;
-  a5.a12 = 108;
-  a5.a13 = 109;
-  a5.a14 = 110;
-  a5.a15 = 111;
-  a5.a16 = 112;
-  a5.a17 = 113;
-  a5.a18 = 114;
-  a6.a0 = 115;
-  a6.a1 = 116;
-  a6.a2 = 117;
-  a6.a3 = 118;
-  a6.a4 = 119;
-  a6.a5 = 120;
-  a6.a6 = 121;
-  a6.a7 = 122;
-  a6.a8 = 123;
-  a6.a9 = 124;
-  a6.a10 = 125;
-  a6.a11 = 126;
-  a6.a12 = 127;
-  a6.a13 = 128;
-  a6.a14 = 129;
-  a6.a15 = 130;
-  a6.a16 = 131;
-  a6.a17 = 132;
-  a6.a18 = 133;
-  a7.a0 = 134;
-  a7.a1 = 135;
-  a7.a2 = 136;
-  a7.a3 = 137;
-  a7.a4 = 138;
-  a7.a5 = 139;
-  a7.a6 = 140;
-  a7.a7 = 141;
-  a7.a8 = 142;
-  a7.a9 = 143;
-  a7.a10 = 144;
-  a7.a11 = 145;
-  a7.a12 = 146;
-  a7.a13 = 147;
-  a7.a14 = 148;
-  a7.a15 = 149;
-  a7.a16 = 150;
-  a7.a17 = 151;
-  a7.a18 = 152;
-  a8.a0 = 153;
-  a8.a1 = 154;
-  a8.a2 = 155;
-  a8.a3 = 156;
-  a8.a4 = 157;
-  a8.a5 = 158;
-  a8.a6 = 159;
-  a8.a7 = 160;
-  a8.a8 = 161;
-  a8.a9 = 162;
-  a8.a10 = 163;
-  a8.a11 = 164;
-  a8.a12 = 165;
-  a8.a13 = 166;
-  a8.a14 = 167;
-  a8.a15 = 168;
-  a8.a16 = 169;
-  a8.a17 = 170;
-  a8.a18 = 171;
-  a9.a0 = 172;
-  a9.a1 = 173;
-  a9.a2 = 174;
-  a9.a3 = 175;
-  a9.a4 = 176;
-  a9.a5 = 177;
-  a9.a6 = 178;
-  a9.a7 = 179;
-  a9.a8 = 180;
-  a9.a9 = 181;
-  a9.a10 = 182;
-  a9.a11 = 183;
-  a9.a12 = 184;
-  a9.a13 = 185;
-  a9.a14 = 186;
-  a9.a15 = 187;
-  a9.a16 = 188;
-  a9.a17 = 189;
-  a9.a18 = 190;
-
-  final result = passStruct19BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(18145, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct20BytesHomogeneousInt32x10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int32 Function(
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32),
-            int Function(
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32)>(
-        "PassStruct20BytesHomogeneousInt32x10",
-        isLeaf: true);
-
-/// Argument too big to go into integer registers on arm64.
-/// The arguments are passed as pointers to copies.
-/// The amount of arguments exhausts the number of integer registers, such that
-/// pointers to copies are also passed on the stack.
-void testPassStruct20BytesHomogeneousInt32x10Leaf() {
-  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a0.a3 = 4;
-  a0.a4 = -5;
-  a1.a0 = 6;
-  a1.a1 = -7;
-  a1.a2 = 8;
-  a1.a3 = -9;
-  a1.a4 = 10;
-  a2.a0 = -11;
-  a2.a1 = 12;
-  a2.a2 = -13;
-  a2.a3 = 14;
-  a2.a4 = -15;
-  a3.a0 = 16;
-  a3.a1 = -17;
-  a3.a2 = 18;
-  a3.a3 = -19;
-  a3.a4 = 20;
-  a4.a0 = -21;
-  a4.a1 = 22;
-  a4.a2 = -23;
-  a4.a3 = 24;
-  a4.a4 = -25;
-  a5.a0 = 26;
-  a5.a1 = -27;
-  a5.a2 = 28;
-  a5.a3 = -29;
-  a5.a4 = 30;
-  a6.a0 = -31;
-  a6.a1 = 32;
-  a6.a2 = -33;
-  a6.a3 = 34;
-  a6.a4 = -35;
-  a7.a0 = 36;
-  a7.a1 = -37;
-  a7.a2 = 38;
-  a7.a3 = -39;
-  a7.a4 = 40;
-  a8.a0 = -41;
-  a8.a1 = 42;
-  a8.a2 = -43;
-  a8.a3 = 44;
-  a8.a4 = -45;
-  a9.a0 = 46;
-  a9.a1 = -47;
-  a9.a2 = 48;
-  a9.a3 = -49;
-  a9.a4 = 50;
-
-  final result = passStruct20BytesHomogeneousInt32x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(25, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-        Float Function(Struct20BytesHomogeneousFloat),
-        double Function(Struct20BytesHomogeneousFloat)>(
-    "PassStruct20BytesHomogeneousFloat",
-    isLeaf: true);
-
-/// Argument too big to go into FPU registers in hardfp and arm64.
-void testPassStruct20BytesHomogeneousFloatLeaf() {
-  final a0Pointer = calloc<Struct20BytesHomogeneousFloat>();
-  final Struct20BytesHomogeneousFloat a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a0.a4 = -5.0;
-
-  final result = passStruct20BytesHomogeneousFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(-3.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct32BytesHomogeneousDoublex5Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble),
-            double Function(
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble)>(
-        "PassStruct32BytesHomogeneousDoublex5",
-        isLeaf: true);
-
-/// Arguments in FPU registers on arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStruct32BytesHomogeneousDoublex5Leaf() {
-  final a0Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a4 = a4Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a1.a0 = -5.0;
-  a1.a1 = 6.0;
-  a1.a2 = -7.0;
-  a1.a3 = 8.0;
-  a2.a0 = -9.0;
-  a2.a1 = 10.0;
-  a2.a2 = -11.0;
-  a2.a3 = 12.0;
-  a3.a0 = -13.0;
-  a3.a1 = 14.0;
-  a3.a2 = -15.0;
-  a3.a3 = 16.0;
-  a4.a0 = -17.0;
-  a4.a1 = 18.0;
-  a4.a2 = -19.0;
-  a4.a3 = 20.0;
-
-  final result = passStruct32BytesHomogeneousDoublex5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStruct40BytesHomogeneousDoubleLeaf = ffiTestFunctions.lookupFunction<
-        Double Function(Struct40BytesHomogeneousDouble),
-        double Function(Struct40BytesHomogeneousDouble)>(
-    "PassStruct40BytesHomogeneousDouble",
-    isLeaf: true);
-
-/// Argument too big to go into FPU registers in arm64.
-void testPassStruct40BytesHomogeneousDoubleLeaf() {
-  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
-  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a0.a4 = -5.0;
-
-  final result = passStruct40BytesHomogeneousDoubleLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(-3.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct1024BytesHomogeneousUint64Leaf =
-    ffiTestFunctions.lookupFunction<
-            Uint64 Function(Struct1024BytesHomogeneousUint64),
-            int Function(Struct1024BytesHomogeneousUint64)>(
-        "PassStruct1024BytesHomogeneousUint64",
-        isLeaf: true);
-
-/// Test 1kb struct.
-void testPassStruct1024BytesHomogeneousUint64Leaf() {
-  final a0Pointer = calloc<Struct1024BytesHomogeneousUint64>();
-  final Struct1024BytesHomogeneousUint64 a0 = a0Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a0.a7 = 8;
-  a0.a8 = 9;
-  a0.a9 = 10;
-  a0.a10 = 11;
-  a0.a11 = 12;
-  a0.a12 = 13;
-  a0.a13 = 14;
-  a0.a14 = 15;
-  a0.a15 = 16;
-  a0.a16 = 17;
-  a0.a17 = 18;
-  a0.a18 = 19;
-  a0.a19 = 20;
-  a0.a20 = 21;
-  a0.a21 = 22;
-  a0.a22 = 23;
-  a0.a23 = 24;
-  a0.a24 = 25;
-  a0.a25 = 26;
-  a0.a26 = 27;
-  a0.a27 = 28;
-  a0.a28 = 29;
-  a0.a29 = 30;
-  a0.a30 = 31;
-  a0.a31 = 32;
-  a0.a32 = 33;
-  a0.a33 = 34;
-  a0.a34 = 35;
-  a0.a35 = 36;
-  a0.a36 = 37;
-  a0.a37 = 38;
-  a0.a38 = 39;
-  a0.a39 = 40;
-  a0.a40 = 41;
-  a0.a41 = 42;
-  a0.a42 = 43;
-  a0.a43 = 44;
-  a0.a44 = 45;
-  a0.a45 = 46;
-  a0.a46 = 47;
-  a0.a47 = 48;
-  a0.a48 = 49;
-  a0.a49 = 50;
-  a0.a50 = 51;
-  a0.a51 = 52;
-  a0.a52 = 53;
-  a0.a53 = 54;
-  a0.a54 = 55;
-  a0.a55 = 56;
-  a0.a56 = 57;
-  a0.a57 = 58;
-  a0.a58 = 59;
-  a0.a59 = 60;
-  a0.a60 = 61;
-  a0.a61 = 62;
-  a0.a62 = 63;
-  a0.a63 = 64;
-  a0.a64 = 65;
-  a0.a65 = 66;
-  a0.a66 = 67;
-  a0.a67 = 68;
-  a0.a68 = 69;
-  a0.a69 = 70;
-  a0.a70 = 71;
-  a0.a71 = 72;
-  a0.a72 = 73;
-  a0.a73 = 74;
-  a0.a74 = 75;
-  a0.a75 = 76;
-  a0.a76 = 77;
-  a0.a77 = 78;
-  a0.a78 = 79;
-  a0.a79 = 80;
-  a0.a80 = 81;
-  a0.a81 = 82;
-  a0.a82 = 83;
-  a0.a83 = 84;
-  a0.a84 = 85;
-  a0.a85 = 86;
-  a0.a86 = 87;
-  a0.a87 = 88;
-  a0.a88 = 89;
-  a0.a89 = 90;
-  a0.a90 = 91;
-  a0.a91 = 92;
-  a0.a92 = 93;
-  a0.a93 = 94;
-  a0.a94 = 95;
-  a0.a95 = 96;
-  a0.a96 = 97;
-  a0.a97 = 98;
-  a0.a98 = 99;
-  a0.a99 = 100;
-  a0.a100 = 101;
-  a0.a101 = 102;
-  a0.a102 = 103;
-  a0.a103 = 104;
-  a0.a104 = 105;
-  a0.a105 = 106;
-  a0.a106 = 107;
-  a0.a107 = 108;
-  a0.a108 = 109;
-  a0.a109 = 110;
-  a0.a110 = 111;
-  a0.a111 = 112;
-  a0.a112 = 113;
-  a0.a113 = 114;
-  a0.a114 = 115;
-  a0.a115 = 116;
-  a0.a116 = 117;
-  a0.a117 = 118;
-  a0.a118 = 119;
-  a0.a119 = 120;
-  a0.a120 = 121;
-  a0.a121 = 122;
-  a0.a122 = 123;
-  a0.a123 = 124;
-  a0.a124 = 125;
-  a0.a125 = 126;
-  a0.a126 = 127;
-  a0.a127 = 128;
-
-  final result = passStruct1024BytesHomogeneousUint64Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(8256, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf =
-    ffiTestFunctions.lookupFunction<
-            Float Function(
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float),
-            double Function(
-                double,
-                Struct16BytesHomogeneousFloat,
-                double,
-                Struct16BytesHomogeneousFloat,
-                double,
-                Struct16BytesHomogeneousFloat,
-                double,
-                Struct16BytesHomogeneousFloat,
-                double)>("PassFloatStruct16BytesHomogeneousFloatFloatStruct1",
-        isLeaf: true);
-
-/// Tests the alignment of structs in FPU registers and backfilling.
-void testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf() {
-  double a0;
-  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
-  double a2;
-  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
-  double a4;
-  final a5Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a5 = a5Pointer.ref;
-  double a6;
-  final a7Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a7 = a7Pointer.ref;
-  double a8;
-
-  a0 = -1.0;
-  a1.a0 = 2.0;
-  a1.a1 = -3.0;
-  a1.a2 = 4.0;
-  a1.a3 = -5.0;
-  a2 = 6.0;
-  a3.a0 = -7.0;
-  a3.a1 = 8.0;
-  a3.a2 = -9.0;
-  a3.a3 = 10.0;
-  a4 = -11.0;
-  a5.a0 = 12.0;
-  a5.a1 = -13.0;
-  a5.a2 = 14.0;
-  a5.a3 = -15.0;
-  a6 = 16.0;
-  a7.a0 = -17.0;
-  a7.a1 = 18.0;
-  a7.a2 = -19.0;
-  a7.a3 = 20.0;
-  a8 = -21.0;
-
-  final result = passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-11.0, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float),
-            double Function(
-                double,
-                Struct32BytesHomogeneousDouble,
-                double,
-                Struct32BytesHomogeneousDouble,
-                double,
-                Struct32BytesHomogeneousDouble,
-                double,
-                Struct32BytesHomogeneousDouble,
-                double)>("PassFloatStruct32BytesHomogeneousDoubleFloatStruct",
-        isLeaf: true);
-
-/// Tests the alignment of structs in FPU registers and backfilling.
-void testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf() {
-  double a0;
-  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
-  double a2;
-  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
-  double a4;
-  final a5Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a5 = a5Pointer.ref;
-  double a6;
-  final a7Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a7 = a7Pointer.ref;
-  double a8;
-
-  a0 = -1.0;
-  a1.a0 = 2.0;
-  a1.a1 = -3.0;
-  a1.a2 = 4.0;
-  a1.a3 = -5.0;
-  a2 = 6.0;
-  a3.a0 = -7.0;
-  a3.a1 = 8.0;
-  a3.a2 = -9.0;
-  a3.a3 = 10.0;
-  a4 = -11.0;
-  a5.a0 = 12.0;
-  a5.a1 = -13.0;
-  a5.a2 = 14.0;
-  a5.a3 = -15.0;
-  a6 = 16.0;
-  a7.a0 = -17.0;
-  a7.a1 = 18.0;
-  a7.a2 = -19.0;
-  a7.a3 = 20.0;
-  a8 = -21.0;
-
-  final result = passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-11.0, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(Int8, Struct16BytesMixed, Int8, Struct16BytesMixed,
-                Int8, Struct16BytesMixed, Int8, Struct16BytesMixed, Int8),
-            double Function(
-                int,
-                Struct16BytesMixed,
-                int,
-                Struct16BytesMixed,
-                int,
-                Struct16BytesMixed,
-                int,
-                Struct16BytesMixed,
-                int)>("PassInt8Struct16BytesMixedInt8Struct16BytesMixedIn",
-        isLeaf: true);
-
-/// Tests the alignment of structs in integers registers and on the stack.
-/// Arm32 aligns this struct at 8.
-/// Also, arm32 allocates the second struct partially in registers, partially
-/// on stack.
-/// Test backfilling of integer registers.
-void testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf() {
-  int a0;
-  final a1Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a1 = a1Pointer.ref;
-  int a2;
-  final a3Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a3 = a3Pointer.ref;
-  int a4;
-  final a5Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a5 = a5Pointer.ref;
-  int a6;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  int a8;
-
-  a0 = -1;
-  a1.a0 = 2.0;
-  a1.a1 = -3;
-  a2 = 4;
-  a3.a0 = -5.0;
-  a3.a1 = 6;
-  a4 = -7;
-  a5.a0 = 8.0;
-  a5.a1 = -9;
-  a6 = 10;
-  a7.a0 = -11.0;
-  a7.a1 = 12;
-  a8 = -13;
-
-  final result = passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-7.0, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passDoublex6Struct16BytesMixedx4Int32Leaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Int32),
-        double Function(
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            int)>("PassDoublex6Struct16BytesMixedx4Int32", isLeaf: true);
-
-/// On Linux x64, it will exhaust xmm registers first, after 6 doubles and 2
-/// structs. The rest of the structs will go on the stack.
-/// The int will be backfilled into the int register.
-void testPassDoublex6Struct16BytesMixedx4Int32Leaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-  double a4;
-  double a5;
-  final a6Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a9 = a9Pointer.ref;
-  int a10;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-  a4 = -5.0;
-  a5 = 6.0;
-  a6.a0 = -7.0;
-  a6.a1 = 8;
-  a7.a0 = -9.0;
-  a7.a1 = 10;
-  a8.a0 = -11.0;
-  a8.a1 = 12;
-  a9.a0 = -13.0;
-  a9.a1 = 14;
-  a10 = -15;
-
-  final result = passDoublex6Struct16BytesMixedx4Int32Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
-
-  print("result = $result");
-
-  Expect.approxEquals(-8.0, result);
-
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passInt32x4Struct16BytesMixedx4DoubleLeaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(Int32, Int32, Int32, Int32, Struct16BytesMixed,
-            Struct16BytesMixed, Struct16BytesMixed, Struct16BytesMixed, Double),
-        double Function(
-            int,
-            int,
-            int,
-            int,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            double)>("PassInt32x4Struct16BytesMixedx4Double", isLeaf: true);
-
-/// On Linux x64, it will exhaust int registers first.
-/// The rest of the structs will go on the stack.
-/// The double will be backfilled into the xmm register.
-void testPassInt32x4Struct16BytesMixedx4DoubleLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  final a4Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  double a8;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4.a0 = -5.0;
-  a4.a1 = 6;
-  a5.a0 = -7.0;
-  a5.a1 = 8;
-  a6.a0 = -9.0;
-  a6.a1 = 10;
-  a7.a0 = -11.0;
-  a7.a1 = 12;
-  a8 = -13.0;
-
-  final result = passInt32x4Struct16BytesMixedx4DoubleLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-7.0, result);
-
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(Struct40BytesHomogeneousDouble,
-                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat),
-            double Function(Struct40BytesHomogeneousDouble,
-                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat)>(
-        "PassStruct40BytesHomogeneousDoubleStruct4BytesHomo",
-        isLeaf: true);
-
-/// On various architectures, first struct is allocated on stack.
-/// Check that the other two arguments are allocated on registers.
-void testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf() {
-  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
-  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a0.a4 = -5.0;
-  a1.a0 = 6;
-  a1.a1 = -7;
-  a2.a0 = 8.0;
-  a2.a1 = -9.0;
-
-  final result =
-      passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.approxEquals(-5.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-}
-
-final passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Int64,
-            Int8,
-            Struct1ByteInt,
-            Int64,
-            Int8,
-            Struct4BytesHomogeneousInt16,
-            Int64,
-            Int8,
-            Struct8BytesInt,
-            Int64,
-            Int8,
-            Struct8BytesHomogeneousFloat,
-            Int64,
-            Int8,
-            Struct8BytesMixed,
-            Int64,
-            Int8,
-            StructAlignmentInt16,
-            Int64,
-            Int8,
-            StructAlignmentInt32,
-            Int64,
-            Int8,
-            StructAlignmentInt64),
-        double Function(
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            int,
-            int,
-            Struct1ByteInt,
-            int,
-            int,
-            Struct4BytesHomogeneousInt16,
-            int,
-            int,
-            Struct8BytesInt,
-            int,
-            int,
-            Struct8BytesHomogeneousFloat,
-            int,
-            int,
-            Struct8BytesMixed,
-            int,
-            int,
-            StructAlignmentInt16,
-            int,
-            int,
-            StructAlignmentInt32,
-            int,
-            int,
-            StructAlignmentInt64)>("PassInt32x8Doublex8Int64Int8Struct1ByteIntInt64Int", isLeaf: true);
-
-/// Test alignment and padding of 16 byte int within struct.
-void testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  double a8;
-  double a9;
-  double a10;
-  double a11;
-  double a12;
-  double a13;
-  double a14;
-  double a15;
-  int a16;
-  int a17;
-  final a18Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a18 = a18Pointer.ref;
-  int a19;
-  int a20;
-  final a21Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a21 = a21Pointer.ref;
-  int a22;
-  int a23;
-  final a24Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a24 = a24Pointer.ref;
-  int a25;
-  int a26;
-  final a27Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a27 = a27Pointer.ref;
-  int a28;
-  int a29;
-  final a30Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a30 = a30Pointer.ref;
-  int a31;
-  int a32;
-  final a33Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a33 = a33Pointer.ref;
-  int a34;
-  int a35;
-  final a36Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a36 = a36Pointer.ref;
-  int a37;
-  int a38;
-  final a39Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a39 = a39Pointer.ref;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-  a5 = 6;
-  a6 = -7;
-  a7 = 8;
-  a8 = -9.0;
-  a9 = 10.0;
-  a10 = -11.0;
-  a11 = 12.0;
-  a12 = -13.0;
-  a13 = 14.0;
-  a14 = -15.0;
-  a15 = 16.0;
-  a16 = -17;
-  a17 = 18;
-  a18.a0 = -19;
-  a19 = 20;
-  a20 = -21;
-  a21.a0 = 22;
-  a21.a1 = -23;
-  a22 = 24;
-  a23 = -25;
-  a24.a0 = 26;
-  a24.a1 = -27;
-  a24.a2 = 28;
-  a25 = -29;
-  a26 = 30;
-  a27.a0 = -31.0;
-  a27.a1 = 32.0;
-  a28 = -33;
-  a29 = 34;
-  a30.a0 = -35.0;
-  a30.a1 = 36;
-  a30.a2 = -37;
-  a31 = 38;
-  a32 = -39;
-  a33.a0 = 40;
-  a33.a1 = -41;
-  a33.a2 = 42;
-  a34 = -43;
-  a35 = 44;
-  a36.a0 = -45;
-  a36.a1 = 46;
-  a36.a2 = -47;
-  a37 = 48;
-  a38 = -49;
-  a39.a0 = 50;
-  a39.a1 = -51;
-  a39.a2 = 52;
-
-  final result = passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf(
-      a0,
-      a1,
-      a2,
-      a3,
-      a4,
-      a5,
-      a6,
-      a7,
-      a8,
-      a9,
-      a10,
-      a11,
-      a12,
-      a13,
-      a14,
-      a15,
-      a16,
-      a17,
-      a18,
-      a19,
-      a20,
-      a21,
-      a22,
-      a23,
-      a24,
-      a25,
-      a26,
-      a27,
-      a28,
-      a29,
-      a30,
-      a31,
-      a32,
-      a33,
-      a34,
-      a35,
-      a36,
-      a37,
-      a38,
-      a39);
-
-  print("result = $result");
-
-  Expect.approxEquals(26.0, result);
-
-  calloc.free(a18Pointer);
-  calloc.free(a21Pointer);
-  calloc.free(a24Pointer);
-  calloc.free(a27Pointer);
-  calloc.free(a30Pointer);
-  calloc.free(a33Pointer);
-  calloc.free(a36Pointer);
-  calloc.free(a39Pointer);
-}
-
-final passStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(StructAlignmentInt16),
-    int Function(
-        StructAlignmentInt16)>("PassStructAlignmentInt16", isLeaf: true);
-
-/// Test alignment and padding of 16 byte int within struct.
-void testPassStructAlignmentInt16Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = passStructAlignmentInt16Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(-2, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(StructAlignmentInt32),
-    int Function(
-        StructAlignmentInt32)>("PassStructAlignmentInt32", isLeaf: true);
-
-/// Test alignment and padding of 32 byte int within struct.
-void testPassStructAlignmentInt32Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = passStructAlignmentInt32Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(-2, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(StructAlignmentInt64),
-    int Function(
-        StructAlignmentInt64)>("PassStructAlignmentInt64", isLeaf: true);
-
-/// Test alignment and padding of 64 byte int within struct.
-void testPassStructAlignmentInt64Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = passStructAlignmentInt64Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(-2, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct8BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt),
-    int Function(
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt)>("PassStruct8BytesNestedIntx10", isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust registers on all platforms.
-void testPassStruct8BytesNestedIntx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a1.a0 = -3;
-  a0.a1.a1 = 4;
-  a1.a0.a0 = -5;
-  a1.a0.a1 = 6;
-  a1.a1.a0 = -7;
-  a1.a1.a1 = 8;
-  a2.a0.a0 = -9;
-  a2.a0.a1 = 10;
-  a2.a1.a0 = -11;
-  a2.a1.a1 = 12;
-  a3.a0.a0 = -13;
-  a3.a0.a1 = 14;
-  a3.a1.a0 = -15;
-  a3.a1.a1 = 16;
-  a4.a0.a0 = -17;
-  a4.a0.a1 = 18;
-  a4.a1.a0 = -19;
-  a4.a1.a1 = 20;
-  a5.a0.a0 = -21;
-  a5.a0.a1 = 22;
-  a5.a1.a0 = -23;
-  a5.a1.a1 = 24;
-  a6.a0.a0 = -25;
-  a6.a0.a1 = 26;
-  a6.a1.a0 = -27;
-  a6.a1.a1 = 28;
-  a7.a0.a0 = -29;
-  a7.a0.a1 = 30;
-  a7.a1.a0 = -31;
-  a7.a1.a1 = 32;
-  a8.a0.a0 = -33;
-  a8.a0.a1 = 34;
-  a8.a1.a0 = -35;
-  a8.a1.a1 = 36;
-  a9.a0.a0 = -37;
-  a9.a0.a1 = 38;
-  a9.a1.a0 = -39;
-  a9.a1.a1 = 40;
-
-  final result =
-      passStruct8BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(20, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat),
-        double Function(
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat)>("PassStruct8BytesNestedFloatx10",
-    isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust fpu registers on all platforms.
-void testPassStruct8BytesNestedFloatx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1.a0 = 2.0;
-  a1.a0.a0 = -3.0;
-  a1.a1.a0 = 4.0;
-  a2.a0.a0 = -5.0;
-  a2.a1.a0 = 6.0;
-  a3.a0.a0 = -7.0;
-  a3.a1.a0 = 8.0;
-  a4.a0.a0 = -9.0;
-  a4.a1.a0 = 10.0;
-  a5.a0.a0 = -11.0;
-  a5.a1.a0 = 12.0;
-  a6.a0.a0 = -13.0;
-  a6.a1.a0 = 14.0;
-  a7.a0.a0 = -15.0;
-  a7.a1.a0 = 16.0;
-  a8.a0.a0 = -17.0;
-  a8.a1.a0 = 18.0;
-  a9.a0.a0 = -19.0;
-  a9.a1.a0 = 20.0;
-
-  final result = passStruct8BytesNestedFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesNestedFloat2x10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2),
-        double Function(
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2)>("PassStruct8BytesNestedFloat2x10",
-    isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust fpu registers on all platforms.
-/// The nesting is irregular, testing homogenous float rules on arm and arm64,
-/// and the fpu register usage on x64.
-void testPassStruct8BytesNestedFloat2x10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a1.a0.a0 = -3.0;
-  a1.a1 = 4.0;
-  a2.a0.a0 = -5.0;
-  a2.a1 = 6.0;
-  a3.a0.a0 = -7.0;
-  a3.a1 = 8.0;
-  a4.a0.a0 = -9.0;
-  a4.a1 = 10.0;
-  a5.a0.a0 = -11.0;
-  a5.a1 = 12.0;
-  a6.a0.a0 = -13.0;
-  a6.a1 = 14.0;
-  a7.a0.a0 = -15.0;
-  a7.a1 = 16.0;
-  a8.a0.a0 = -17.0;
-  a8.a1 = 18.0;
-  a9.a0.a0 = -19.0;
-  a9.a1 = 20.0;
-
-  final result = passStruct8BytesNestedFloat2x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesNestedMixedx10Leaf = ffiTestFunctions.lookupFunction<
-        Double Function(
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed),
-        double Function(
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed)>("PassStruct8BytesNestedMixedx10",
-    isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust all registers on all platforms.
-void testPassStruct8BytesNestedMixedx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a1.a0 = -3.0;
-  a1.a0.a0 = 4;
-  a1.a0.a1 = -5;
-  a1.a1.a0 = 6.0;
-  a2.a0.a0 = -7;
-  a2.a0.a1 = 8;
-  a2.a1.a0 = -9.0;
-  a3.a0.a0 = 10;
-  a3.a0.a1 = -11;
-  a3.a1.a0 = 12.0;
-  a4.a0.a0 = -13;
-  a4.a0.a1 = 14;
-  a4.a1.a0 = -15.0;
-  a5.a0.a0 = 16;
-  a5.a0.a1 = -17;
-  a5.a1.a0 = 18.0;
-  a6.a0.a0 = -19;
-  a6.a0.a1 = 20;
-  a6.a1.a0 = -21.0;
-  a7.a0.a0 = 22;
-  a7.a0.a1 = -23;
-  a7.a1.a0 = 24.0;
-  a8.a0.a0 = -25;
-  a8.a0.a1 = 26;
-  a8.a1.a0 = -27.0;
-  a9.a0.a0 = 28;
-  a9.a0.a1 = -29;
-  a9.a1.a0 = 30.0;
-
-  final result = passStruct8BytesNestedMixedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(15.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct16BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(Struct16BytesNestedInt, Struct16BytesNestedInt),
-    int Function(Struct16BytesNestedInt,
-        Struct16BytesNestedInt)>("PassStruct16BytesNestedIntx2", isLeaf: true);
-
-/// Deeper nested struct to test recursive member access.
-void testPassStruct16BytesNestedIntx2Leaf() {
-  final a0Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0.a0 = -1;
-  a0.a0.a0.a1 = 2;
-  a0.a0.a1.a0 = -3;
-  a0.a0.a1.a1 = 4;
-  a0.a1.a0.a0 = -5;
-  a0.a1.a0.a1 = 6;
-  a0.a1.a1.a0 = -7;
-  a0.a1.a1.a1 = 8;
-  a1.a0.a0.a0 = -9;
-  a1.a0.a0.a1 = 10;
-  a1.a0.a1.a0 = -11;
-  a1.a0.a1.a1 = 12;
-  a1.a1.a0.a0 = -13;
-  a1.a1.a0.a1 = 14;
-  a1.a1.a1.a0 = -15;
-  a1.a1.a1.a1 = 16;
-
-  final result = passStruct16BytesNestedIntx2Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(8, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final passStruct32BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(Struct32BytesNestedInt, Struct32BytesNestedInt),
-    int Function(Struct32BytesNestedInt,
-        Struct32BytesNestedInt)>("PassStruct32BytesNestedIntx2", isLeaf: true);
-
-/// Even deeper nested struct to test recursive member access.
-void testPassStruct32BytesNestedIntx2Leaf() {
-  final a0Pointer = calloc<Struct32BytesNestedInt>();
-  final Struct32BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct32BytesNestedInt>();
-  final Struct32BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0.a0.a0 = -1;
-  a0.a0.a0.a0.a1 = 2;
-  a0.a0.a0.a1.a0 = -3;
-  a0.a0.a0.a1.a1 = 4;
-  a0.a0.a1.a0.a0 = -5;
-  a0.a0.a1.a0.a1 = 6;
-  a0.a0.a1.a1.a0 = -7;
-  a0.a0.a1.a1.a1 = 8;
-  a0.a1.a0.a0.a0 = -9;
-  a0.a1.a0.a0.a1 = 10;
-  a0.a1.a0.a1.a0 = -11;
-  a0.a1.a0.a1.a1 = 12;
-  a0.a1.a1.a0.a0 = -13;
-  a0.a1.a1.a0.a1 = 14;
-  a0.a1.a1.a1.a0 = -15;
-  a0.a1.a1.a1.a1 = 16;
-  a1.a0.a0.a0.a0 = -17;
-  a1.a0.a0.a0.a1 = 18;
-  a1.a0.a0.a1.a0 = -19;
-  a1.a0.a0.a1.a1 = 20;
-  a1.a0.a1.a0.a0 = -21;
-  a1.a0.a1.a0.a1 = 22;
-  a1.a0.a1.a1.a0 = -23;
-  a1.a0.a1.a1.a1 = 24;
-  a1.a1.a0.a0.a0 = -25;
-  a1.a1.a0.a0.a1 = 26;
-  a1.a1.a0.a1.a0 = -27;
-  a1.a1.a0.a1.a1 = 28;
-  a1.a1.a1.a0.a0 = -29;
-  a1.a1.a1.a0.a1 = 30;
-  a1.a1.a1.a1.a0 = -31;
-  a1.a1.a1.a1.a1 = 32;
-
-  final result = passStruct32BytesNestedIntx2Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(16, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final passStructNestedIntStructAlignmentInt16Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(StructNestedIntStructAlignmentInt16),
-            int Function(StructNestedIntStructAlignmentInt16)>(
-        "PassStructNestedIntStructAlignmentInt16",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 16 byte int.
-void testPassStructNestedIntStructAlignmentInt16Leaf() {
-  final a0Pointer = calloc<StructNestedIntStructAlignmentInt16>();
-  final StructNestedIntStructAlignmentInt16 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a0.a1.a0 = 4;
-  a0.a1.a1 = -5;
-  a0.a1.a2 = 6;
-
-  final result = passStructNestedIntStructAlignmentInt16Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(3, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedIntStructAlignmentInt32Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(StructNestedIntStructAlignmentInt32),
-            int Function(StructNestedIntStructAlignmentInt32)>(
-        "PassStructNestedIntStructAlignmentInt32",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 32 byte int.
-void testPassStructNestedIntStructAlignmentInt32Leaf() {
-  final a0Pointer = calloc<StructNestedIntStructAlignmentInt32>();
-  final StructNestedIntStructAlignmentInt32 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a0.a1.a0 = 4;
-  a0.a1.a1 = -5;
-  a0.a1.a2 = 6;
-
-  final result = passStructNestedIntStructAlignmentInt32Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(3, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedIntStructAlignmentInt64Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(StructNestedIntStructAlignmentInt64),
-            int Function(StructNestedIntStructAlignmentInt64)>(
-        "PassStructNestedIntStructAlignmentInt64",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 64 byte int.
-void testPassStructNestedIntStructAlignmentInt64Leaf() {
-  final a0Pointer = calloc<StructNestedIntStructAlignmentInt64>();
-  final StructNestedIntStructAlignmentInt64 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a0.a1.a0 = 4;
-  a0.a1.a1 = -5;
-  a0.a1.a2 = 6;
-
-  final result = passStructNestedIntStructAlignmentInt64Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(3, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedIrregularEvenBiggerx4Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger),
-            double Function(
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger)>(
-        "PassStructNestedIrregularEvenBiggerx4",
-        isLeaf: true);
-
-/// Return big irregular struct as smoke test.
-void testPassStructNestedIrregularEvenBiggerx4Leaf() {
-  final a0Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a3 = a3Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1.a0.a0 = 2;
-  a0.a1.a0.a1.a0.a0 = -3;
-  a0.a1.a0.a1.a0.a1 = 4;
-  a0.a1.a0.a1.a1.a0 = -5.0;
-  a0.a1.a0.a2 = 6;
-  a0.a1.a0.a3.a0.a0 = -7.0;
-  a0.a1.a0.a3.a1 = 8.0;
-  a0.a1.a0.a4 = 9;
-  a0.a1.a0.a5.a0.a0 = 10.0;
-  a0.a1.a0.a5.a1.a0 = -11.0;
-  a0.a1.a0.a6 = 12;
-  a0.a1.a1.a0.a0 = -13;
-  a0.a1.a1.a0.a1 = 14;
-  a0.a1.a1.a1.a0 = -15.0;
-  a0.a1.a2 = 16.0;
-  a0.a1.a3 = -17.0;
-  a0.a2.a0.a0 = 18;
-  a0.a2.a0.a1.a0.a0 = -19;
-  a0.a2.a0.a1.a0.a1 = 20;
-  a0.a2.a0.a1.a1.a0 = -21.0;
-  a0.a2.a0.a2 = 22;
-  a0.a2.a0.a3.a0.a0 = -23.0;
-  a0.a2.a0.a3.a1 = 24.0;
-  a0.a2.a0.a4 = 25;
-  a0.a2.a0.a5.a0.a0 = 26.0;
-  a0.a2.a0.a5.a1.a0 = -27.0;
-  a0.a2.a0.a6 = 28;
-  a0.a2.a1.a0.a0 = -29;
-  a0.a2.a1.a0.a1 = 30;
-  a0.a2.a1.a1.a0 = -31.0;
-  a0.a2.a2 = 32.0;
-  a0.a2.a3 = -33.0;
-  a0.a3 = 34.0;
-  a1.a0 = 35;
-  a1.a1.a0.a0 = 36;
-  a1.a1.a0.a1.a0.a0 = -37;
-  a1.a1.a0.a1.a0.a1 = 38;
-  a1.a1.a0.a1.a1.a0 = -39.0;
-  a1.a1.a0.a2 = 40;
-  a1.a1.a0.a3.a0.a0 = -41.0;
-  a1.a1.a0.a3.a1 = 42.0;
-  a1.a1.a0.a4 = 43;
-  a1.a1.a0.a5.a0.a0 = 44.0;
-  a1.a1.a0.a5.a1.a0 = -45.0;
-  a1.a1.a0.a6 = 46;
-  a1.a1.a1.a0.a0 = -47;
-  a1.a1.a1.a0.a1 = 48;
-  a1.a1.a1.a1.a0 = -49.0;
-  a1.a1.a2 = 50.0;
-  a1.a1.a3 = -51.0;
-  a1.a2.a0.a0 = 52;
-  a1.a2.a0.a1.a0.a0 = -53;
-  a1.a2.a0.a1.a0.a1 = 54;
-  a1.a2.a0.a1.a1.a0 = -55.0;
-  a1.a2.a0.a2 = 56;
-  a1.a2.a0.a3.a0.a0 = -57.0;
-  a1.a2.a0.a3.a1 = 58.0;
-  a1.a2.a0.a4 = 59;
-  a1.a2.a0.a5.a0.a0 = 60.0;
-  a1.a2.a0.a5.a1.a0 = -61.0;
-  a1.a2.a0.a6 = 62;
-  a1.a2.a1.a0.a0 = -63;
-  a1.a2.a1.a0.a1 = 64;
-  a1.a2.a1.a1.a0 = -65.0;
-  a1.a2.a2 = 66.0;
-  a1.a2.a3 = -67.0;
-  a1.a3 = 68.0;
-  a2.a0 = 69;
-  a2.a1.a0.a0 = 70;
-  a2.a1.a0.a1.a0.a0 = -71;
-  a2.a1.a0.a1.a0.a1 = 72;
-  a2.a1.a0.a1.a1.a0 = -73.0;
-  a2.a1.a0.a2 = 74;
-  a2.a1.a0.a3.a0.a0 = -75.0;
-  a2.a1.a0.a3.a1 = 76.0;
-  a2.a1.a0.a4 = 77;
-  a2.a1.a0.a5.a0.a0 = 78.0;
-  a2.a1.a0.a5.a1.a0 = -79.0;
-  a2.a1.a0.a6 = 80;
-  a2.a1.a1.a0.a0 = -81;
-  a2.a1.a1.a0.a1 = 82;
-  a2.a1.a1.a1.a0 = -83.0;
-  a2.a1.a2 = 84.0;
-  a2.a1.a3 = -85.0;
-  a2.a2.a0.a0 = 86;
-  a2.a2.a0.a1.a0.a0 = -87;
-  a2.a2.a0.a1.a0.a1 = 88;
-  a2.a2.a0.a1.a1.a0 = -89.0;
-  a2.a2.a0.a2 = 90;
-  a2.a2.a0.a3.a0.a0 = -91.0;
-  a2.a2.a0.a3.a1 = 92.0;
-  a2.a2.a0.a4 = 93;
-  a2.a2.a0.a5.a0.a0 = 94.0;
-  a2.a2.a0.a5.a1.a0 = -95.0;
-  a2.a2.a0.a6 = 96;
-  a2.a2.a1.a0.a0 = -97;
-  a2.a2.a1.a0.a1 = 98;
-  a2.a2.a1.a1.a0 = -99.0;
-  a2.a2.a2 = 100.0;
-  a2.a2.a3 = -101.0;
-  a2.a3 = 102.0;
-  a3.a0 = 103;
-  a3.a1.a0.a0 = 104;
-  a3.a1.a0.a1.a0.a0 = -105;
-  a3.a1.a0.a1.a0.a1 = 106;
-  a3.a1.a0.a1.a1.a0 = -107.0;
-  a3.a1.a0.a2 = 108;
-  a3.a1.a0.a3.a0.a0 = -109.0;
-  a3.a1.a0.a3.a1 = 110.0;
-  a3.a1.a0.a4 = 111;
-  a3.a1.a0.a5.a0.a0 = 112.0;
-  a3.a1.a0.a5.a1.a0 = -113.0;
-  a3.a1.a0.a6 = 114;
-  a3.a1.a1.a0.a0 = -115;
-  a3.a1.a1.a0.a1 = 116;
-  a3.a1.a1.a1.a0 = -117.0;
-  a3.a1.a2 = 118.0;
-  a3.a1.a3 = -119.0;
-  a3.a2.a0.a0 = 120;
-  a3.a2.a0.a1.a0.a0 = -121;
-  a3.a2.a0.a1.a0.a1 = 122;
-  a3.a2.a0.a1.a1.a0 = -123.0;
-  a3.a2.a0.a2 = 124;
-  a3.a2.a0.a3.a0.a0 = -125.0;
-  a3.a2.a0.a3.a1 = 126.0;
-  a3.a2.a0.a4 = 127;
-  a3.a2.a0.a5.a0.a0 = 128.0;
-  a3.a2.a0.a5.a1.a0 = -129.0;
-  a3.a2.a0.a6 = 130;
-  a3.a2.a1.a0.a0 = -131;
-  a3.a2.a1.a0.a1 = 132;
-  a3.a2.a1.a1.a0 = -133.0;
-  a3.a2.a2 = 134.0;
-  a3.a2.a3 = -135.0;
-  a3.a3 = 136.0;
-
-  final result = passStructNestedIrregularEvenBiggerx4Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(1572.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-}
-
-final passStruct8BytesInlineArrayIntx4Leaf = ffiTestFunctions.lookupFunction<
-        Int32 Function(Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt),
-        int Function(
-            Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt)>("PassStruct8BytesInlineArrayIntx4",
-    isLeaf: true);
-
-/// Simple struct with inline array.
-void testPassStruct8BytesInlineArrayIntx4Leaf() {
-  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a3 = a3Pointer.ref;
-
-  a0.a0[0] = 1;
-  a0.a0[1] = 2;
-  a0.a0[2] = 3;
-  a0.a0[3] = 4;
-  a0.a0[4] = 5;
-  a0.a0[5] = 6;
-  a0.a0[6] = 7;
-  a0.a0[7] = 8;
-  a1.a0[0] = 9;
-  a1.a0[1] = 10;
-  a1.a0[2] = 11;
-  a1.a0[3] = 12;
-  a1.a0[4] = 13;
-  a1.a0[5] = 14;
-  a1.a0[6] = 15;
-  a1.a0[7] = 16;
-  a2.a0[0] = 17;
-  a2.a0[1] = 18;
-  a2.a0[2] = 19;
-  a2.a0[3] = 20;
-  a2.a0[4] = 21;
-  a2.a0[5] = 22;
-  a2.a0[6] = 23;
-  a2.a0[7] = 24;
-  a3.a0[0] = 25;
-  a3.a0[1] = 26;
-  a3.a0[2] = 27;
-  a3.a0[3] = 28;
-  a3.a0[4] = 29;
-  a3.a0[5] = 30;
-  a3.a0[6] = 31;
-  a3.a0[7] = 32;
-
-  final result = passStruct8BytesInlineArrayIntx4Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.equals(528, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-}
-
-final passStructInlineArrayIrregularx4Leaf = ffiTestFunctions.lookupFunction<
-        Int32 Function(StructInlineArrayIrregular, StructInlineArrayIrregular,
-            StructInlineArrayIrregular, StructInlineArrayIrregular),
-        int Function(
-            StructInlineArrayIrregular,
-            StructInlineArrayIrregular,
-            StructInlineArrayIrregular,
-            StructInlineArrayIrregular)>("PassStructInlineArrayIrregularx4",
-    isLeaf: true);
-
-/// Irregular struct with inline array.
-void testPassStructInlineArrayIrregularx4Leaf() {
-  final a0Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a3 = a3Pointer.ref;
-
-  a0.a0[0].a0 = -1;
-  a0.a0[0].a1 = 2;
-  a0.a0[1].a0 = -3;
-  a0.a0[1].a1 = 4;
-  a0.a1 = 5;
-  a1.a0[0].a0 = 6;
-  a1.a0[0].a1 = -7;
-  a1.a0[1].a0 = 8;
-  a1.a0[1].a1 = -9;
-  a1.a1 = 10;
-  a2.a0[0].a0 = -11;
-  a2.a0[0].a1 = 12;
-  a2.a0[1].a0 = -13;
-  a2.a0[1].a1 = 14;
-  a2.a1 = 15;
-  a3.a0[0].a0 = 16;
-  a3.a0[0].a1 = -17;
-  a3.a0[1].a0 = 18;
-  a3.a0[1].a1 = -19;
-  a3.a1 = 20;
-
-  final result = passStructInlineArrayIrregularx4Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.equals(50, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-}
-
-final passStructInlineArray100BytesLeaf = ffiTestFunctions.lookupFunction<
-        Int32 Function(StructInlineArray100Bytes),
-        int Function(StructInlineArray100Bytes)>(
-    "PassStructInlineArray100Bytes",
-    isLeaf: true);
-
-/// Regular larger struct with inline array.
-void testPassStructInlineArray100BytesLeaf() {
-  final a0Pointer = calloc<StructInlineArray100Bytes>();
-  final StructInlineArray100Bytes a0 = a0Pointer.ref;
-
-  a0.a0[0] = 1;
-  a0.a0[1] = 2;
-  a0.a0[2] = 3;
-  a0.a0[3] = 4;
-  a0.a0[4] = 5;
-  a0.a0[5] = 6;
-  a0.a0[6] = 7;
-  a0.a0[7] = 8;
-  a0.a0[8] = 9;
-  a0.a0[9] = 10;
-  a0.a0[10] = 11;
-  a0.a0[11] = 12;
-  a0.a0[12] = 13;
-  a0.a0[13] = 14;
-  a0.a0[14] = 15;
-  a0.a0[15] = 16;
-  a0.a0[16] = 17;
-  a0.a0[17] = 18;
-  a0.a0[18] = 19;
-  a0.a0[19] = 20;
-  a0.a0[20] = 21;
-  a0.a0[21] = 22;
-  a0.a0[22] = 23;
-  a0.a0[23] = 24;
-  a0.a0[24] = 25;
-  a0.a0[25] = 26;
-  a0.a0[26] = 27;
-  a0.a0[27] = 28;
-  a0.a0[28] = 29;
-  a0.a0[29] = 30;
-  a0.a0[30] = 31;
-  a0.a0[31] = 32;
-  a0.a0[32] = 33;
-  a0.a0[33] = 34;
-  a0.a0[34] = 35;
-  a0.a0[35] = 36;
-  a0.a0[36] = 37;
-  a0.a0[37] = 38;
-  a0.a0[38] = 39;
-  a0.a0[39] = 40;
-  a0.a0[40] = 41;
-  a0.a0[41] = 42;
-  a0.a0[42] = 43;
-  a0.a0[43] = 44;
-  a0.a0[44] = 45;
-  a0.a0[45] = 46;
-  a0.a0[46] = 47;
-  a0.a0[47] = 48;
-  a0.a0[48] = 49;
-  a0.a0[49] = 50;
-  a0.a0[50] = 51;
-  a0.a0[51] = 52;
-  a0.a0[52] = 53;
-  a0.a0[53] = 54;
-  a0.a0[54] = 55;
-  a0.a0[55] = 56;
-  a0.a0[56] = 57;
-  a0.a0[57] = 58;
-  a0.a0[58] = 59;
-  a0.a0[59] = 60;
-  a0.a0[60] = 61;
-  a0.a0[61] = 62;
-  a0.a0[62] = 63;
-  a0.a0[63] = 64;
-  a0.a0[64] = 65;
-  a0.a0[65] = 66;
-  a0.a0[66] = 67;
-  a0.a0[67] = 68;
-  a0.a0[68] = 69;
-  a0.a0[69] = 70;
-  a0.a0[70] = 71;
-  a0.a0[71] = 72;
-  a0.a0[72] = 73;
-  a0.a0[73] = 74;
-  a0.a0[74] = 75;
-  a0.a0[75] = 76;
-  a0.a0[76] = 77;
-  a0.a0[77] = 78;
-  a0.a0[78] = 79;
-  a0.a0[79] = 80;
-  a0.a0[80] = 81;
-  a0.a0[81] = 82;
-  a0.a0[82] = 83;
-  a0.a0[83] = 84;
-  a0.a0[84] = 85;
-  a0.a0[85] = 86;
-  a0.a0[86] = 87;
-  a0.a0[87] = 88;
-  a0.a0[88] = 89;
-  a0.a0[89] = 90;
-  a0.a0[90] = 91;
-  a0.a0[91] = 92;
-  a0.a0[92] = 93;
-  a0.a0[93] = 94;
-  a0.a0[94] = 95;
-  a0.a0[95] = 96;
-  a0.a0[96] = 97;
-  a0.a0[97] = 98;
-  a0.a0[98] = 99;
-  a0.a0[99] = 100;
-
-  final result = passStructInlineArray100BytesLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(5050, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructStruct16BytesHomogeneousFloat2x5Leaf =
-    ffiTestFunctions.lookupFunction<
-            Float Function(
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2),
-            double Function(
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2)>(
-        "PassStructStruct16BytesHomogeneousFloat2x5",
-        isLeaf: true);
-
-/// Arguments in FPU registers on arm hardfp and arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStructStruct16BytesHomogeneousFloat2x5Leaf() {
-  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a4 = a4Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-  a1.a0.a0 = -5.0;
-  a1.a1[0].a0 = 6.0;
-  a1.a1[1].a0 = -7.0;
-  a1.a2 = 8.0;
-  a2.a0.a0 = -9.0;
-  a2.a1[0].a0 = 10.0;
-  a2.a1[1].a0 = -11.0;
-  a2.a2 = 12.0;
-  a3.a0.a0 = -13.0;
-  a3.a1[0].a0 = 14.0;
-  a3.a1[1].a0 = -15.0;
-  a3.a2 = 16.0;
-  a4.a0.a0 = -17.0;
-  a4.a1[0].a0 = 18.0;
-  a4.a1[1].a0 = -19.0;
-  a4.a2 = 20.0;
-
-  final result =
-      passStructStruct16BytesHomogeneousFloat2x5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStructStruct32BytesHomogeneousDouble2x5Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2),
-            double Function(
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2)>(
-        "PassStructStruct32BytesHomogeneousDouble2x5",
-        isLeaf: true);
-
-/// Arguments in FPU registers on arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStructStruct32BytesHomogeneousDouble2x5Leaf() {
-  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a4 = a4Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-  a1.a0.a0 = -5.0;
-  a1.a1[0].a0 = 6.0;
-  a1.a1[1].a0 = -7.0;
-  a1.a2 = 8.0;
-  a2.a0.a0 = -9.0;
-  a2.a1[0].a0 = 10.0;
-  a2.a1[1].a0 = -11.0;
-  a2.a2 = 12.0;
-  a3.a0.a0 = -13.0;
-  a3.a1[0].a0 = 14.0;
-  a3.a1[1].a0 = -15.0;
-  a3.a2 = 16.0;
-  a4.a0.a0 = -17.0;
-  a4.a1[0].a0 = 18.0;
-  a4.a1[1].a0 = -19.0;
-  a4.a2 = 20.0;
-
-  final result =
-      passStructStruct32BytesHomogeneousDouble2x5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStructStruct16BytesMixed3x10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3),
-        double Function(
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3)>("PassStructStruct16BytesMixed3x10",
-    isLeaf: true);
-
-/// On x64, arguments are split over FP and int registers.
-/// On x64, it will exhaust the integer registers with the 6th argument.
-/// The rest goes on the stack.
-/// On arm, arguments are 4 byte aligned.
-void testPassStructStruct16BytesMixed3x10Leaf() {
-  final a0Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[0].a1 = -3;
-  a0.a1[0].a2 = 4;
-  a0.a2[0] = -5;
-  a0.a2[1] = 6;
-  a1.a0.a0 = -7.0;
-  a1.a1[0].a0 = 8.0;
-  a1.a1[0].a1 = -9;
-  a1.a1[0].a2 = 10;
-  a1.a2[0] = -11;
-  a1.a2[1] = 12;
-  a2.a0.a0 = -13.0;
-  a2.a1[0].a0 = 14.0;
-  a2.a1[0].a1 = -15;
-  a2.a1[0].a2 = 16;
-  a2.a2[0] = -17;
-  a2.a2[1] = 18;
-  a3.a0.a0 = -19.0;
-  a3.a1[0].a0 = 20.0;
-  a3.a1[0].a1 = -21;
-  a3.a1[0].a2 = 22;
-  a3.a2[0] = -23;
-  a3.a2[1] = 24;
-  a4.a0.a0 = -25.0;
-  a4.a1[0].a0 = 26.0;
-  a4.a1[0].a1 = -27;
-  a4.a1[0].a2 = 28;
-  a4.a2[0] = -29;
-  a4.a2[1] = 30;
-  a5.a0.a0 = -31.0;
-  a5.a1[0].a0 = 32.0;
-  a5.a1[0].a1 = -33;
-  a5.a1[0].a2 = 34;
-  a5.a2[0] = -35;
-  a5.a2[1] = 36;
-  a6.a0.a0 = -37.0;
-  a6.a1[0].a0 = 38.0;
-  a6.a1[0].a1 = -39;
-  a6.a1[0].a2 = 40;
-  a6.a2[0] = -41;
-  a6.a2[1] = 42;
-  a7.a0.a0 = -43.0;
-  a7.a1[0].a0 = 44.0;
-  a7.a1[0].a1 = -45;
-  a7.a1[0].a2 = 46;
-  a7.a2[0] = -47;
-  a7.a2[1] = 48;
-  a8.a0.a0 = -49.0;
-  a8.a1[0].a0 = 50.0;
-  a8.a1[0].a1 = -51;
-  a8.a1[0].a2 = 52;
-  a8.a2[0] = -53;
-  a8.a2[1] = 54;
-  a9.a0.a0 = -55.0;
-  a9.a1[0].a0 = 56.0;
-  a9.a1[0].a1 = -57;
-  a9.a1[0].a2 = 58;
-  a9.a2[0] = -59;
-  a9.a2[1] = 60;
-
-  final result = passStructStruct16BytesMixed3x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(30.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUint8Struct32BytesInlineArrayMultiDimensionalILeaf =
-    ffiTestFunctions.lookupFunction<
-            Uint32 Function(
-                Uint8,
-                Struct32BytesInlineArrayMultiDimensionalInt,
-                Uint8,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                Uint8,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                Uint8),
-            int Function(
-                int,
-                Struct32BytesInlineArrayMultiDimensionalInt,
-                int,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                int,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                int)>("PassUint8Struct32BytesInlineArrayMultiDimensionalI",
-        isLeaf: true);
-
-/// Test multi dimensional inline array struct as argument.
-void testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf() {
-  int a0;
-  final a1Pointer = calloc<Struct32BytesInlineArrayMultiDimensionalInt>();
-  final Struct32BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
-  int a2;
-  final a3Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
-  final Struct8BytesInlineArrayMultiDimensionalInt a3 = a3Pointer.ref;
-  int a4;
-  final a5Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
-  final Struct8BytesInlineArrayMultiDimensionalInt a5 = a5Pointer.ref;
-  int a6;
-
-  a0 = 1;
-  a1.a0[0][0][0][0][0] = 2;
-  a1.a0[0][0][0][0][1] = 3;
-  a1.a0[0][0][0][1][0] = 4;
-  a1.a0[0][0][0][1][1] = 5;
-  a1.a0[0][0][1][0][0] = 6;
-  a1.a0[0][0][1][0][1] = 7;
-  a1.a0[0][0][1][1][0] = 8;
-  a1.a0[0][0][1][1][1] = 9;
-  a1.a0[0][1][0][0][0] = 10;
-  a1.a0[0][1][0][0][1] = 11;
-  a1.a0[0][1][0][1][0] = 12;
-  a1.a0[0][1][0][1][1] = 13;
-  a1.a0[0][1][1][0][0] = 14;
-  a1.a0[0][1][1][0][1] = 15;
-  a1.a0[0][1][1][1][0] = 16;
-  a1.a0[0][1][1][1][1] = 17;
-  a1.a0[1][0][0][0][0] = 18;
-  a1.a0[1][0][0][0][1] = 19;
-  a1.a0[1][0][0][1][0] = 20;
-  a1.a0[1][0][0][1][1] = 21;
-  a1.a0[1][0][1][0][0] = 22;
-  a1.a0[1][0][1][0][1] = 23;
-  a1.a0[1][0][1][1][0] = 24;
-  a1.a0[1][0][1][1][1] = 25;
-  a1.a0[1][1][0][0][0] = 26;
-  a1.a0[1][1][0][0][1] = 27;
-  a1.a0[1][1][0][1][0] = 28;
-  a1.a0[1][1][0][1][1] = 29;
-  a1.a0[1][1][1][0][0] = 30;
-  a1.a0[1][1][1][0][1] = 31;
-  a1.a0[1][1][1][1][0] = 32;
-  a1.a0[1][1][1][1][1] = 33;
-  a2 = 34;
-  a3.a0[0][0][0] = 35;
-  a3.a0[0][0][1] = 36;
-  a3.a0[0][1][0] = 37;
-  a3.a0[0][1][1] = 38;
-  a3.a0[1][0][0] = 39;
-  a3.a0[1][0][1] = 40;
-  a3.a0[1][1][0] = 41;
-  a3.a0[1][1][1] = 42;
-  a4 = 43;
-  a5.a0[0][0][0] = 44;
-  a5.a0[0][0][1] = 45;
-  a5.a0[0][1][0] = 46;
-  a5.a0[0][1][1] = 47;
-  a5.a0[1][0][0] = 48;
-  a5.a0[1][0][1] = 49;
-  a5.a0[1][1][0] = 50;
-  a5.a0[1][1][1] = 51;
-  a6 = 52;
-
-  final result = passUint8Struct32BytesInlineArrayMultiDimensionalILeaf(
-      a0, a1, a2, a3, a4, a5, a6);
-
-  print("result = $result");
-
-  Expect.equals(1378, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-}
-
-final passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf =
-    ffiTestFunctions.lookupFunction<
-            Uint32 Function(
-                Uint8, Struct4BytesInlineArrayMultiDimensionalInt, Uint8),
-            int Function(int, Struct4BytesInlineArrayMultiDimensionalInt, int)>(
-        "PassUint8Struct4BytesInlineArrayMultiDimensionalIn",
-        isLeaf: true);
-
-/// Test struct in multi dimensional inline array.
-void testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf() {
-  int a0;
-  final a1Pointer = calloc<Struct4BytesInlineArrayMultiDimensionalInt>();
-  final Struct4BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
-  int a2;
-
-  a0 = 1;
-  a1.a0[0][0].a0 = 2;
-  a1.a0[0][1].a0 = -3;
-  a1.a0[1][0].a0 = 4;
-  a1.a0[1][1].a0 = -5;
-  a2 = 6;
-
-  final result =
-      passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(5, result);
-
-  calloc.free(a1Pointer);
-}
-
-final passStruct3BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt),
-    int Function(
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt)>("PassStruct3BytesPackedIntx10", isLeaf: true);
-
-/// Small struct with mis-aligned member.
-void testPassStruct3BytesPackedIntx10Leaf() {
-  final a0Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result =
-      passStruct3BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt),
-    int Function(
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt)>("PassStruct8BytesPackedIntx10", isLeaf: true);
-
-/// Struct with mis-aligned member.
-void testPassStruct8BytesPackedIntx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a1.a0 = 6;
-  a1.a1 = 7;
-  a1.a2 = 8;
-  a1.a3 = 9;
-  a1.a4 = 10;
-  a2.a0 = 11;
-  a2.a1 = 12;
-  a2.a2 = 13;
-  a2.a3 = 14;
-  a2.a4 = 15;
-  a3.a0 = 16;
-  a3.a1 = 17;
-  a3.a2 = 18;
-  a3.a3 = 19;
-  a3.a4 = 20;
-  a4.a0 = 21;
-  a4.a1 = 22;
-  a4.a2 = 23;
-  a4.a3 = 24;
-  a4.a4 = 25;
-  a5.a0 = 26;
-  a5.a1 = 27;
-  a5.a2 = 28;
-  a5.a3 = 29;
-  a5.a4 = 30;
-  a6.a0 = 31;
-  a6.a1 = 32;
-  a6.a2 = 33;
-  a6.a3 = 34;
-  a6.a4 = 35;
-  a7.a0 = 36;
-  a7.a1 = 37;
-  a7.a2 = 38;
-  a7.a3 = 39;
-  a7.a4 = 40;
-  a8.a0 = 41;
-  a8.a1 = 42;
-  a8.a2 = 43;
-  a8.a3 = 44;
-  a8.a4 = 45;
-  a9.a0 = 46;
-  a9.a1 = 47;
-  a9.a2 = 48;
-  a9.a3 = 49;
-  a9.a4 = 50;
-
-  final result =
-      passStruct8BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(1275, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct9BytesPackedMixedx10DoubleInt32x2Leaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Double,
-            Int32,
-            Int32),
-        double Function(
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            double,
-            int,
-            int)>("PassStruct9BytesPackedMixedx10DoubleInt32x2", isLeaf: true);
-
-/// Struct with mis-aligned member.
-/// Tests backfilling of CPU and FPU registers.
-void testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf() {
-  final a0Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a9 = a9Pointer.ref;
-  double a10;
-  int a11;
-  int a12;
-
-  a0.a0 = 1;
-  a0.a1 = 2.0;
-  a1.a0 = 3;
-  a1.a1 = 4.0;
-  a2.a0 = 5;
-  a2.a1 = 6.0;
-  a3.a0 = 7;
-  a3.a1 = 8.0;
-  a4.a0 = 9;
-  a4.a1 = 10.0;
-  a5.a0 = 11;
-  a5.a1 = 12.0;
-  a6.a0 = 13;
-  a6.a1 = 14.0;
-  a7.a0 = 15;
-  a7.a1 = 16.0;
-  a8.a0 = 17;
-  a8.a1 = 18.0;
-  a9.a0 = 19;
-  a9.a1 = 20.0;
-  a10 = -21.0;
-  a11 = 22;
-  a12 = -23;
-
-  final result = passStruct9BytesPackedMixedx10DoubleInt32x2Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
-
-  print("result = $result");
-
-  Expect.approxEquals(188.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct5BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
-    Double Function(Struct5BytesPackedMixed),
-    double Function(
-        Struct5BytesPackedMixed)>("PassStruct5BytesPackedMixed", isLeaf: true);
-
-/// This packed struct happens to have only aligned members.
-void testPassStruct5BytesPackedMixedLeaf() {
-  final a0Pointer = calloc<Struct5BytesPackedMixed>();
-  final Struct5BytesPackedMixed a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2;
-
-  final result = passStruct5BytesPackedMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(1.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedAlignmentStruct5BytesPackedMixedLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(StructNestedAlignmentStruct5BytesPackedMixed),
-            double Function(StructNestedAlignmentStruct5BytesPackedMixed)>(
-        "PassStructNestedAlignmentStruct5BytesPackedMixed",
-        isLeaf: true);
-
-/// Check alignment of packed struct in non-packed struct.
-void testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf() {
-  final a0Pointer = calloc<StructNestedAlignmentStruct5BytesPackedMixed>();
-  final StructNestedAlignmentStruct5BytesPackedMixed a0 = a0Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1.a0 = 2.0;
-  a0.a1.a1 = 3;
-
-  final result = passStructNestedAlignmentStruct5BytesPackedMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(6.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct6BytesInlineArrayIntLeaf = ffiTestFunctions.lookupFunction<
-        Double Function(Struct6BytesInlineArrayInt),
-        double Function(Struct6BytesInlineArrayInt)>(
-    "PassStruct6BytesInlineArrayInt",
-    isLeaf: true);
-
-/// Check alignment of packed struct array in non-packed struct.
-void testPassStruct6BytesInlineArrayIntLeaf() {
-  final a0Pointer = calloc<Struct6BytesInlineArrayInt>();
-  final Struct6BytesInlineArrayInt a0 = a0Pointer.ref;
-
-  a0.a0[0].a0 = -1;
-  a0.a0[0].a1 = 2;
-  a0.a0[1].a0 = -3;
-  a0.a0[1].a1 = 4;
-
-  final result = passStruct6BytesInlineArrayIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(2.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct15BytesInlineArrayMixedLeaf = ffiTestFunctions.lookupFunction<
-        Double Function(Struct15BytesInlineArrayMixed),
-        double Function(Struct15BytesInlineArrayMixed)>(
-    "PassStruct15BytesInlineArrayMixed",
-    isLeaf: true);
-
-/// Check alignment of packed struct array in non-packed struct.
-void testPassStruct15BytesInlineArrayMixedLeaf() {
-  final a0Pointer = calloc<Struct15BytesInlineArrayMixed>();
-  final Struct15BytesInlineArrayMixed a0 = a0Pointer.ref;
-
-  a0.a0[0].a0 = -1.0;
-  a0.a0[0].a1 = 2;
-  a0.a0[1].a0 = -3.0;
-  a0.a0[1].a1 = 4;
-  a0.a0[2].a0 = -5.0;
-  a0.a0[2].a1 = 6;
-
-  final result = passStruct15BytesInlineArrayMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(3.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passUnion4BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed),
-    double Function(
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed)>("PassUnion4BytesMixedx10", isLeaf: true);
-
-/// Check placement of mixed integer/float union.
-void testPassUnion4BytesMixedx10Leaf() {
-  final a0Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a1.a0 = 2;
-  a2.a0 = 3;
-  a3.a0 = 4;
-  a4.a0 = 5;
-  a5.a0 = 6;
-  a6.a0 = 7;
-  a7.a0 = 8;
-  a8.a0 = 9;
-  a9.a0 = 10;
-
-  final result =
-      passUnion4BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(55.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat),
-    double Function(
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat)>("PassUnion8BytesNestedFloatx10", isLeaf: true);
-
-/// Check placement of mixed floats union.
-void testPassUnion8BytesNestedFloatx10Leaf() {
-  final a0Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a1.a0 = 2.0;
-  a2.a0 = -3.0;
-  a3.a0 = 4.0;
-  a4.a0 = -5.0;
-  a5.a0 = 6.0;
-  a6.a0 = -7.0;
-  a7.a0 = 8.0;
-  a8.a0 = -9.0;
-  a9.a0 = 10.0;
-
-  final result =
-      passUnion8BytesNestedFloatx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(5.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion9BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt),
-    double Function(
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt)>("PassUnion9BytesNestedIntx10", isLeaf: true);
-
-/// Mixed-size union argument.
-void testPassUnion9BytesNestedIntx10Leaf() {
-  final a0Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a1.a0.a0 = 4;
-  a1.a0.a1 = -5;
-  a1.a0.a2 = 6;
-  a2.a0.a0 = -7;
-  a2.a0.a1 = 8;
-  a2.a0.a2 = -9;
-  a3.a0.a0 = 10;
-  a3.a0.a1 = -11;
-  a3.a0.a2 = 12;
-  a4.a0.a0 = -13;
-  a4.a0.a1 = 14;
-  a4.a0.a2 = -15;
-  a5.a0.a0 = 16;
-  a5.a0.a1 = -17;
-  a5.a0.a2 = 18;
-  a6.a0.a0 = -19;
-  a6.a0.a1 = 20;
-  a6.a0.a2 = -21;
-  a7.a0.a0 = 22;
-  a7.a0.a1 = -23;
-  a7.a0.a2 = 24;
-  a8.a0.a0 = -25;
-  a8.a0.a1 = 26;
-  a8.a0.a2 = -27;
-  a9.a0.a0 = 28;
-  a9.a0.a1 = -29;
-  a9.a0.a2 = 30;
-
-  final result =
-      passUnion9BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(15.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion16BytesNestedInlineArrayFloatx10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat),
-            double Function(
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat)>(
-        "PassUnion16BytesNestedInlineArrayFloatx10",
-        isLeaf: true);
-
-/// Union with homogenous floats.
-void testPassUnion16BytesNestedInlineArrayFloatx10Leaf() {
-  final a0Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a9 = a9Pointer.ref;
-
-  a0.a0[0] = -1.0;
-  a0.a0[1] = 2.0;
-  a0.a0[2] = -3.0;
-  a0.a0[3] = 4.0;
-  a1.a0[0] = -5.0;
-  a1.a0[1] = 6.0;
-  a1.a0[2] = -7.0;
-  a1.a0[3] = 8.0;
-  a2.a0[0] = -9.0;
-  a2.a0[1] = 10.0;
-  a2.a0[2] = -11.0;
-  a2.a0[3] = 12.0;
-  a3.a0[0] = -13.0;
-  a3.a0[1] = 14.0;
-  a3.a0[2] = -15.0;
-  a3.a0[3] = 16.0;
-  a4.a0[0] = -17.0;
-  a4.a0[1] = 18.0;
-  a4.a0[2] = -19.0;
-  a4.a0[3] = 20.0;
-  a5.a0[0] = -21.0;
-  a5.a0[1] = 22.0;
-  a5.a0[2] = -23.0;
-  a5.a0[3] = 24.0;
-  a6.a0[0] = -25.0;
-  a6.a0[1] = 26.0;
-  a6.a0[2] = -27.0;
-  a6.a0[3] = 28.0;
-  a7.a0[0] = -29.0;
-  a7.a0[1] = 30.0;
-  a7.a0[2] = -31.0;
-  a7.a0[3] = 32.0;
-  a8.a0[0] = -33.0;
-  a8.a0[1] = 34.0;
-  a8.a0[2] = -35.0;
-  a8.a0[3] = 36.0;
-  a9.a0[0] = -37.0;
-  a9.a0[1] = 38.0;
-  a9.a0[2] = -39.0;
-  a9.a0[3] = 40.0;
-
-  final result = passUnion16BytesNestedInlineArrayFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(20.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion16BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
-        Double Function(
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat),
-        double Function(
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat)>("PassUnion16BytesNestedFloatx10",
-    isLeaf: true);
-
-/// Union with homogenous floats.
-void testPassUnion16BytesNestedFloatx10Leaf() {
-  final a0Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a0.a1 = 2.0;
-  a1.a0.a0 = -3.0;
-  a1.a0.a1 = 4.0;
-  a2.a0.a0 = -5.0;
-  a2.a0.a1 = 6.0;
-  a3.a0.a0 = -7.0;
-  a3.a0.a1 = 8.0;
-  a4.a0.a0 = -9.0;
-  a4.a0.a1 = 10.0;
-  a5.a0.a0 = -11.0;
-  a5.a0.a1 = 12.0;
-  a6.a0.a0 = -13.0;
-  a6.a0.a1 = 14.0;
-  a7.a0.a0 = -15.0;
-  a7.a0.a1 = 16.0;
-  a8.a0.a0 = -17.0;
-  a8.a0.a1 = 18.0;
-  a9.a0.a0 = -19.0;
-  a9.a0.a1 = 20.0;
-
-  final result = passUnion16BytesNestedFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final returnStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct1ByteInt Function(Int8),
-    Struct1ByteInt Function(int)>("ReturnStruct1ByteInt", isLeaf: true);
-
-/// Smallest struct with data.
-void testReturnStruct1ByteIntLeaf() {
-  int a0;
-
-  a0 = -1;
-
-  final result = returnStruct1ByteIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-}
-
-final returnStruct3BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct3BytesHomogeneousUint8 Function(Uint8, Uint8, Uint8),
-    Struct3BytesHomogeneousUint8 Function(
-        int, int, int)>("ReturnStruct3BytesHomogeneousUint8", isLeaf: true);
-
-/// Smaller than word size return value on all architectures.
-void testReturnStruct3BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-
-  final result = returnStruct3BytesHomogeneousUint8Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct3BytesInt2ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
-    Struct3BytesInt2ByteAligned Function(Int16, Int8),
-    Struct3BytesInt2ByteAligned Function(
-        int, int)>("ReturnStruct3BytesInt2ByteAligned", isLeaf: true);
-
-/// Smaller than word size return value on all architectures.
-/// With alignment rules taken into account size is 4 bytes.
-void testReturnStruct3BytesInt2ByteAlignedLeaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct3BytesInt2ByteAlignedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct4BytesHomogeneousInt16Leaf = ffiTestFunctions.lookupFunction<
-    Struct4BytesHomogeneousInt16 Function(Int16, Int16),
-    Struct4BytesHomogeneousInt16 Function(
-        int, int)>("ReturnStruct4BytesHomogeneousInt16", isLeaf: true);
-
-/// Word size return value on 32 bit architectures..
-void testReturnStruct4BytesHomogeneousInt16Leaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct4BytesHomogeneousInt16Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct7BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct7BytesHomogeneousUint8 Function(
-        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
-    Struct7BytesHomogeneousUint8 Function(int, int, int, int, int, int,
-        int)>("ReturnStruct7BytesHomogeneousUint8", isLeaf: true);
-
-/// Non-wordsize return value.
-void testReturnStruct7BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-
-  final result =
-      returnStruct7BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5, a6);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-}
-
-final returnStruct7BytesInt4ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
-    Struct7BytesInt4ByteAligned Function(Int32, Int16, Int8),
-    Struct7BytesInt4ByteAligned Function(
-        int, int, int)>("ReturnStruct7BytesInt4ByteAligned", isLeaf: true);
-
-/// Non-wordsize return value.
-/// With alignment rules taken into account size is 8 bytes.
-void testReturnStruct7BytesInt4ByteAlignedLeaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct7BytesInt4ByteAlignedLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct8BytesIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesInt Function(Int16, Int16, Int32),
-    Struct8BytesInt Function(
-        int, int, int)>("ReturnStruct8BytesInt", isLeaf: true);
-
-/// Return value in integer registers on many architectures.
-void testReturnStruct8BytesIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct8BytesIntLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct8BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesHomogeneousFloat Function(Float, Float),
-    Struct8BytesHomogeneousFloat Function(
-        double, double)>("ReturnStruct8BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value in FP registers on many architectures.
-void testReturnStruct8BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-
-  a0 = -1.0;
-  a1 = 2.0;
-
-  final result = returnStruct8BytesHomogeneousFloatLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-}
-
-final returnStruct8BytesMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesMixed Function(Float, Int16, Int16),
-    Struct8BytesMixed Function(
-        double, int, int)>("ReturnStruct8BytesMixed", isLeaf: true);
-
-/// Return value split over FP and integer register in x64.
-void testReturnStruct8BytesMixedLeaf() {
-  double a0;
-  int a1;
-  int a2;
-
-  a0 = -1.0;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct8BytesMixedLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct9BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct9BytesHomogeneousUint8 Function(
-        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
-    Struct9BytesHomogeneousUint8 Function(int, int, int, int, int, int, int,
-        int, int)>("ReturnStruct9BytesHomogeneousUint8", isLeaf: true);
-
-/// The minimum alignment of this struct is only 1 byte based on its fields.
-/// Test that the memory backing these structs is the right size and that
-/// dart:ffi trampolines do not write outside this size.
-void testReturnStruct9BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  int a8;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-  a7 = 8;
-  a8 = 9;
-
-  final result = returnStruct9BytesHomogeneousUint8Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-  Expect.equals(a7, result.a7);
-  Expect.equals(a8, result.a8);
-}
-
-final returnStruct9BytesInt4Or8ByteAlignedLeaf =
-    ffiTestFunctions.lookupFunction<
-        Struct9BytesInt4Or8ByteAligned Function(Int64, Int8),
-        Struct9BytesInt4Or8ByteAligned Function(
-            int, int)>("ReturnStruct9BytesInt4Or8ByteAligned", isLeaf: true);
-
-/// Return value in two integer registers on x64.
-/// With alignment rules taken into account size is 12 or 16 bytes.
-void testReturnStruct9BytesInt4Or8ByteAlignedLeaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct9BytesInt4Or8ByteAlignedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct12BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct12BytesHomogeneousFloat Function(Float, Float, Float),
-    Struct12BytesHomogeneousFloat Function(double, double,
-        double)>("ReturnStruct12BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value in FPU registers, but does not use all registers on arm hardfp
-/// and arm64.
-void testReturnStruct12BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-  double a2;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-
-  final result = returnStruct12BytesHomogeneousFloatLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-}
-
-final returnStruct16BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesHomogeneousFloat Function(Float, Float, Float, Float),
-    Struct16BytesHomogeneousFloat Function(double, double, double,
-        double)>("ReturnStruct16BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value in FPU registers on arm hardfp and arm64.
-void testReturnStruct16BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-
-  final result = returnStruct16BytesHomogeneousFloatLeaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-}
-
-final returnStruct16BytesMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesMixed Function(Double, Int64),
-    Struct16BytesMixed Function(
-        double, int)>("ReturnStruct16BytesMixed", isLeaf: true);
-
-/// Return value split over FP and integer register in x64.
-void testReturnStruct16BytesMixedLeaf() {
-  double a0;
-  int a1;
-
-  a0 = -1.0;
-  a1 = 2;
-
-  final result = returnStruct16BytesMixedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct16BytesMixed2Leaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesMixed2 Function(Float, Float, Float, Int32),
-    Struct16BytesMixed2 Function(double, double, double,
-        int)>("ReturnStruct16BytesMixed2", isLeaf: true);
-
-/// Return value split over FP and integer register in x64.
-/// The integer register contains half float half int.
-void testReturnStruct16BytesMixed2Leaf() {
-  double a0;
-  double a1;
-  double a2;
-  int a3;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4;
-
-  final result = returnStruct16BytesMixed2Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-}
-
-final returnStruct17BytesIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct17BytesInt Function(Int64, Int64, Int8),
-    Struct17BytesInt Function(
-        int, int, int)>("ReturnStruct17BytesInt", isLeaf: true);
-
-/// Rerturn value returned in preallocated space passed by pointer on most ABIs.
-/// Is non word size on purpose, to test that structs are rounded up to word size
-/// on all ABIs.
-void testReturnStruct17BytesIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct17BytesIntLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct19BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct19BytesHomogeneousUint8 Function(
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8),
-    Struct19BytesHomogeneousUint8 Function(
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int)>("ReturnStruct19BytesHomogeneousUint8", isLeaf: true);
-
-/// The minimum alignment of this struct is only 1 byte based on its fields.
-/// Test that the memory backing these structs is the right size and that
-/// dart:ffi trampolines do not write outside this size.
-void testReturnStruct19BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  int a8;
-  int a9;
-  int a10;
-  int a11;
-  int a12;
-  int a13;
-  int a14;
-  int a15;
-  int a16;
-  int a17;
-  int a18;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-  a7 = 8;
-  a8 = 9;
-  a9 = 10;
-  a10 = 11;
-  a11 = 12;
-  a12 = 13;
-  a13 = 14;
-  a14 = 15;
-  a15 = 16;
-  a16 = 17;
-  a17 = 18;
-  a18 = 19;
-
-  final result = returnStruct19BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5,
-      a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-  Expect.equals(a7, result.a7);
-  Expect.equals(a8, result.a8);
-  Expect.equals(a9, result.a9);
-  Expect.equals(a10, result.a10);
-  Expect.equals(a11, result.a11);
-  Expect.equals(a12, result.a12);
-  Expect.equals(a13, result.a13);
-  Expect.equals(a14, result.a14);
-  Expect.equals(a15, result.a15);
-  Expect.equals(a16, result.a16);
-  Expect.equals(a17, result.a17);
-  Expect.equals(a18, result.a18);
-}
-
-final returnStruct20BytesHomogeneousInt32Leaf = ffiTestFunctions.lookupFunction<
-    Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32, Int32),
-    Struct20BytesHomogeneousInt32 Function(int, int, int, int,
-        int)>("ReturnStruct20BytesHomogeneousInt32", isLeaf: true);
-
-/// Return value too big to go in cpu registers on arm64.
-void testReturnStruct20BytesHomogeneousInt32Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-
-  final result = returnStruct20BytesHomogeneousInt32Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-}
-
-final returnStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct20BytesHomogeneousFloat Function(Float, Float, Float, Float, Float),
-    Struct20BytesHomogeneousFloat Function(double, double, double, double,
-        double)>("ReturnStruct20BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value too big to go in FPU registers on x64, arm hardfp and arm64.
-void testReturnStruct20BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-  double a4;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-  a4 = -5.0;
-
-  final result = returnStruct20BytesHomogeneousFloatLeaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-  Expect.approxEquals(a4, result.a4);
-}
-
-final returnStruct32BytesHomogeneousDoubleLeaf =
-    ffiTestFunctions.lookupFunction<
-        Struct32BytesHomogeneousDouble Function(Double, Double, Double, Double),
-        Struct32BytesHomogeneousDouble Function(double, double, double,
-            double)>("ReturnStruct32BytesHomogeneousDouble", isLeaf: true);
-
-/// Return value in FPU registers on arm64.
-void testReturnStruct32BytesHomogeneousDoubleLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-
-  final result = returnStruct32BytesHomogeneousDoubleLeaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-}
-
-final returnStruct40BytesHomogeneousDoubleLeaf =
-    ffiTestFunctions.lookupFunction<
-        Struct40BytesHomogeneousDouble Function(
-            Double, Double, Double, Double, Double),
-        Struct40BytesHomogeneousDouble Function(double, double, double, double,
-            double)>("ReturnStruct40BytesHomogeneousDouble", isLeaf: true);
-
-/// Return value too big to go in FPU registers on arm64.
-void testReturnStruct40BytesHomogeneousDoubleLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-  double a4;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-  a4 = -5.0;
-
-  final result = returnStruct40BytesHomogeneousDoubleLeaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-  Expect.approxEquals(a4, result.a4);
-}
-
-final returnStruct1024BytesHomogeneousUint64Leaf =
-    ffiTestFunctions.lookupFunction<
-        Struct1024BytesHomogeneousUint64 Function(
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64),
-        Struct1024BytesHomogeneousUint64 Function(
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int)>("ReturnStruct1024BytesHomogeneousUint64", isLeaf: true);
-
-/// Test 1kb struct.
-void testReturnStruct1024BytesHomogeneousUint64Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  int a8;
-  int a9;
-  int a10;
-  int a11;
-  int a12;
-  int a13;
-  int a14;
-  int a15;
-  int a16;
-  int a17;
-  int a18;
-  int a19;
-  int a20;
-  int a21;
-  int a22;
-  int a23;
-  int a24;
-  int a25;
-  int a26;
-  int a27;
-  int a28;
-  int a29;
-  int a30;
-  int a31;
-  int a32;
-  int a33;
-  int a34;
-  int a35;
-  int a36;
-  int a37;
-  int a38;
-  int a39;
-  int a40;
-  int a41;
-  int a42;
-  int a43;
-  int a44;
-  int a45;
-  int a46;
-  int a47;
-  int a48;
-  int a49;
-  int a50;
-  int a51;
-  int a52;
-  int a53;
-  int a54;
-  int a55;
-  int a56;
-  int a57;
-  int a58;
-  int a59;
-  int a60;
-  int a61;
-  int a62;
-  int a63;
-  int a64;
-  int a65;
-  int a66;
-  int a67;
-  int a68;
-  int a69;
-  int a70;
-  int a71;
-  int a72;
-  int a73;
-  int a74;
-  int a75;
-  int a76;
-  int a77;
-  int a78;
-  int a79;
-  int a80;
-  int a81;
-  int a82;
-  int a83;
-  int a84;
-  int a85;
-  int a86;
-  int a87;
-  int a88;
-  int a89;
-  int a90;
-  int a91;
-  int a92;
-  int a93;
-  int a94;
-  int a95;
-  int a96;
-  int a97;
-  int a98;
-  int a99;
-  int a100;
-  int a101;
-  int a102;
-  int a103;
-  int a104;
-  int a105;
-  int a106;
-  int a107;
-  int a108;
-  int a109;
-  int a110;
-  int a111;
-  int a112;
-  int a113;
-  int a114;
-  int a115;
-  int a116;
-  int a117;
-  int a118;
-  int a119;
-  int a120;
-  int a121;
-  int a122;
-  int a123;
-  int a124;
-  int a125;
-  int a126;
-  int a127;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-  a7 = 8;
-  a8 = 9;
-  a9 = 10;
-  a10 = 11;
-  a11 = 12;
-  a12 = 13;
-  a13 = 14;
-  a14 = 15;
-  a15 = 16;
-  a16 = 17;
-  a17 = 18;
-  a18 = 19;
-  a19 = 20;
-  a20 = 21;
-  a21 = 22;
-  a22 = 23;
-  a23 = 24;
-  a24 = 25;
-  a25 = 26;
-  a26 = 27;
-  a27 = 28;
-  a28 = 29;
-  a29 = 30;
-  a30 = 31;
-  a31 = 32;
-  a32 = 33;
-  a33 = 34;
-  a34 = 35;
-  a35 = 36;
-  a36 = 37;
-  a37 = 38;
-  a38 = 39;
-  a39 = 40;
-  a40 = 41;
-  a41 = 42;
-  a42 = 43;
-  a43 = 44;
-  a44 = 45;
-  a45 = 46;
-  a46 = 47;
-  a47 = 48;
-  a48 = 49;
-  a49 = 50;
-  a50 = 51;
-  a51 = 52;
-  a52 = 53;
-  a53 = 54;
-  a54 = 55;
-  a55 = 56;
-  a56 = 57;
-  a57 = 58;
-  a58 = 59;
-  a59 = 60;
-  a60 = 61;
-  a61 = 62;
-  a62 = 63;
-  a63 = 64;
-  a64 = 65;
-  a65 = 66;
-  a66 = 67;
-  a67 = 68;
-  a68 = 69;
-  a69 = 70;
-  a70 = 71;
-  a71 = 72;
-  a72 = 73;
-  a73 = 74;
-  a74 = 75;
-  a75 = 76;
-  a76 = 77;
-  a77 = 78;
-  a78 = 79;
-  a79 = 80;
-  a80 = 81;
-  a81 = 82;
-  a82 = 83;
-  a83 = 84;
-  a84 = 85;
-  a85 = 86;
-  a86 = 87;
-  a87 = 88;
-  a88 = 89;
-  a89 = 90;
-  a90 = 91;
-  a91 = 92;
-  a92 = 93;
-  a93 = 94;
-  a94 = 95;
-  a95 = 96;
-  a96 = 97;
-  a97 = 98;
-  a98 = 99;
-  a99 = 100;
-  a100 = 101;
-  a101 = 102;
-  a102 = 103;
-  a103 = 104;
-  a104 = 105;
-  a105 = 106;
-  a106 = 107;
-  a107 = 108;
-  a108 = 109;
-  a109 = 110;
-  a110 = 111;
-  a111 = 112;
-  a112 = 113;
-  a113 = 114;
-  a114 = 115;
-  a115 = 116;
-  a116 = 117;
-  a117 = 118;
-  a118 = 119;
-  a119 = 120;
-  a120 = 121;
-  a121 = 122;
-  a122 = 123;
-  a123 = 124;
-  a124 = 125;
-  a125 = 126;
-  a126 = 127;
-  a127 = 128;
-
-  final result = returnStruct1024BytesHomogeneousUint64Leaf(
-      a0,
-      a1,
-      a2,
-      a3,
-      a4,
-      a5,
-      a6,
-      a7,
-      a8,
-      a9,
-      a10,
-      a11,
-      a12,
-      a13,
-      a14,
-      a15,
-      a16,
-      a17,
-      a18,
-      a19,
-      a20,
-      a21,
-      a22,
-      a23,
-      a24,
-      a25,
-      a26,
-      a27,
-      a28,
-      a29,
-      a30,
-      a31,
-      a32,
-      a33,
-      a34,
-      a35,
-      a36,
-      a37,
-      a38,
-      a39,
-      a40,
-      a41,
-      a42,
-      a43,
-      a44,
-      a45,
-      a46,
-      a47,
-      a48,
-      a49,
-      a50,
-      a51,
-      a52,
-      a53,
-      a54,
-      a55,
-      a56,
-      a57,
-      a58,
-      a59,
-      a60,
-      a61,
-      a62,
-      a63,
-      a64,
-      a65,
-      a66,
-      a67,
-      a68,
-      a69,
-      a70,
-      a71,
-      a72,
-      a73,
-      a74,
-      a75,
-      a76,
-      a77,
-      a78,
-      a79,
-      a80,
-      a81,
-      a82,
-      a83,
-      a84,
-      a85,
-      a86,
-      a87,
-      a88,
-      a89,
-      a90,
-      a91,
-      a92,
-      a93,
-      a94,
-      a95,
-      a96,
-      a97,
-      a98,
-      a99,
-      a100,
-      a101,
-      a102,
-      a103,
-      a104,
-      a105,
-      a106,
-      a107,
-      a108,
-      a109,
-      a110,
-      a111,
-      a112,
-      a113,
-      a114,
-      a115,
-      a116,
-      a117,
-      a118,
-      a119,
-      a120,
-      a121,
-      a122,
-      a123,
-      a124,
-      a125,
-      a126,
-      a127);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-  Expect.equals(a7, result.a7);
-  Expect.equals(a8, result.a8);
-  Expect.equals(a9, result.a9);
-  Expect.equals(a10, result.a10);
-  Expect.equals(a11, result.a11);
-  Expect.equals(a12, result.a12);
-  Expect.equals(a13, result.a13);
-  Expect.equals(a14, result.a14);
-  Expect.equals(a15, result.a15);
-  Expect.equals(a16, result.a16);
-  Expect.equals(a17, result.a17);
-  Expect.equals(a18, result.a18);
-  Expect.equals(a19, result.a19);
-  Expect.equals(a20, result.a20);
-  Expect.equals(a21, result.a21);
-  Expect.equals(a22, result.a22);
-  Expect.equals(a23, result.a23);
-  Expect.equals(a24, result.a24);
-  Expect.equals(a25, result.a25);
-  Expect.equals(a26, result.a26);
-  Expect.equals(a27, result.a27);
-  Expect.equals(a28, result.a28);
-  Expect.equals(a29, result.a29);
-  Expect.equals(a30, result.a30);
-  Expect.equals(a31, result.a31);
-  Expect.equals(a32, result.a32);
-  Expect.equals(a33, result.a33);
-  Expect.equals(a34, result.a34);
-  Expect.equals(a35, result.a35);
-  Expect.equals(a36, result.a36);
-  Expect.equals(a37, result.a37);
-  Expect.equals(a38, result.a38);
-  Expect.equals(a39, result.a39);
-  Expect.equals(a40, result.a40);
-  Expect.equals(a41, result.a41);
-  Expect.equals(a42, result.a42);
-  Expect.equals(a43, result.a43);
-  Expect.equals(a44, result.a44);
-  Expect.equals(a45, result.a45);
-  Expect.equals(a46, result.a46);
-  Expect.equals(a47, result.a47);
-  Expect.equals(a48, result.a48);
-  Expect.equals(a49, result.a49);
-  Expect.equals(a50, result.a50);
-  Expect.equals(a51, result.a51);
-  Expect.equals(a52, result.a52);
-  Expect.equals(a53, result.a53);
-  Expect.equals(a54, result.a54);
-  Expect.equals(a55, result.a55);
-  Expect.equals(a56, result.a56);
-  Expect.equals(a57, result.a57);
-  Expect.equals(a58, result.a58);
-  Expect.equals(a59, result.a59);
-  Expect.equals(a60, result.a60);
-  Expect.equals(a61, result.a61);
-  Expect.equals(a62, result.a62);
-  Expect.equals(a63, result.a63);
-  Expect.equals(a64, result.a64);
-  Expect.equals(a65, result.a65);
-  Expect.equals(a66, result.a66);
-  Expect.equals(a67, result.a67);
-  Expect.equals(a68, result.a68);
-  Expect.equals(a69, result.a69);
-  Expect.equals(a70, result.a70);
-  Expect.equals(a71, result.a71);
-  Expect.equals(a72, result.a72);
-  Expect.equals(a73, result.a73);
-  Expect.equals(a74, result.a74);
-  Expect.equals(a75, result.a75);
-  Expect.equals(a76, result.a76);
-  Expect.equals(a77, result.a77);
-  Expect.equals(a78, result.a78);
-  Expect.equals(a79, result.a79);
-  Expect.equals(a80, result.a80);
-  Expect.equals(a81, result.a81);
-  Expect.equals(a82, result.a82);
-  Expect.equals(a83, result.a83);
-  Expect.equals(a84, result.a84);
-  Expect.equals(a85, result.a85);
-  Expect.equals(a86, result.a86);
-  Expect.equals(a87, result.a87);
-  Expect.equals(a88, result.a88);
-  Expect.equals(a89, result.a89);
-  Expect.equals(a90, result.a90);
-  Expect.equals(a91, result.a91);
-  Expect.equals(a92, result.a92);
-  Expect.equals(a93, result.a93);
-  Expect.equals(a94, result.a94);
-  Expect.equals(a95, result.a95);
-  Expect.equals(a96, result.a96);
-  Expect.equals(a97, result.a97);
-  Expect.equals(a98, result.a98);
-  Expect.equals(a99, result.a99);
-  Expect.equals(a100, result.a100);
-  Expect.equals(a101, result.a101);
-  Expect.equals(a102, result.a102);
-  Expect.equals(a103, result.a103);
-  Expect.equals(a104, result.a104);
-  Expect.equals(a105, result.a105);
-  Expect.equals(a106, result.a106);
-  Expect.equals(a107, result.a107);
-  Expect.equals(a108, result.a108);
-  Expect.equals(a109, result.a109);
-  Expect.equals(a110, result.a110);
-  Expect.equals(a111, result.a111);
-  Expect.equals(a112, result.a112);
-  Expect.equals(a113, result.a113);
-  Expect.equals(a114, result.a114);
-  Expect.equals(a115, result.a115);
-  Expect.equals(a116, result.a116);
-  Expect.equals(a117, result.a117);
-  Expect.equals(a118, result.a118);
-  Expect.equals(a119, result.a119);
-  Expect.equals(a120, result.a120);
-  Expect.equals(a121, result.a121);
-  Expect.equals(a122, result.a122);
-  Expect.equals(a123, result.a123);
-  Expect.equals(a124, result.a124);
-  Expect.equals(a125, result.a125);
-  Expect.equals(a126, result.a126);
-  Expect.equals(a127, result.a127);
-}
-
-final returnStruct3BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct3BytesPackedInt Function(Int8, Int16),
-    Struct3BytesPackedInt Function(
-        int, int)>("ReturnStruct3BytesPackedInt", isLeaf: true);
-
-/// Small struct with mis-aligned member.
-void testReturnStruct3BytesPackedIntLeaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct3BytesPackedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct8BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesPackedInt Function(Uint8, Uint32, Uint8, Uint8, Uint8),
-    Struct8BytesPackedInt Function(
-        int, int, int, int, int)>("ReturnStruct8BytesPackedInt", isLeaf: true);
-
-/// Struct with mis-aligned member.
-void testReturnStruct8BytesPackedIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-
-  final result = returnStruct8BytesPackedIntLeaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-}
-
-final returnStruct9BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct9BytesPackedMixed Function(Uint8, Double),
-    Struct9BytesPackedMixed Function(
-        int, double)>("ReturnStruct9BytesPackedMixed", isLeaf: true);
-
-/// Struct with mis-aligned member.
-/// Tests backfilling of CPU and FPU registers.
-void testReturnStruct9BytesPackedMixedLeaf() {
-  int a0;
-  double a1;
-
-  a0 = 1;
-  a1 = 2.0;
-
-  final result = returnStruct9BytesPackedMixedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-}
-
-final returnUnion4BytesMixedLeaf = ffiTestFunctions.lookupFunction<
-    Union4BytesMixed Function(Uint32),
-    Union4BytesMixed Function(int)>("ReturnUnion4BytesMixed", isLeaf: true);
-
-/// Returning a mixed integer/float union.
-void testReturnUnion4BytesMixedLeaf() {
-  int a0;
-
-  a0 = 1;
-
-  final result = returnUnion4BytesMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-}
-
-final returnUnion8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
-    Union8BytesNestedFloat Function(Double),
-    Union8BytesNestedFloat Function(
-        double)>("ReturnUnion8BytesNestedFloat", isLeaf: true);
-
-/// Returning a floating point only union.
-void testReturnUnion8BytesNestedFloatLeaf() {
-  double a0;
-
-  a0 = -1.0;
-
-  final result = returnUnion8BytesNestedFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-}
-
-final returnUnion9BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-    Union9BytesNestedInt Function(Struct8BytesInt),
-    Union9BytesNestedInt Function(
-        Struct8BytesInt)>("ReturnUnion9BytesNestedInt", isLeaf: true);
-
-/// Returning a mixed-size union.
-void testReturnUnion9BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = returnUnion9BytesNestedIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-
-  calloc.free(a0Pointer);
-}
-
-final returnUnion16BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
-        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat),
-        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat)>(
-    "ReturnUnion16BytesNestedFloat",
-    isLeaf: true);
-
-/// Returning union with homogenous floats.
-void testReturnUnion16BytesNestedFloatLeaf() {
-  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-
-  final result = returnUnion16BytesNestedFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0.a0);
-  Expect.approxEquals(a0.a1, result.a0.a1);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct1ByteInt Function(Struct1ByteInt),
-    Struct1ByteInt Function(
-        Struct1ByteInt)>("ReturnStructArgumentStruct1ByteInt", isLeaf: true);
-
-/// Test that a struct passed in as argument can be returned.
-/// Especially for ffi callbacks.
-/// Struct is passed in int registers in most ABIs.
-void testReturnStructArgumentStruct1ByteIntLeaf() {
-  final a0Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-
-  final result = returnStructArgumentStruct1ByteIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentInt32x8Struct1ByteIntLeaf =
-    ffiTestFunctions
-        .lookupFunction<
-                Struct1ByteInt Function(Int32, Int32, Int32, Int32, Int32, Int32,
-                    Int32, Int32, Struct1ByteInt),
-                Struct1ByteInt Function(
-                    int, int, int, int, int, int, int, int, Struct1ByteInt)>(
-            "ReturnStructArgumentInt32x8Struct1ByteInt",
-            isLeaf: true);
-
-/// Test that a struct passed in as argument can be returned.
-/// Especially for ffi callbacks.
-/// Struct is passed on stack on all ABIs.
-void testReturnStructArgumentInt32x8Struct1ByteIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  final a8Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a8 = a8Pointer.ref;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-  a5 = 6;
-  a6 = -7;
-  a7 = 8;
-  a8.a0 = -9;
-
-  final result = returnStructArgumentInt32x8Struct1ByteIntLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.equals(a8.a0, result.a0);
-
-  calloc.free(a8Pointer);
-}
-
-final returnStructArgumentStruct8BytesHomogeneousFloatLeaf =
-    ffiTestFunctions.lookupFunction<
-            Struct8BytesHomogeneousFloat Function(Struct8BytesHomogeneousFloat),
-            Struct8BytesHomogeneousFloat Function(
-                Struct8BytesHomogeneousFloat)>(
-        "ReturnStructArgumentStruct8BytesHomogeneousFloat",
-        isLeaf: true);
-
-/// Test that a struct passed in as argument can be returned.
-/// Especially for ffi callbacks.
-/// Struct is passed in float registers in most ABIs.
-void testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf() {
-  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-
-  final result = returnStructArgumentStruct8BytesHomogeneousFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0);
-  Expect.approxEquals(a0.a1, result.a1);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStruct20BytesHomogeneousInt32Leaf =
-    ffiTestFunctions
-        .lookupFunction<
-                Struct20BytesHomogeneousInt32 Function(
-                    Struct20BytesHomogeneousInt32),
-                Struct20BytesHomogeneousInt32 Function(
-                    Struct20BytesHomogeneousInt32)>(
-            "ReturnStructArgumentStruct20BytesHomogeneousInt32",
-            isLeaf: true);
-
-/// On arm64, both argument and return value are passed in by pointer.
-void testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf() {
-  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a0.a3 = 4;
-  a0.a4 = -5;
-
-  final result = returnStructArgumentStruct20BytesHomogeneousInt32Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0);
-  Expect.equals(a0.a1, result.a1);
-  Expect.equals(a0.a2, result.a2);
-  Expect.equals(a0.a3, result.a3);
-  Expect.equals(a0.a4, result.a4);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf =
-    ffiTestFunctions.lookupFunction<
-            Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32,
-                Int32, Int32, Int32, Int32, Struct20BytesHomogeneousInt32),
-            Struct20BytesHomogeneousInt32 Function(int, int, int, int, int, int,
-                int, int, Struct20BytesHomogeneousInt32)>(
-        "ReturnStructArgumentInt32x8Struct20BytesHomogeneou",
-        isLeaf: true);
-
-/// On arm64, both argument and return value are passed in by pointer.
-/// Ints exhaust registers, so that pointer is passed on stack.
-void testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-  a5 = 6;
-  a6 = -7;
-  a7 = 8;
-  a8.a0 = -9;
-  a8.a1 = 10;
-  a8.a2 = -11;
-  a8.a3 = 12;
-  a8.a4 = -13;
-
-  final result = returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.equals(a8.a0, result.a0);
-  Expect.equals(a8.a1, result.a1);
-  Expect.equals(a8.a2, result.a2);
-  Expect.equals(a8.a3, result.a3);
-  Expect.equals(a8.a4, result.a4);
-
-  calloc.free(a8Pointer);
-}
-
-final returnStructArgumentStruct8BytesInlineArrayIntLeaf =
-    ffiTestFunctions.lookupFunction<
-            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt),
-            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt)>(
-        "ReturnStructArgumentStruct8BytesInlineArrayInt",
-        isLeaf: true);
-
-/// Test returning struct with inline array.
-void testReturnStructArgumentStruct8BytesInlineArrayIntLeaf() {
-  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
-
-  a0.a0[0] = 1;
-  a0.a0[1] = 2;
-  a0.a0[2] = 3;
-  a0.a0[3] = 4;
-  a0.a0[4] = 5;
-  a0.a0[5] = 6;
-  a0.a0[6] = 7;
-  a0.a0[7] = 8;
-
-  final result = returnStructArgumentStruct8BytesInlineArrayIntLeaf(a0);
-
-  print("result = $result");
-
-  for (int i = 0; i < 8; i++) {
-    Expect.equals(a0.a0[i], result.a0[i]);
-  }
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStructStruct16BytesHomogeneousLeaf =
-    ffiTestFunctions.lookupFunction<
-            StructStruct16BytesHomogeneousFloat2 Function(
-                StructStruct16BytesHomogeneousFloat2),
-            StructStruct16BytesHomogeneousFloat2 Function(
-                StructStruct16BytesHomogeneousFloat2)>(
-        "ReturnStructArgumentStructStruct16BytesHomogeneous",
-        isLeaf: true);
-
-/// Return value in FPU registers on arm hardfp and arm64.
-void testReturnStructArgumentStructStruct16BytesHomogeneousLeaf() {
-  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-
-  final result = returnStructArgumentStructStruct16BytesHomogeneousLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0.a0, result.a0.a0);
-  for (int i = 0; i < 2; i++) {
-    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
-  }
-  Expect.approxEquals(a0.a2, result.a2);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStructStruct32BytesHomogeneousLeaf =
-    ffiTestFunctions.lookupFunction<
-            StructStruct32BytesHomogeneousDouble2 Function(
-                StructStruct32BytesHomogeneousDouble2),
-            StructStruct32BytesHomogeneousDouble2 Function(
-                StructStruct32BytesHomogeneousDouble2)>(
-        "ReturnStructArgumentStructStruct32BytesHomogeneous",
-        isLeaf: true);
-
-/// Return value in FPU registers on arm64.
-void testReturnStructArgumentStructStruct32BytesHomogeneousLeaf() {
-  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-
-  final result = returnStructArgumentStructStruct32BytesHomogeneousLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0.a0, result.a0.a0);
-  for (int i = 0; i < 2; i++) {
-    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
-  }
-  Expect.approxEquals(a0.a2, result.a2);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStructStruct16BytesMixed3Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3),
-            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3)>(
-        "ReturnStructArgumentStructStruct16BytesMixed3",
-        isLeaf: true);
-
-/// On x64 Linux, return value is split over FP and int registers.
-void testReturnStructArgumentStructStruct16BytesMixed3Leaf() {
-  final a0Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[0].a1 = -3;
-  a0.a1[0].a2 = 4;
-  a0.a2[0] = -5;
-  a0.a2[1] = 6;
-
-  final result = returnStructArgumentStructStruct16BytesMixed3Leaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0.a0, result.a0.a0);
-  for (int i = 0; i < 1; i++) {
-    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
-    Expect.equals(a0.a1[i].a1, result.a1[i].a1);
-    Expect.equals(a0.a1[i].a2, result.a1[i].a2);
-  }
-  for (int i = 0; i < 2; i++) {
-    Expect.equals(a0.a2[i], result.a2[i]);
-  }
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
-    StructAlignmentInt16 Function(Int8, Int16, Int8),
-    StructAlignmentInt16 Function(
-        int, int, int)>("ReturnStructAlignmentInt16", isLeaf: true);
-
-/// Test alignment and padding of 16 byte int within struct.
-void testReturnStructAlignmentInt16Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStructAlignmentInt16Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
-    StructAlignmentInt32 Function(Int8, Int32, Int8),
-    StructAlignmentInt32 Function(
-        int, int, int)>("ReturnStructAlignmentInt32", isLeaf: true);
-
-/// Test alignment and padding of 32 byte int within struct.
-void testReturnStructAlignmentInt32Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStructAlignmentInt32Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
-    StructAlignmentInt64 Function(Int8, Int64, Int8),
-    StructAlignmentInt64 Function(
-        int, int, int)>("ReturnStructAlignmentInt64", isLeaf: true);
-
-/// Test alignment and padding of 64 byte int within struct.
-void testReturnStructAlignmentInt64Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStructAlignmentInt64Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct8BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-        Struct8BytesNestedInt Function(
-            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16),
-        Struct8BytesNestedInt Function(
-            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16)>(
-    "ReturnStruct8BytesNestedInt",
-    isLeaf: true);
-
-/// Simple nested struct.
-void testReturnStruct8BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-
-  final result = returnStruct8BytesNestedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesNestedFloat Function(Struct4BytesFloat, Struct4BytesFloat),
-    Struct8BytesNestedFloat Function(Struct4BytesFloat,
-        Struct4BytesFloat)>("ReturnStruct8BytesNestedFloat", isLeaf: true);
-
-/// Simple nested struct with floats.
-void testReturnStruct8BytesNestedFloatLeaf() {
-  final a0Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a1 = a1Pointer.ref;
-
-  a0.a0 = -1.0;
-  a1.a0 = 2.0;
-
-  final result = returnStruct8BytesNestedFloatLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0.a0);
-  Expect.approxEquals(a1.a0, result.a1.a0);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct8BytesNestedFloat2Leaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesNestedFloat2 Function(Struct4BytesFloat, Float),
-    Struct8BytesNestedFloat2 Function(Struct4BytesFloat,
-        double)>("ReturnStruct8BytesNestedFloat2", isLeaf: true);
-
-/// The nesting is irregular, testing homogenous float rules on arm and arm64,
-/// and the fpu register usage on x64.
-void testReturnStruct8BytesNestedFloat2Leaf() {
-  final a0Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a0 = a0Pointer.ref;
-  double a1;
-
-  a0.a0 = -1.0;
-  a1 = 2.0;
-
-  final result = returnStruct8BytesNestedFloat2Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0.a0);
-  Expect.approxEquals(a1, result.a1);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStruct8BytesNestedMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesNestedMixed Function(
-        Struct4BytesHomogeneousInt16, Struct4BytesFloat),
-    Struct8BytesNestedMixed Function(Struct4BytesHomogeneousInt16,
-        Struct4BytesFloat)>("ReturnStruct8BytesNestedMixed", isLeaf: true);
-
-/// Simple nested struct with mixed members.
-void testReturnStruct8BytesNestedMixedLeaf() {
-  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3.0;
-
-  final result = returnStruct8BytesNestedMixedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.approxEquals(a1.a0, result.a1.a0);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct16BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesNestedInt Function(
-        Struct8BytesNestedInt, Struct8BytesNestedInt),
-    Struct16BytesNestedInt Function(Struct8BytesNestedInt,
-        Struct8BytesNestedInt)>("ReturnStruct16BytesNestedInt", isLeaf: true);
-
-/// Deeper nested struct to test recursive member access.
-void testReturnStruct16BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a1.a0 = -3;
-  a0.a1.a1 = 4;
-  a1.a0.a0 = -5;
-  a1.a0.a1 = 6;
-  a1.a1.a0 = -7;
-  a1.a1.a1 = 8;
-
-  final result = returnStruct16BytesNestedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0.a0, result.a0.a0.a0);
-  Expect.equals(a0.a0.a1, result.a0.a0.a1);
-  Expect.equals(a0.a1.a0, result.a0.a1.a0);
-  Expect.equals(a0.a1.a1, result.a0.a1.a1);
-  Expect.equals(a1.a0.a0, result.a1.a0.a0);
-  Expect.equals(a1.a0.a1, result.a1.a0.a1);
-  Expect.equals(a1.a1.a0, result.a1.a1.a0);
-  Expect.equals(a1.a1.a1, result.a1.a1.a1);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct32BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct32BytesNestedInt Function(
-        Struct16BytesNestedInt, Struct16BytesNestedInt),
-    Struct32BytesNestedInt Function(Struct16BytesNestedInt,
-        Struct16BytesNestedInt)>("ReturnStruct32BytesNestedInt", isLeaf: true);
-
-/// Even deeper nested struct to test recursive member access.
-void testReturnStruct32BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0.a0 = -1;
-  a0.a0.a0.a1 = 2;
-  a0.a0.a1.a0 = -3;
-  a0.a0.a1.a1 = 4;
-  a0.a1.a0.a0 = -5;
-  a0.a1.a0.a1 = 6;
-  a0.a1.a1.a0 = -7;
-  a0.a1.a1.a1 = 8;
-  a1.a0.a0.a0 = -9;
-  a1.a0.a0.a1 = 10;
-  a1.a0.a1.a0 = -11;
-  a1.a0.a1.a1 = 12;
-  a1.a1.a0.a0 = -13;
-  a1.a1.a0.a1 = 14;
-  a1.a1.a1.a0 = -15;
-  a1.a1.a1.a1 = 16;
-
-  final result = returnStruct32BytesNestedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0.a0.a0, result.a0.a0.a0.a0);
-  Expect.equals(a0.a0.a0.a1, result.a0.a0.a0.a1);
-  Expect.equals(a0.a0.a1.a0, result.a0.a0.a1.a0);
-  Expect.equals(a0.a0.a1.a1, result.a0.a0.a1.a1);
-  Expect.equals(a0.a1.a0.a0, result.a0.a1.a0.a0);
-  Expect.equals(a0.a1.a0.a1, result.a0.a1.a0.a1);
-  Expect.equals(a0.a1.a1.a0, result.a0.a1.a1.a0);
-  Expect.equals(a0.a1.a1.a1, result.a0.a1.a1.a1);
-  Expect.equals(a1.a0.a0.a0, result.a1.a0.a0.a0);
-  Expect.equals(a1.a0.a0.a1, result.a1.a0.a0.a1);
-  Expect.equals(a1.a0.a1.a0, result.a1.a0.a1.a0);
-  Expect.equals(a1.a0.a1.a1, result.a1.a0.a1.a1);
-  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
-  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
-  Expect.equals(a1.a1.a1.a0, result.a1.a1.a1.a0);
-  Expect.equals(a1.a1.a1.a1, result.a1.a1.a1.a1);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIntStructAlignmentInt16Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructNestedIntStructAlignmentInt16 Function(
-                StructAlignmentInt16, StructAlignmentInt16),
-            StructNestedIntStructAlignmentInt16 Function(
-                StructAlignmentInt16, StructAlignmentInt16)>(
-        "ReturnStructNestedIntStructAlignmentInt16",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 16 byte int.
-void testReturnStructNestedIntStructAlignmentInt16Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-
-  final result = returnStructNestedIntStructAlignmentInt16Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-  Expect.equals(a1.a2, result.a1.a2);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIntStructAlignmentInt32Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructNestedIntStructAlignmentInt32 Function(
-                StructAlignmentInt32, StructAlignmentInt32),
-            StructNestedIntStructAlignmentInt32 Function(
-                StructAlignmentInt32, StructAlignmentInt32)>(
-        "ReturnStructNestedIntStructAlignmentInt32",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 32 byte int.
-void testReturnStructNestedIntStructAlignmentInt32Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-
-  final result = returnStructNestedIntStructAlignmentInt32Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-  Expect.equals(a1.a2, result.a1.a2);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIntStructAlignmentInt64Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructNestedIntStructAlignmentInt64 Function(
-                StructAlignmentInt64, StructAlignmentInt64),
-            StructNestedIntStructAlignmentInt64 Function(
-                StructAlignmentInt64, StructAlignmentInt64)>(
-        "ReturnStructNestedIntStructAlignmentInt64",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 64 byte int.
-void testReturnStructNestedIntStructAlignmentInt64Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-
-  final result = returnStructNestedIntStructAlignmentInt64Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-  Expect.equals(a1.a2, result.a1.a2);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIrregularEvenBiggerLeaf =
-    ffiTestFunctions.lookupFunction<
-        StructNestedIrregularEvenBigger Function(Uint64,
-            StructNestedIrregularBigger, StructNestedIrregularBigger, Double),
-        StructNestedIrregularEvenBigger Function(
-            int,
-            StructNestedIrregularBigger,
-            StructNestedIrregularBigger,
-            double)>("ReturnStructNestedIrregularEvenBigger", isLeaf: true);
-
-/// Return big irregular struct as smoke test.
-void testReturnStructNestedIrregularEvenBiggerLeaf() {
-  int a0;
-  final a1Pointer = calloc<StructNestedIrregularBigger>();
-  final StructNestedIrregularBigger a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructNestedIrregularBigger>();
-  final StructNestedIrregularBigger a2 = a2Pointer.ref;
-  double a3;
-
-  a0 = 1;
-  a1.a0.a0 = 2;
-  a1.a0.a1.a0.a0 = -3;
-  a1.a0.a1.a0.a1 = 4;
-  a1.a0.a1.a1.a0 = -5.0;
-  a1.a0.a2 = 6;
-  a1.a0.a3.a0.a0 = -7.0;
-  a1.a0.a3.a1 = 8.0;
-  a1.a0.a4 = 9;
-  a1.a0.a5.a0.a0 = 10.0;
-  a1.a0.a5.a1.a0 = -11.0;
-  a1.a0.a6 = 12;
-  a1.a1.a0.a0 = -13;
-  a1.a1.a0.a1 = 14;
-  a1.a1.a1.a0 = -15.0;
-  a1.a2 = 16.0;
-  a1.a3 = -17.0;
-  a2.a0.a0 = 18;
-  a2.a0.a1.a0.a0 = -19;
-  a2.a0.a1.a0.a1 = 20;
-  a2.a0.a1.a1.a0 = -21.0;
-  a2.a0.a2 = 22;
-  a2.a0.a3.a0.a0 = -23.0;
-  a2.a0.a3.a1 = 24.0;
-  a2.a0.a4 = 25;
-  a2.a0.a5.a0.a0 = 26.0;
-  a2.a0.a5.a1.a0 = -27.0;
-  a2.a0.a6 = 28;
-  a2.a1.a0.a0 = -29;
-  a2.a1.a0.a1 = 30;
-  a2.a1.a1.a0 = -31.0;
-  a2.a2 = 32.0;
-  a2.a3 = -33.0;
-  a3 = 34.0;
-
-  final result = returnStructNestedIrregularEvenBiggerLeaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1.a0.a0, result.a1.a0.a0);
-  Expect.equals(a1.a0.a1.a0.a0, result.a1.a0.a1.a0.a0);
-  Expect.equals(a1.a0.a1.a0.a1, result.a1.a0.a1.a0.a1);
-  Expect.approxEquals(a1.a0.a1.a1.a0, result.a1.a0.a1.a1.a0);
-  Expect.equals(a1.a0.a2, result.a1.a0.a2);
-  Expect.approxEquals(a1.a0.a3.a0.a0, result.a1.a0.a3.a0.a0);
-  Expect.approxEquals(a1.a0.a3.a1, result.a1.a0.a3.a1);
-  Expect.equals(a1.a0.a4, result.a1.a0.a4);
-  Expect.approxEquals(a1.a0.a5.a0.a0, result.a1.a0.a5.a0.a0);
-  Expect.approxEquals(a1.a0.a5.a1.a0, result.a1.a0.a5.a1.a0);
-  Expect.equals(a1.a0.a6, result.a1.a0.a6);
-  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
-  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
-  Expect.approxEquals(a1.a1.a1.a0, result.a1.a1.a1.a0);
-  Expect.approxEquals(a1.a2, result.a1.a2);
-  Expect.approxEquals(a1.a3, result.a1.a3);
-  Expect.equals(a2.a0.a0, result.a2.a0.a0);
-  Expect.equals(a2.a0.a1.a0.a0, result.a2.a0.a1.a0.a0);
-  Expect.equals(a2.a0.a1.a0.a1, result.a2.a0.a1.a0.a1);
-  Expect.approxEquals(a2.a0.a1.a1.a0, result.a2.a0.a1.a1.a0);
-  Expect.equals(a2.a0.a2, result.a2.a0.a2);
-  Expect.approxEquals(a2.a0.a3.a0.a0, result.a2.a0.a3.a0.a0);
-  Expect.approxEquals(a2.a0.a3.a1, result.a2.a0.a3.a1);
-  Expect.equals(a2.a0.a4, result.a2.a0.a4);
-  Expect.approxEquals(a2.a0.a5.a0.a0, result.a2.a0.a5.a0.a0);
-  Expect.approxEquals(a2.a0.a5.a1.a0, result.a2.a0.a5.a1.a0);
-  Expect.equals(a2.a0.a6, result.a2.a0.a6);
-  Expect.equals(a2.a1.a0.a0, result.a2.a1.a0.a0);
-  Expect.equals(a2.a1.a0.a1, result.a2.a1.a0.a1);
-  Expect.approxEquals(a2.a1.a1.a0, result.a2.a1.a1.a0);
-  Expect.approxEquals(a2.a2, result.a2.a2);
-  Expect.approxEquals(a2.a3, result.a2.a3);
-  Expect.approxEquals(a3, result.a3);
-
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-}
diff --git a/tests/ffi/generator/structs_by_value_tests_generator.dart b/tests/ffi/generator/structs_by_value_tests_generator.dart
index f030b93..03f16ff 100644
--- a/tests/ffi/generator/structs_by_value_tests_generator.dart
+++ b/tests/ffi/generator/structs_by_value_tests_generator.dart
@@ -478,14 +478,14 @@
 }
 
 extension on CompositeType {
-  String dartClass(bool nnbd) {
+  String dartClass({required bool isNnbd}) {
     final self = this;
     final packingAnnotation = (self is StructType) && self.hasPacking
         ? "@Packed(${self.packing})"
         : "";
     String dartFields = "";
     for (final member in members) {
-      dartFields += "${member.dartStructField(nnbd)}\n\n";
+      dartFields += "${member.dartStructField(isNnbd)}\n\n";
     }
     String toStringBody = members.map((m) {
       if (m.type is FixedLengthArrayType) {
@@ -585,7 +585,7 @@
     """;
   }
 
-  String dartCallbackCode(bool nnbd) {
+  String dartCallbackCode({required bool isNnbd}) {
     final argumentss =
         arguments.map((a) => "${a.type.dartType} ${a.name}").join(", ");
 
@@ -652,7 +652,7 @@
     }
 
     String returnNull = "";
-    if (!nnbd) {
+    if (!isNnbd) {
       returnNull = """
       if (${arguments.firstArgumentName()} == $returnNullValue) {
         print("returning null!");
@@ -861,15 +861,55 @@
 // @dart = 2.9
 ''';
 
-headerDartCallTest(bool nnbd) {
-  final dartVersion = nnbd ? '' : dart2dot9;
-
+headerCommon({required int copyrightYear}) {
+  final year = copyrightYear;
   return """
-// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// Copyright (c) $year, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 //
 // This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.""";
+}
+
+headerDartCompound({required bool isNnbd, required int copyrightYear}) {
+  final dartVersion = isNnbd ? '' : dart2dot9;
+
+  return """
+${headerCommon(copyrightYear: copyrightYear)}
+
+$dartVersion
+
+import 'dart:ffi';
+""";
+}
+
+String compoundsPath({required bool isNnbd}) {
+  final folder = isNnbd ? 'ffi' : 'ffi_2';
+  return Platform.script
+      .resolve(
+          "../../$folder/function_structs_by_value_generated_compounds.dart")
+      .path;
+}
+
+Future<void> writeDartCompounds() async {
+  await Future.wait([true, false].map((isNnbd) async {
+    final StringBuffer buffer = StringBuffer();
+    buffer.write(headerDartCompound(isNnbd: isNnbd, copyrightYear: 2021));
+
+    buffer.writeAll(compounds.map((e) => e.dartClass(isNnbd: isNnbd)));
+
+    final path = compoundsPath(isNnbd: isNnbd);
+    await File(path).writeAsString(buffer.toString());
+    await runProcess("dart", ["format", path]);
+  }));
+}
+
+headerDartCallTest({required bool isNnbd, required int copyrightYear}) {
+  final dartVersion = isNnbd ? '' : dart2dot9;
+
+  return """
+${headerCommon(copyrightYear: copyrightYear)}
 //
 // SharedObjects=ffi_test_functions
 // VMOptions=
@@ -886,49 +926,49 @@
 
 import 'dylib_utils.dart';
 
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
 final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 """;
 }
 
-void writeDartCallTest() {
-  for (bool nnbd in [true, false]) {
+Future<void> writeDartCallTest({required bool isLeaf}) async {
+  await Future.wait([true, false].map((isNnbd) async {
     final StringBuffer buffer = StringBuffer();
-    buffer.write(headerDartCallTest(nnbd));
+    buffer.write(headerDartCallTest(
+        isNnbd: isNnbd, copyrightYear: isLeaf ? 2021 : 2020));
 
+    final suffix = isLeaf ? 'Leaf' : '';
     buffer.write("""
     void main() {
       for (int i = 0; i < 10; ++i) {
-        ${functions.map((e) => "${e.dartTestName}();").join("\n")}
-        ${functions.map((e) => "${e.dartTestName}Leaf();").join("\n")}
+        ${functions.map((e) => "${e.dartTestName}$suffix();").join("\n")}
       }
     }
     """);
-    buffer.writeAll(compounds.map((e) => e.dartClass(nnbd)));
-    buffer.writeAll(functions.map((e) => e.dartCallCode(isLeaf: false)));
-    buffer.writeAll(functions.map((e) => e.dartCallCode(isLeaf: true)));
+    buffer.writeAll(functions.map((e) => e.dartCallCode(isLeaf: isLeaf)));
 
-    final path = callTestPath(nnbd);
-    File(path).writeAsStringSync(buffer.toString());
-    Process.runSync("dart", ["format", path]);
-  }
+    final path = callTestPath(isNnbd: isNnbd, isLeaf: isLeaf);
+    await File(path).writeAsString(buffer.toString());
+    await runProcess("dart", ["format", path]);
+  }));
 }
 
-String callTestPath(bool nnbd) {
-  final folder = nnbd ? "ffi" : "ffi_2";
+String callTestPath({required bool isNnbd, required bool isLeaf}) {
+  final folder = isNnbd ? 'ffi' : 'ffi_2';
+  final suffix = isLeaf ? '_leaf' : '';
   return Platform.script
-      .resolve("../../$folder/function_structs_by_value_generated_test.dart")
+      .resolve(
+          "../../$folder/function_structs_by_value_generated${suffix}_test.dart")
       .path;
 }
 
-headerDartCallbackTest(bool nnbd) {
-  final dartVersion = nnbd ? '' : dart2dot9;
+headerDartCallbackTest({required bool isNnbd, required int copyrightYear}) {
+  final dartVersion = isNnbd ? '' : dart2dot9;
 
   return """
-// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-//
-// This file has been automatically generated. Please do not edit it manually.
+${headerCommon(copyrightYear: copyrightYear)}
 //
 // SharedObjects=ffi_test_functions
 // VMOptions=
@@ -945,9 +985,12 @@
 
 import 'callback_tests_utils.dart';
 
-// Reuse the struct classes.
-import 'function_structs_by_value_generated_test.dart';
+import 'dylib_utils.dart';
 
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 
 void main() {
   testCases.forEach((t) {
@@ -960,10 +1003,10 @@
 """;
 }
 
-void writeDartCallbackTest() {
-  for (bool nnbd in [true, false]) {
+Future<void> writeDartCallbackTest() async {
+  await Future.wait([true, false].map((isNnbd) async {
     final StringBuffer buffer = StringBuffer();
-    buffer.write(headerDartCallbackTest(nnbd));
+    buffer.write(headerDartCallbackTest(isNnbd: isNnbd, copyrightYear: 2020));
 
     buffer.write("""
   final testCases = [
@@ -971,28 +1014,25 @@
   ];
   """);
 
-    buffer.writeAll(functions.map((e) => e.dartCallbackCode(nnbd)));
+    buffer.writeAll(functions.map((e) => e.dartCallbackCode(isNnbd: isNnbd)));
 
-    final path = callbackTestPath(nnbd);
-    File(path).writeAsStringSync(buffer.toString());
-    Process.runSync("dart", ["format", path]);
-  }
+    final path = callbackTestPath(isNnbd: isNnbd);
+    await File(path).writeAsString(buffer.toString());
+    await runProcess("dart", ["format", path]);
+  }));
 }
 
-String callbackTestPath(bool nnbd) {
-  final folder = nnbd ? "ffi" : "ffi_2";
+String callbackTestPath({required bool isNnbd}) {
+  final folder = isNnbd ? "ffi" : "ffi_2";
   return Platform.script
       .resolve(
           "../../$folder/function_callbacks_structs_by_value_generated_test.dart")
       .path;
 }
 
-const headerC = """
-// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-//
-// This file has been automatically generated. Please do not edit it manually.
+headerC({required int copyrightYear}) {
+  return """
+${headerCommon(copyrightYear: copyrightYear)}
 
 #include <stddef.h>
 #include <stdlib.h>
@@ -1025,15 +1065,16 @@
         ((EXPECTED * 0.99) >= (ACTUAL) && (EXPECTED * 1.01) <= (ACTUAL)))
 
 """;
+}
 
 const footerC = """
 
 }  // namespace dart
 """;
 
-void writeC() {
+Future<void> writeC() async {
   final StringBuffer buffer = StringBuffer();
-  buffer.write(headerC);
+  buffer.write(headerC(copyrightYear: 2020));
 
   buffer.writeAll(compounds.map((e) => e.cDefinition));
   buffer.writeAll(functions.map((e) => e.cCallCode));
@@ -1041,8 +1082,8 @@
 
   buffer.write(footerC);
 
-  File(ccPath).writeAsStringSync(buffer.toString());
-  Process.runSync("clang-format", ["-i", ccPath]);
+  await File(ccPath).writeAsString(buffer.toString());
+  await runProcess("clang-format", ["-i", ccPath]);
 }
 
 final ccPath = Platform.script
@@ -1055,20 +1096,50 @@
 
 Generates:
 - $ccPath
-- ${callbackTestPath(true)}
-- ${callTestPath(true)}
-- ${callbackTestPath(false)}
-- ${callTestPath(false)}
+- ${compoundsPath(isNnbd: true)}
+- ${callbackTestPath(isNnbd: true)}
+- ${callTestPath(isNnbd: true, isLeaf: false)}
+- ${callTestPath(isNnbd: true, isLeaf: true)}
+- ${compoundsPath(isNnbd: false)}
+- ${callbackTestPath(isNnbd: false)}
+- ${callTestPath(isNnbd: false, isLeaf: false)}
+- ${callTestPath(isNnbd: false, isLeaf: true)}
 """);
 }
 
-void main(List<String> arguments) {
+void main(List<String> arguments) async {
   if (arguments.length != 0) {
     printUsage();
     return;
   }
 
-  writeDartCallTest();
-  writeDartCallbackTest();
-  writeC();
+  await Future.wait([
+    writeDartCompounds(),
+    writeDartCallTest(isLeaf: false),
+    writeDartCallTest(isLeaf: true),
+    writeDartCallbackTest(),
+    writeC(),
+  ]);
+}
+
+Future<void> runProcess(String executable, List<String> arguments) async {
+  final commandString = [executable, ...arguments].join(' ');
+  stdout.writeln('Running `$commandString`.');
+  final process = await Process.start(
+    executable,
+    arguments,
+    runInShell: true,
+    includeParentEnvironment: true,
+  ).then((process) {
+    process.stdout.forEach((data) => stdout.add(data));
+    process.stderr.forEach((data) => stderr.add(data));
+    return process;
+  });
+  final exitCode = await process.exitCode;
+  if (exitCode != 0) {
+    final message = 'Command `$commandString` failed with exit code $exitCode.';
+    stderr.writeln(message);
+    throw Exception(message);
+  }
+  stdout.writeln('Command `$commandString` done.');
 }
diff --git a/tests/ffi/inline_array_multi_dimensional_test.dart b/tests/ffi/inline_array_multi_dimensional_test.dart
index 15d2059..5c90664 100644
--- a/tests/ffi/inline_array_multi_dimensional_test.dart
+++ b/tests/ffi/inline_array_multi_dimensional_test.dart
@@ -9,8 +9,8 @@
 import "package:expect/expect.dart";
 import 'package:ffi/ffi.dart';
 
-// Reuse struct definitions.
-import 'function_structs_by_value_generated_test.dart';
+// Reuse compound definitions.
+import 'function_structs_by_value_generated_compounds.dart';
 
 void main() {
   testSizeOf();
diff --git a/tests/ffi/inline_array_test.dart b/tests/ffi/inline_array_test.dart
index 868d117..dc5914c 100644
--- a/tests/ffi/inline_array_test.dart
+++ b/tests/ffi/inline_array_test.dart
@@ -9,8 +9,8 @@
 import "package:expect/expect.dart";
 import 'package:ffi/ffi.dart';
 
-// Reuse struct definitions.
-import 'function_structs_by_value_generated_test.dart';
+// Reuse compound definitions.
+import 'function_structs_by_value_generated_compounds.dart';
 
 void main() {
   testSizeOf();
diff --git a/tests/ffi/structs_packed_test.dart b/tests/ffi/structs_packed_test.dart
index cec7703..453e795 100644
--- a/tests/ffi/structs_packed_test.dart
+++ b/tests/ffi/structs_packed_test.dart
@@ -10,8 +10,8 @@
 
 import 'dylib_utils.dart';
 
-// Reuse struct definitions.
-import 'function_structs_by_value_generated_test.dart';
+// Reuse compound definitions.
+import 'function_structs_by_value_generated_compounds.dart';
 
 void main() {
   testSizeOfC();
diff --git a/tests/ffi_2/function_callbacks_structs_by_value_generated_test.dart b/tests/ffi_2/function_callbacks_structs_by_value_generated_test.dart
index dd0e719..ba0f7ff 100644
--- a/tests/ffi_2/function_callbacks_structs_by_value_generated_test.dart
+++ b/tests/ffi_2/function_callbacks_structs_by_value_generated_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 //
 // This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
 //
 // SharedObjects=ffi_test_functions
 // VMOptions=
@@ -19,8 +20,12 @@
 
 import 'callback_tests_utils.dart';
 
-// Reuse the struct classes.
-import 'function_structs_by_value_generated_test.dart';
+import 'dylib_utils.dart';
+
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 
 void main() {
   testCases.forEach((t) {
diff --git a/tests/ffi_2/function_callbacks_structs_by_value_test.dart b/tests/ffi_2/function_callbacks_structs_by_value_test.dart
index 4ecdbaf..e3cee62 100644
--- a/tests/ffi_2/function_callbacks_structs_by_value_test.dart
+++ b/tests/ffi_2/function_callbacks_structs_by_value_test.dart
@@ -13,8 +13,12 @@
 import "package:expect/expect.dart";
 import "package:ffi/ffi.dart";
 
+import 'dylib_utils.dart';
+
 // Reuse the struct classes.
-import 'function_structs_by_value_generated_test.dart';
+import 'function_structs_by_value_generated_compounds.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 
 void main() {
   for (int i = 0; i < 10; i++) {
diff --git a/tests/ffi_2/function_structs_by_value_generated_compounds.dart b/tests/ffi_2/function_structs_by_value_generated_compounds.dart
new file mode 100644
index 0000000..ede77a3
--- /dev/null
+++ b/tests/ffi_2/function_structs_by_value_generated_compounds.dart
@@ -0,0 +1,1212 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
+
+// @dart = 2.9
+
+import 'dart:ffi';
+
+class Struct1ByteInt extends Struct {
+  @Int8()
+  int a0;
+
+  String toString() => "(${a0})";
+}
+
+class Struct3BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  int a0;
+
+  @Uint8()
+  int a1;
+
+  @Uint8()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct3BytesInt2ByteAligned extends Struct {
+  @Int16()
+  int a0;
+
+  @Int8()
+  int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct4BytesHomogeneousInt16 extends Struct {
+  @Int16()
+  int a0;
+
+  @Int16()
+  int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct4BytesFloat extends Struct {
+  @Float()
+  double a0;
+
+  String toString() => "(${a0})";
+}
+
+class Struct7BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  int a0;
+
+  @Uint8()
+  int a1;
+
+  @Uint8()
+  int a2;
+
+  @Uint8()
+  int a3;
+
+  @Uint8()
+  int a4;
+
+  @Uint8()
+  int a5;
+
+  @Uint8()
+  int a6;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
+}
+
+class Struct7BytesInt4ByteAligned extends Struct {
+  @Int32()
+  int a0;
+
+  @Int16()
+  int a1;
+
+  @Int8()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct8BytesInt extends Struct {
+  @Int16()
+  int a0;
+
+  @Int16()
+  int a1;
+
+  @Int32()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct8BytesHomogeneousFloat extends Struct {
+  @Float()
+  double a0;
+
+  @Float()
+  double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesFloat extends Struct {
+  @Double()
+  double a0;
+
+  String toString() => "(${a0})";
+}
+
+class Struct8BytesMixed extends Struct {
+  @Float()
+  double a0;
+
+  @Int16()
+  int a1;
+
+  @Int16()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct9BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  int a0;
+
+  @Uint8()
+  int a1;
+
+  @Uint8()
+  int a2;
+
+  @Uint8()
+  int a3;
+
+  @Uint8()
+  int a4;
+
+  @Uint8()
+  int a5;
+
+  @Uint8()
+  int a6;
+
+  @Uint8()
+  int a7;
+
+  @Uint8()
+  int a8;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})";
+}
+
+class Struct9BytesInt4Or8ByteAligned extends Struct {
+  @Int64()
+  int a0;
+
+  @Int8()
+  int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct12BytesHomogeneousFloat extends Struct {
+  @Float()
+  double a0;
+
+  @Float()
+  double a1;
+
+  @Float()
+  double a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct16BytesHomogeneousFloat extends Struct {
+  @Float()
+  double a0;
+
+  @Float()
+  double a1;
+
+  @Float()
+  double a2;
+
+  @Float()
+  double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct16BytesMixed extends Struct {
+  @Double()
+  double a0;
+
+  @Int64()
+  int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct16BytesMixed2 extends Struct {
+  @Float()
+  double a0;
+
+  @Float()
+  double a1;
+
+  @Float()
+  double a2;
+
+  @Int32()
+  int a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct17BytesInt extends Struct {
+  @Int64()
+  int a0;
+
+  @Int64()
+  int a1;
+
+  @Int8()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct19BytesHomogeneousUint8 extends Struct {
+  @Uint8()
+  int a0;
+
+  @Uint8()
+  int a1;
+
+  @Uint8()
+  int a2;
+
+  @Uint8()
+  int a3;
+
+  @Uint8()
+  int a4;
+
+  @Uint8()
+  int a5;
+
+  @Uint8()
+  int a6;
+
+  @Uint8()
+  int a7;
+
+  @Uint8()
+  int a8;
+
+  @Uint8()
+  int a9;
+
+  @Uint8()
+  int a10;
+
+  @Uint8()
+  int a11;
+
+  @Uint8()
+  int a12;
+
+  @Uint8()
+  int a13;
+
+  @Uint8()
+  int a14;
+
+  @Uint8()
+  int a15;
+
+  @Uint8()
+  int a16;
+
+  @Uint8()
+  int a17;
+
+  @Uint8()
+  int a18;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18})";
+}
+
+class Struct20BytesHomogeneousInt32 extends Struct {
+  @Int32()
+  int a0;
+
+  @Int32()
+  int a1;
+
+  @Int32()
+  int a2;
+
+  @Int32()
+  int a3;
+
+  @Int32()
+  int a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+class Struct20BytesHomogeneousFloat extends Struct {
+  @Float()
+  double a0;
+
+  @Float()
+  double a1;
+
+  @Float()
+  double a2;
+
+  @Float()
+  double a3;
+
+  @Float()
+  double a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+class Struct32BytesHomogeneousDouble extends Struct {
+  @Double()
+  double a0;
+
+  @Double()
+  double a1;
+
+  @Double()
+  double a2;
+
+  @Double()
+  double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct40BytesHomogeneousDouble extends Struct {
+  @Double()
+  double a0;
+
+  @Double()
+  double a1;
+
+  @Double()
+  double a2;
+
+  @Double()
+  double a3;
+
+  @Double()
+  double a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+class Struct1024BytesHomogeneousUint64 extends Struct {
+  @Uint64()
+  int a0;
+
+  @Uint64()
+  int a1;
+
+  @Uint64()
+  int a2;
+
+  @Uint64()
+  int a3;
+
+  @Uint64()
+  int a4;
+
+  @Uint64()
+  int a5;
+
+  @Uint64()
+  int a6;
+
+  @Uint64()
+  int a7;
+
+  @Uint64()
+  int a8;
+
+  @Uint64()
+  int a9;
+
+  @Uint64()
+  int a10;
+
+  @Uint64()
+  int a11;
+
+  @Uint64()
+  int a12;
+
+  @Uint64()
+  int a13;
+
+  @Uint64()
+  int a14;
+
+  @Uint64()
+  int a15;
+
+  @Uint64()
+  int a16;
+
+  @Uint64()
+  int a17;
+
+  @Uint64()
+  int a18;
+
+  @Uint64()
+  int a19;
+
+  @Uint64()
+  int a20;
+
+  @Uint64()
+  int a21;
+
+  @Uint64()
+  int a22;
+
+  @Uint64()
+  int a23;
+
+  @Uint64()
+  int a24;
+
+  @Uint64()
+  int a25;
+
+  @Uint64()
+  int a26;
+
+  @Uint64()
+  int a27;
+
+  @Uint64()
+  int a28;
+
+  @Uint64()
+  int a29;
+
+  @Uint64()
+  int a30;
+
+  @Uint64()
+  int a31;
+
+  @Uint64()
+  int a32;
+
+  @Uint64()
+  int a33;
+
+  @Uint64()
+  int a34;
+
+  @Uint64()
+  int a35;
+
+  @Uint64()
+  int a36;
+
+  @Uint64()
+  int a37;
+
+  @Uint64()
+  int a38;
+
+  @Uint64()
+  int a39;
+
+  @Uint64()
+  int a40;
+
+  @Uint64()
+  int a41;
+
+  @Uint64()
+  int a42;
+
+  @Uint64()
+  int a43;
+
+  @Uint64()
+  int a44;
+
+  @Uint64()
+  int a45;
+
+  @Uint64()
+  int a46;
+
+  @Uint64()
+  int a47;
+
+  @Uint64()
+  int a48;
+
+  @Uint64()
+  int a49;
+
+  @Uint64()
+  int a50;
+
+  @Uint64()
+  int a51;
+
+  @Uint64()
+  int a52;
+
+  @Uint64()
+  int a53;
+
+  @Uint64()
+  int a54;
+
+  @Uint64()
+  int a55;
+
+  @Uint64()
+  int a56;
+
+  @Uint64()
+  int a57;
+
+  @Uint64()
+  int a58;
+
+  @Uint64()
+  int a59;
+
+  @Uint64()
+  int a60;
+
+  @Uint64()
+  int a61;
+
+  @Uint64()
+  int a62;
+
+  @Uint64()
+  int a63;
+
+  @Uint64()
+  int a64;
+
+  @Uint64()
+  int a65;
+
+  @Uint64()
+  int a66;
+
+  @Uint64()
+  int a67;
+
+  @Uint64()
+  int a68;
+
+  @Uint64()
+  int a69;
+
+  @Uint64()
+  int a70;
+
+  @Uint64()
+  int a71;
+
+  @Uint64()
+  int a72;
+
+  @Uint64()
+  int a73;
+
+  @Uint64()
+  int a74;
+
+  @Uint64()
+  int a75;
+
+  @Uint64()
+  int a76;
+
+  @Uint64()
+  int a77;
+
+  @Uint64()
+  int a78;
+
+  @Uint64()
+  int a79;
+
+  @Uint64()
+  int a80;
+
+  @Uint64()
+  int a81;
+
+  @Uint64()
+  int a82;
+
+  @Uint64()
+  int a83;
+
+  @Uint64()
+  int a84;
+
+  @Uint64()
+  int a85;
+
+  @Uint64()
+  int a86;
+
+  @Uint64()
+  int a87;
+
+  @Uint64()
+  int a88;
+
+  @Uint64()
+  int a89;
+
+  @Uint64()
+  int a90;
+
+  @Uint64()
+  int a91;
+
+  @Uint64()
+  int a92;
+
+  @Uint64()
+  int a93;
+
+  @Uint64()
+  int a94;
+
+  @Uint64()
+  int a95;
+
+  @Uint64()
+  int a96;
+
+  @Uint64()
+  int a97;
+
+  @Uint64()
+  int a98;
+
+  @Uint64()
+  int a99;
+
+  @Uint64()
+  int a100;
+
+  @Uint64()
+  int a101;
+
+  @Uint64()
+  int a102;
+
+  @Uint64()
+  int a103;
+
+  @Uint64()
+  int a104;
+
+  @Uint64()
+  int a105;
+
+  @Uint64()
+  int a106;
+
+  @Uint64()
+  int a107;
+
+  @Uint64()
+  int a108;
+
+  @Uint64()
+  int a109;
+
+  @Uint64()
+  int a110;
+
+  @Uint64()
+  int a111;
+
+  @Uint64()
+  int a112;
+
+  @Uint64()
+  int a113;
+
+  @Uint64()
+  int a114;
+
+  @Uint64()
+  int a115;
+
+  @Uint64()
+  int a116;
+
+  @Uint64()
+  int a117;
+
+  @Uint64()
+  int a118;
+
+  @Uint64()
+  int a119;
+
+  @Uint64()
+  int a120;
+
+  @Uint64()
+  int a121;
+
+  @Uint64()
+  int a122;
+
+  @Uint64()
+  int a123;
+
+  @Uint64()
+  int a124;
+
+  @Uint64()
+  int a125;
+
+  @Uint64()
+  int a126;
+
+  @Uint64()
+  int a127;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18}, ${a19}, ${a20}, ${a21}, ${a22}, ${a23}, ${a24}, ${a25}, ${a26}, ${a27}, ${a28}, ${a29}, ${a30}, ${a31}, ${a32}, ${a33}, ${a34}, ${a35}, ${a36}, ${a37}, ${a38}, ${a39}, ${a40}, ${a41}, ${a42}, ${a43}, ${a44}, ${a45}, ${a46}, ${a47}, ${a48}, ${a49}, ${a50}, ${a51}, ${a52}, ${a53}, ${a54}, ${a55}, ${a56}, ${a57}, ${a58}, ${a59}, ${a60}, ${a61}, ${a62}, ${a63}, ${a64}, ${a65}, ${a66}, ${a67}, ${a68}, ${a69}, ${a70}, ${a71}, ${a72}, ${a73}, ${a74}, ${a75}, ${a76}, ${a77}, ${a78}, ${a79}, ${a80}, ${a81}, ${a82}, ${a83}, ${a84}, ${a85}, ${a86}, ${a87}, ${a88}, ${a89}, ${a90}, ${a91}, ${a92}, ${a93}, ${a94}, ${a95}, ${a96}, ${a97}, ${a98}, ${a99}, ${a100}, ${a101}, ${a102}, ${a103}, ${a104}, ${a105}, ${a106}, ${a107}, ${a108}, ${a109}, ${a110}, ${a111}, ${a112}, ${a113}, ${a114}, ${a115}, ${a116}, ${a117}, ${a118}, ${a119}, ${a120}, ${a121}, ${a122}, ${a123}, ${a124}, ${a125}, ${a126}, ${a127})";
+}
+
+class StructAlignmentInt16 extends Struct {
+  @Int8()
+  int a0;
+
+  @Int16()
+  int a1;
+
+  @Int8()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class StructAlignmentInt32 extends Struct {
+  @Int8()
+  int a0;
+
+  @Int32()
+  int a1;
+
+  @Int8()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class StructAlignmentInt64 extends Struct {
+  @Int8()
+  int a0;
+
+  @Int64()
+  int a1;
+
+  @Int8()
+  int a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
+
+class Struct8BytesNestedInt extends Struct {
+  Struct4BytesHomogeneousInt16 a0;
+
+  Struct4BytesHomogeneousInt16 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesNestedFloat extends Struct {
+  Struct4BytesFloat a0;
+
+  Struct4BytesFloat a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesNestedFloat2 extends Struct {
+  Struct4BytesFloat a0;
+
+  @Float()
+  double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct8BytesNestedMixed extends Struct {
+  Struct4BytesHomogeneousInt16 a0;
+
+  Struct4BytesFloat a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct16BytesNestedInt extends Struct {
+  Struct8BytesNestedInt a0;
+
+  Struct8BytesNestedInt a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct32BytesNestedInt extends Struct {
+  Struct16BytesNestedInt a0;
+
+  Struct16BytesNestedInt a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIntStructAlignmentInt16 extends Struct {
+  StructAlignmentInt16 a0;
+
+  StructAlignmentInt16 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIntStructAlignmentInt32 extends Struct {
+  StructAlignmentInt32 a0;
+
+  StructAlignmentInt32 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIntStructAlignmentInt64 extends Struct {
+  StructAlignmentInt64 a0;
+
+  StructAlignmentInt64 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedIrregularBig extends Struct {
+  @Uint16()
+  int a0;
+
+  Struct8BytesNestedMixed a1;
+
+  @Uint16()
+  int a2;
+
+  Struct8BytesNestedFloat2 a3;
+
+  @Uint16()
+  int a4;
+
+  Struct8BytesNestedFloat a5;
+
+  @Uint16()
+  int a6;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
+}
+
+class StructNestedIrregularBigger extends Struct {
+  StructNestedIrregularBig a0;
+
+  Struct8BytesNestedMixed a1;
+
+  @Float()
+  double a2;
+
+  @Double()
+  double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class StructNestedIrregularEvenBigger extends Struct {
+  @Uint64()
+  int a0;
+
+  StructNestedIrregularBigger a1;
+
+  StructNestedIrregularBigger a2;
+
+  @Double()
+  double a3;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
+}
+
+class Struct8BytesInlineArrayInt extends Struct {
+  @Array(8)
+  Array<Uint8> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 8; i0 += 1) a0[i0]]})";
+}
+
+class StructInlineArrayIrregular extends Struct {
+  @Array(2)
+  Array<Struct3BytesInt2ByteAligned> a0;
+
+  @Uint8()
+  int a1;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]}, ${a1})";
+}
+
+class StructInlineArray100Bytes extends Struct {
+  @Array(100)
+  Array<Uint8> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 100; i0 += 1) a0[i0]]})";
+}
+
+class StructInlineArrayBig extends Struct {
+  @Uint32()
+  int a0;
+
+  @Uint32()
+  int a1;
+
+  @Array(4000)
+  Array<Uint8> a2;
+
+  String toString() =>
+      "(${a0}, ${a1}, ${[for (var i0 = 0; i0 < 4000; i0 += 1) a2[i0]]})";
+}
+
+class StructStruct16BytesHomogeneousFloat2 extends Struct {
+  Struct4BytesFloat a0;
+
+  @Array(2)
+  Array<Struct4BytesFloat> a1;
+
+  @Float()
+  double a2;
+
+  String toString() =>
+      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
+}
+
+class StructStruct32BytesHomogeneousDouble2 extends Struct {
+  Struct8BytesFloat a0;
+
+  @Array(2)
+  Array<Struct8BytesFloat> a1;
+
+  @Double()
+  double a2;
+
+  String toString() =>
+      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
+}
+
+class StructStruct16BytesMixed3 extends Struct {
+  Struct4BytesFloat a0;
+
+  @Array(1)
+  Array<Struct8BytesMixed> a1;
+
+  @Array(2)
+  Array<Int16> a2;
+
+  String toString() => "(${a0}, ${[
+        for (var i0 = 0; i0 < 1; i0 += 1) a1[i0]
+      ]}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a2[i0]]})";
+}
+
+class Struct8BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array(2, 2, 2)
+  Array<Array<Array<Uint8>>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [
+            for (var i1 = 0; i1 < 2; i1 += 1)
+              [for (var i2 = 0; i2 < 2; i2 += 1) a0[i0][i1][i2]]
+          ]
+      ]})";
+}
+
+class Struct32BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array(2, 2, 2, 2, 2)
+  Array<Array<Array<Array<Array<Uint8>>>>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [
+            for (var i1 = 0; i1 < 2; i1 += 1)
+              [
+                for (var i2 = 0; i2 < 2; i2 += 1)
+                  [
+                    for (var i3 = 0; i3 < 2; i3 += 1)
+                      [for (var i4 = 0; i4 < 2; i4 += 1) a0[i0][i1][i2][i3][i4]]
+                  ]
+              ]
+          ]
+      ]})";
+}
+
+class Struct64BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array.multi([2, 2, 2, 2, 2, 2])
+  Array<Array<Array<Array<Array<Array<Uint8>>>>>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [
+            for (var i1 = 0; i1 < 2; i1 += 1)
+              [
+                for (var i2 = 0; i2 < 2; i2 += 1)
+                  [
+                    for (var i3 = 0; i3 < 2; i3 += 1)
+                      [
+                        for (var i4 = 0; i4 < 2; i4 += 1)
+                          [
+                            for (var i5 = 0; i5 < 2; i5 += 1)
+                              a0[i0][i1][i2][i3][i4][i5]
+                          ]
+                      ]
+                  ]
+              ]
+          ]
+      ]})";
+}
+
+class Struct4BytesInlineArrayMultiDimensionalInt extends Struct {
+  @Array(2, 2)
+  Array<Array<Struct1ByteInt>> a0;
+
+  String toString() => "(${[
+        for (var i0 = 0; i0 < 2; i0 += 1)
+          [for (var i1 = 0; i1 < 2; i1 += 1) a0[i0][i1]]
+      ]})";
+}
+
+@Packed(1)
+class Struct3BytesPackedInt extends Struct {
+  @Int8()
+  int a0;
+
+  @Int16()
+  int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+@Packed(1)
+class Struct3BytesPackedIntMembersAligned extends Struct {
+  @Int8()
+  int a0;
+
+  @Int16()
+  int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+@Packed(1)
+class Struct5BytesPackedMixed extends Struct {
+  @Float()
+  double a0;
+
+  @Uint8()
+  int a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class StructNestedAlignmentStruct5BytesPackedMixed extends Struct {
+  @Uint8()
+  int a0;
+
+  Struct5BytesPackedMixed a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct6BytesInlineArrayInt extends Struct {
+  @Array(2)
+  Array<Struct3BytesPackedIntMembersAligned> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]})";
+}
+
+@Packed(1)
+class Struct8BytesPackedInt extends Struct {
+  @Uint8()
+  int a0;
+
+  @Uint32()
+  int a1;
+
+  @Uint8()
+  int a2;
+
+  @Uint8()
+  int a3;
+
+  @Uint8()
+  int a4;
+
+  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
+}
+
+@Packed(1)
+class Struct9BytesPackedMixed extends Struct {
+  @Uint8()
+  int a0;
+
+  @Double()
+  double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Struct15BytesInlineArrayMixed extends Struct {
+  @Array(3)
+  Array<Struct5BytesPackedMixed> a0;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 3; i0 += 1) a0[i0]]})";
+}
+
+class Union4BytesMixed extends Union {
+  @Uint32()
+  int a0;
+
+  @Float()
+  double a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Union8BytesNestedFloat extends Union {
+  @Double()
+  double a0;
+
+  Struct8BytesHomogeneousFloat a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Union9BytesNestedInt extends Union {
+  Struct8BytesInt a0;
+
+  Struct9BytesHomogeneousUint8 a1;
+
+  String toString() => "(${a0}, ${a1})";
+}
+
+class Union16BytesNestedInlineArrayFloat extends Union {
+  @Array(4)
+  Array<Float> a0;
+
+  Struct16BytesHomogeneousFloat a1;
+
+  String toString() => "(${[for (var i0 = 0; i0 < 4; i0 += 1) a0[i0]]}, ${a1})";
+}
+
+class Union16BytesNestedFloat extends Union {
+  Struct8BytesHomogeneousFloat a0;
+
+  Struct12BytesHomogeneousFloat a1;
+
+  Struct16BytesHomogeneousFloat a2;
+
+  String toString() => "(${a0}, ${a1}, ${a2})";
+}
diff --git a/tests/ffi_2/function_structs_by_value_generated_leaf_test.dart b/tests/ffi_2/function_structs_by_value_generated_leaf_test.dart
new file mode 100644
index 0000000..3199ccc
--- /dev/null
+++ b/tests/ffi_2/function_structs_by_value_generated_leaf_test.dart
@@ -0,0 +1,7685 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
+//
+// SharedObjects=ffi_test_functions
+// VMOptions=
+// VMOptions=--deterministic --optimization-counter-threshold=5
+// VMOptions=--use-slow-path
+// VMOptions=--use-slow-path --stacktrace-every=100
+
+// @dart = 2.9
+
+import 'dart:ffi';
+
+import "package:expect/expect.dart";
+import "package:ffi/ffi.dart";
+
+import 'dylib_utils.dart';
+
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+void main() {
+  for (int i = 0; i < 10; ++i) {
+    testPassStruct1ByteIntx10Leaf();
+    testPassStruct3BytesHomogeneousUint8x10Leaf();
+    testPassStruct3BytesInt2ByteAlignedx10Leaf();
+    testPassStruct4BytesHomogeneousInt16x10Leaf();
+    testPassStruct7BytesHomogeneousUint8x10Leaf();
+    testPassStruct7BytesInt4ByteAlignedx10Leaf();
+    testPassStruct8BytesIntx10Leaf();
+    testPassStruct8BytesHomogeneousFloatx10Leaf();
+    testPassStruct8BytesMixedx10Leaf();
+    testPassStruct9BytesHomogeneousUint8x10Leaf();
+    testPassStruct9BytesInt4Or8ByteAlignedx10Leaf();
+    testPassStruct12BytesHomogeneousFloatx6Leaf();
+    testPassStruct16BytesHomogeneousFloatx5Leaf();
+    testPassStruct16BytesMixedx10Leaf();
+    testPassStruct16BytesMixed2x10Leaf();
+    testPassStruct17BytesIntx10Leaf();
+    testPassStruct19BytesHomogeneousUint8x10Leaf();
+    testPassStruct20BytesHomogeneousInt32x10Leaf();
+    testPassStruct20BytesHomogeneousFloatLeaf();
+    testPassStruct32BytesHomogeneousDoublex5Leaf();
+    testPassStruct40BytesHomogeneousDoubleLeaf();
+    testPassStruct1024BytesHomogeneousUint64Leaf();
+    testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf();
+    testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf();
+    testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf();
+    testPassDoublex6Struct16BytesMixedx4Int32Leaf();
+    testPassInt32x4Struct16BytesMixedx4DoubleLeaf();
+    testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf();
+    testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf();
+    testPassStructAlignmentInt16Leaf();
+    testPassStructAlignmentInt32Leaf();
+    testPassStructAlignmentInt64Leaf();
+    testPassStruct8BytesNestedIntx10Leaf();
+    testPassStruct8BytesNestedFloatx10Leaf();
+    testPassStruct8BytesNestedFloat2x10Leaf();
+    testPassStruct8BytesNestedMixedx10Leaf();
+    testPassStruct16BytesNestedIntx2Leaf();
+    testPassStruct32BytesNestedIntx2Leaf();
+    testPassStructNestedIntStructAlignmentInt16Leaf();
+    testPassStructNestedIntStructAlignmentInt32Leaf();
+    testPassStructNestedIntStructAlignmentInt64Leaf();
+    testPassStructNestedIrregularEvenBiggerx4Leaf();
+    testPassStruct8BytesInlineArrayIntx4Leaf();
+    testPassStructInlineArrayIrregularx4Leaf();
+    testPassStructInlineArray100BytesLeaf();
+    testPassStructStruct16BytesHomogeneousFloat2x5Leaf();
+    testPassStructStruct32BytesHomogeneousDouble2x5Leaf();
+    testPassStructStruct16BytesMixed3x10Leaf();
+    testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf();
+    testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf();
+    testPassStruct3BytesPackedIntx10Leaf();
+    testPassStruct8BytesPackedIntx10Leaf();
+    testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf();
+    testPassStruct5BytesPackedMixedLeaf();
+    testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf();
+    testPassStruct6BytesInlineArrayIntLeaf();
+    testPassStruct15BytesInlineArrayMixedLeaf();
+    testPassUnion4BytesMixedx10Leaf();
+    testPassUnion8BytesNestedFloatx10Leaf();
+    testPassUnion9BytesNestedIntx10Leaf();
+    testPassUnion16BytesNestedInlineArrayFloatx10Leaf();
+    testPassUnion16BytesNestedFloatx10Leaf();
+    testReturnStruct1ByteIntLeaf();
+    testReturnStruct3BytesHomogeneousUint8Leaf();
+    testReturnStruct3BytesInt2ByteAlignedLeaf();
+    testReturnStruct4BytesHomogeneousInt16Leaf();
+    testReturnStruct7BytesHomogeneousUint8Leaf();
+    testReturnStruct7BytesInt4ByteAlignedLeaf();
+    testReturnStruct8BytesIntLeaf();
+    testReturnStruct8BytesHomogeneousFloatLeaf();
+    testReturnStruct8BytesMixedLeaf();
+    testReturnStruct9BytesHomogeneousUint8Leaf();
+    testReturnStruct9BytesInt4Or8ByteAlignedLeaf();
+    testReturnStruct12BytesHomogeneousFloatLeaf();
+    testReturnStruct16BytesHomogeneousFloatLeaf();
+    testReturnStruct16BytesMixedLeaf();
+    testReturnStruct16BytesMixed2Leaf();
+    testReturnStruct17BytesIntLeaf();
+    testReturnStruct19BytesHomogeneousUint8Leaf();
+    testReturnStruct20BytesHomogeneousInt32Leaf();
+    testReturnStruct20BytesHomogeneousFloatLeaf();
+    testReturnStruct32BytesHomogeneousDoubleLeaf();
+    testReturnStruct40BytesHomogeneousDoubleLeaf();
+    testReturnStruct1024BytesHomogeneousUint64Leaf();
+    testReturnStruct3BytesPackedIntLeaf();
+    testReturnStruct8BytesPackedIntLeaf();
+    testReturnStruct9BytesPackedMixedLeaf();
+    testReturnUnion4BytesMixedLeaf();
+    testReturnUnion8BytesNestedFloatLeaf();
+    testReturnUnion9BytesNestedIntLeaf();
+    testReturnUnion16BytesNestedFloatLeaf();
+    testReturnStructArgumentStruct1ByteIntLeaf();
+    testReturnStructArgumentInt32x8Struct1ByteIntLeaf();
+    testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf();
+    testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf();
+    testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf();
+    testReturnStructArgumentStruct8BytesInlineArrayIntLeaf();
+    testReturnStructArgumentStructStruct16BytesHomogeneousLeaf();
+    testReturnStructArgumentStructStruct32BytesHomogeneousLeaf();
+    testReturnStructArgumentStructStruct16BytesMixed3Leaf();
+    testReturnStructAlignmentInt16Leaf();
+    testReturnStructAlignmentInt32Leaf();
+    testReturnStructAlignmentInt64Leaf();
+    testReturnStruct8BytesNestedIntLeaf();
+    testReturnStruct8BytesNestedFloatLeaf();
+    testReturnStruct8BytesNestedFloat2Leaf();
+    testReturnStruct8BytesNestedMixedLeaf();
+    testReturnStruct16BytesNestedIntLeaf();
+    testReturnStruct32BytesNestedIntLeaf();
+    testReturnStructNestedIntStructAlignmentInt16Leaf();
+    testReturnStructNestedIntStructAlignmentInt32Leaf();
+    testReturnStructNestedIntStructAlignmentInt64Leaf();
+    testReturnStructNestedIrregularEvenBiggerLeaf();
+  }
+}
+
+final passStruct1ByteIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt),
+    int Function(
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt,
+        Struct1ByteInt)>("PassStruct1ByteIntx10", isLeaf: true);
+
+/// Smallest struct with data.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct1ByteIntx10Leaf() {
+  final a0Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a1.a0 = 2;
+  a2.a0 = -3;
+  a3.a0 = 4;
+  a4.a0 = -5;
+  a5.a0 = 6;
+  a6.a0 = -7;
+  a7.a0 = 8;
+  a8.a0 = -9;
+  a9.a0 = 10;
+
+  final result =
+      passStruct1ByteIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(5, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct3BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8),
+        int Function(
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8,
+            Struct3BytesHomogeneousUint8)>(
+    "PassStruct3BytesHomogeneousUint8x10",
+    isLeaf: true);
+
+/// Not a multiple of word size, not a power of two.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct3BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct3BytesHomogeneousUint8>();
+  final Struct3BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a1.a0 = 4;
+  a1.a1 = 5;
+  a1.a2 = 6;
+  a2.a0 = 7;
+  a2.a1 = 8;
+  a2.a2 = 9;
+  a3.a0 = 10;
+  a3.a1 = 11;
+  a3.a2 = 12;
+  a4.a0 = 13;
+  a4.a1 = 14;
+  a4.a2 = 15;
+  a5.a0 = 16;
+  a5.a1 = 17;
+  a5.a2 = 18;
+  a6.a0 = 19;
+  a6.a1 = 20;
+  a6.a2 = 21;
+  a7.a0 = 22;
+  a7.a1 = 23;
+  a7.a2 = 24;
+  a8.a0 = 25;
+  a8.a1 = 26;
+  a8.a2 = 27;
+  a9.a0 = 28;
+  a9.a1 = 29;
+  a9.a2 = 30;
+
+  final result = passStruct3BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(465, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct3BytesInt2ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned),
+        int Function(
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned,
+            Struct3BytesInt2ByteAligned)>("PassStruct3BytesInt2ByteAlignedx10",
+    isLeaf: true);
+
+/// Not a multiple of word size, not a power of two.
+/// With alignment rules taken into account size is 4 bytes.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct3BytesInt2ByteAlignedx10Leaf() {
+  final a0Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct3BytesInt2ByteAligned>();
+  final Struct3BytesInt2ByteAligned a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result = passStruct3BytesInt2ByteAlignedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct4BytesHomogeneousInt16x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16),
+        int Function(
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16,
+            Struct4BytesHomogeneousInt16)>(
+    "PassStruct4BytesHomogeneousInt16x10",
+    isLeaf: true);
+
+/// Exactly word size on 32-bit architectures.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct4BytesHomogeneousInt16x10Leaf() {
+  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result = passStruct4BytesHomogeneousInt16x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct7BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8),
+        int Function(
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8,
+            Struct7BytesHomogeneousUint8)>(
+    "PassStruct7BytesHomogeneousUint8x10",
+    isLeaf: true);
+
+/// Sub word size on 64 bit architectures.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct7BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct7BytesHomogeneousUint8>();
+  final Struct7BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a1.a0 = 8;
+  a1.a1 = 9;
+  a1.a2 = 10;
+  a1.a3 = 11;
+  a1.a4 = 12;
+  a1.a5 = 13;
+  a1.a6 = 14;
+  a2.a0 = 15;
+  a2.a1 = 16;
+  a2.a2 = 17;
+  a2.a3 = 18;
+  a2.a4 = 19;
+  a2.a5 = 20;
+  a2.a6 = 21;
+  a3.a0 = 22;
+  a3.a1 = 23;
+  a3.a2 = 24;
+  a3.a3 = 25;
+  a3.a4 = 26;
+  a3.a5 = 27;
+  a3.a6 = 28;
+  a4.a0 = 29;
+  a4.a1 = 30;
+  a4.a2 = 31;
+  a4.a3 = 32;
+  a4.a4 = 33;
+  a4.a5 = 34;
+  a4.a6 = 35;
+  a5.a0 = 36;
+  a5.a1 = 37;
+  a5.a2 = 38;
+  a5.a3 = 39;
+  a5.a4 = 40;
+  a5.a5 = 41;
+  a5.a6 = 42;
+  a6.a0 = 43;
+  a6.a1 = 44;
+  a6.a2 = 45;
+  a6.a3 = 46;
+  a6.a4 = 47;
+  a6.a5 = 48;
+  a6.a6 = 49;
+  a7.a0 = 50;
+  a7.a1 = 51;
+  a7.a2 = 52;
+  a7.a3 = 53;
+  a7.a4 = 54;
+  a7.a5 = 55;
+  a7.a6 = 56;
+  a8.a0 = 57;
+  a8.a1 = 58;
+  a8.a2 = 59;
+  a8.a3 = 60;
+  a8.a4 = 61;
+  a8.a5 = 62;
+  a8.a6 = 63;
+  a9.a0 = 64;
+  a9.a1 = 65;
+  a9.a2 = 66;
+  a9.a3 = 67;
+  a9.a4 = 68;
+  a9.a5 = 69;
+  a9.a6 = 70;
+
+  final result = passStruct7BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(2485, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct7BytesInt4ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned),
+        int Function(
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned,
+            Struct7BytesInt4ByteAligned)>("PassStruct7BytesInt4ByteAlignedx10",
+    isLeaf: true);
+
+/// Sub word size on 64 bit architectures.
+/// With alignment rules taken into account size is 8 bytes.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct7BytesInt4ByteAlignedx10Leaf() {
+  final a0Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct7BytesInt4ByteAligned>();
+  final Struct7BytesInt4ByteAligned a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result = passStruct7BytesInt4ByteAlignedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(15, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt),
+    int Function(
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt,
+        Struct8BytesInt)>("PassStruct8BytesIntx10", isLeaf: true);
+
+/// Exactly word size struct on 64bit architectures.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct8BytesIntx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result =
+      passStruct8BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(15, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesHomogeneousFloatx10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat),
+        double Function(
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat,
+            Struct8BytesHomogeneousFloat)>(
+    "PassStruct8BytesHomogeneousFloatx10",
+    isLeaf: true);
+
+/// Arguments passed in FP registers as long as they fit.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct8BytesHomogeneousFloatx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a1.a0 = -3.0;
+  a1.a1 = 4.0;
+  a2.a0 = -5.0;
+  a2.a1 = 6.0;
+  a3.a0 = -7.0;
+  a3.a1 = 8.0;
+  a4.a0 = -9.0;
+  a4.a1 = 10.0;
+  a5.a0 = -11.0;
+  a5.a1 = 12.0;
+  a6.a0 = -13.0;
+  a6.a1 = 14.0;
+  a7.a0 = -15.0;
+  a7.a1 = 16.0;
+  a8.a0 = -17.0;
+  a8.a1 = 18.0;
+  a9.a0 = -19.0;
+  a9.a1 = 20.0;
+
+  final result = passStruct8BytesHomogeneousFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
+    Float Function(
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed),
+    double Function(
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed,
+        Struct8BytesMixed)>("PassStruct8BytesMixedx10", isLeaf: true);
+
+/// On x64, arguments go in int registers because it is not only float.
+/// 10 struct arguments will exhaust available registers.
+void testPassStruct8BytesMixedx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4.0;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7.0;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10.0;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13.0;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16.0;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19.0;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22.0;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25.0;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28.0;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result =
+      passStruct8BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(15.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct9BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
+        Int64 Function(
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8),
+        int Function(
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8,
+            Struct9BytesHomogeneousUint8)>(
+    "PassStruct9BytesHomogeneousUint8x10",
+    isLeaf: true);
+
+/// Argument is a single byte over a multiple of word size.
+/// 10 struct arguments will exhaust available registers.
+/// Struct only has 1-byte aligned fields to test struct alignment itself.
+/// Tests upper bytes in the integer registers that are partly filled.
+/// Tests stack alignment of non word size stack arguments.
+void testPassStruct9BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct9BytesHomogeneousUint8>();
+  final Struct9BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a0.a7 = 8;
+  a0.a8 = 9;
+  a1.a0 = 10;
+  a1.a1 = 11;
+  a1.a2 = 12;
+  a1.a3 = 13;
+  a1.a4 = 14;
+  a1.a5 = 15;
+  a1.a6 = 16;
+  a1.a7 = 17;
+  a1.a8 = 18;
+  a2.a0 = 19;
+  a2.a1 = 20;
+  a2.a2 = 21;
+  a2.a3 = 22;
+  a2.a4 = 23;
+  a2.a5 = 24;
+  a2.a6 = 25;
+  a2.a7 = 26;
+  a2.a8 = 27;
+  a3.a0 = 28;
+  a3.a1 = 29;
+  a3.a2 = 30;
+  a3.a3 = 31;
+  a3.a4 = 32;
+  a3.a5 = 33;
+  a3.a6 = 34;
+  a3.a7 = 35;
+  a3.a8 = 36;
+  a4.a0 = 37;
+  a4.a1 = 38;
+  a4.a2 = 39;
+  a4.a3 = 40;
+  a4.a4 = 41;
+  a4.a5 = 42;
+  a4.a6 = 43;
+  a4.a7 = 44;
+  a4.a8 = 45;
+  a5.a0 = 46;
+  a5.a1 = 47;
+  a5.a2 = 48;
+  a5.a3 = 49;
+  a5.a4 = 50;
+  a5.a5 = 51;
+  a5.a6 = 52;
+  a5.a7 = 53;
+  a5.a8 = 54;
+  a6.a0 = 55;
+  a6.a1 = 56;
+  a6.a2 = 57;
+  a6.a3 = 58;
+  a6.a4 = 59;
+  a6.a5 = 60;
+  a6.a6 = 61;
+  a6.a7 = 62;
+  a6.a8 = 63;
+  a7.a0 = 64;
+  a7.a1 = 65;
+  a7.a2 = 66;
+  a7.a3 = 67;
+  a7.a4 = 68;
+  a7.a5 = 69;
+  a7.a6 = 70;
+  a7.a7 = 71;
+  a7.a8 = 72;
+  a8.a0 = 73;
+  a8.a1 = 74;
+  a8.a2 = 75;
+  a8.a3 = 76;
+  a8.a4 = 77;
+  a8.a5 = 78;
+  a8.a6 = 79;
+  a8.a7 = 80;
+  a8.a8 = 81;
+  a9.a0 = 82;
+  a9.a1 = 83;
+  a9.a2 = 84;
+  a9.a3 = 85;
+  a9.a4 = 86;
+  a9.a5 = 87;
+  a9.a6 = 88;
+  a9.a7 = 89;
+  a9.a8 = 90;
+
+  final result = passStruct9BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(4095, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct9BytesInt4Or8ByteAlignedx10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned),
+            int Function(
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned,
+                Struct9BytesInt4Or8ByteAligned)>(
+        "PassStruct9BytesInt4Or8ByteAlignedx10",
+        isLeaf: true);
+
+/// Argument is a single byte over a multiple of word size.
+/// With alignment rules taken into account size is 12 or 16 bytes.
+/// 10 struct arguments will exhaust available registers.
+///
+void testPassStruct9BytesInt4Or8ByteAlignedx10Leaf() {
+  final a0Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
+  final Struct9BytesInt4Or8ByteAligned a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result = passStruct9BytesInt4Or8ByteAlignedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct12BytesHomogeneousFloatx6Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat),
+        double Function(
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat,
+            Struct12BytesHomogeneousFloat)>(
+    "PassStruct12BytesHomogeneousFloatx6",
+    isLeaf: true);
+
+/// Arguments in FPU registers on arm hardfp and arm64.
+/// Struct arguments will exhaust available registers, and leave some empty.
+/// The last argument is to test whether arguments are backfilled.
+void testPassStruct12BytesHomogeneousFloatx6Leaf() {
+  final a0Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct12BytesHomogeneousFloat>();
+  final Struct12BytesHomogeneousFloat a5 = a5Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a1.a0 = 4.0;
+  a1.a1 = -5.0;
+  a1.a2 = 6.0;
+  a2.a0 = -7.0;
+  a2.a1 = 8.0;
+  a2.a2 = -9.0;
+  a3.a0 = 10.0;
+  a3.a1 = -11.0;
+  a3.a2 = 12.0;
+  a4.a0 = -13.0;
+  a4.a1 = 14.0;
+  a4.a2 = -15.0;
+  a5.a0 = 16.0;
+  a5.a1 = -17.0;
+  a5.a2 = 18.0;
+
+  final result =
+      passStruct12BytesHomogeneousFloatx6Leaf(a0, a1, a2, a3, a4, a5);
+
+  print("result = $result");
+
+  Expect.approxEquals(9.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+}
+
+final passStruct16BytesHomogeneousFloatx5Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat),
+        double Function(
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat,
+            Struct16BytesHomogeneousFloat)>(
+    "PassStruct16BytesHomogeneousFloatx5",
+    isLeaf: true);
+
+/// On Linux x64 argument is transferred on stack because it is over 16 bytes.
+/// Arguments in FPU registers on arm hardfp and arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStruct16BytesHomogeneousFloatx5Leaf() {
+  final a0Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a4 = a4Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a1.a0 = -5.0;
+  a1.a1 = 6.0;
+  a1.a2 = -7.0;
+  a1.a3 = 8.0;
+  a2.a0 = -9.0;
+  a2.a1 = 10.0;
+  a2.a2 = -11.0;
+  a2.a3 = 12.0;
+  a3.a0 = -13.0;
+  a3.a1 = 14.0;
+  a3.a2 = -15.0;
+  a3.a3 = 16.0;
+  a4.a0 = -17.0;
+  a4.a1 = 18.0;
+  a4.a2 = -19.0;
+  a4.a3 = 20.0;
+
+  final result = passStruct16BytesHomogeneousFloatx5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStruct16BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed),
+    double Function(
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed,
+        Struct16BytesMixed)>("PassStruct16BytesMixedx10", isLeaf: true);
+
+/// On x64, arguments are split over FP and int registers.
+/// On x64, it will exhaust the integer registers with the 6th argument.
+/// The rest goes on the stack.
+/// On arm, arguments are 8 byte aligned.
+void testPassStruct16BytesMixedx10Leaf() {
+  final a0Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2;
+  a1.a0 = -3.0;
+  a1.a1 = 4;
+  a2.a0 = -5.0;
+  a2.a1 = 6;
+  a3.a0 = -7.0;
+  a3.a1 = 8;
+  a4.a0 = -9.0;
+  a4.a1 = 10;
+  a5.a0 = -11.0;
+  a5.a1 = 12;
+  a6.a0 = -13.0;
+  a6.a1 = 14;
+  a7.a0 = -15.0;
+  a7.a1 = 16;
+  a8.a0 = -17.0;
+  a8.a1 = 18;
+  a9.a0 = -19.0;
+  a9.a1 = 20;
+
+  final result =
+      passStruct16BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct16BytesMixed2x10Leaf = ffiTestFunctions.lookupFunction<
+    Float Function(
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2),
+    double Function(
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2,
+        Struct16BytesMixed2)>("PassStruct16BytesMixed2x10", isLeaf: true);
+
+/// On x64, arguments are split over FP and int registers.
+/// On x64, it will exhaust the integer registers with the 6th argument.
+/// The rest goes on the stack.
+/// On arm, arguments are 4 byte aligned.
+void testPassStruct16BytesMixed2x10Leaf() {
+  final a0Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct16BytesMixed2>();
+  final Struct16BytesMixed2 a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4;
+  a1.a0 = -5.0;
+  a1.a1 = 6.0;
+  a1.a2 = -7.0;
+  a1.a3 = 8;
+  a2.a0 = -9.0;
+  a2.a1 = 10.0;
+  a2.a2 = -11.0;
+  a2.a3 = 12;
+  a3.a0 = -13.0;
+  a3.a1 = 14.0;
+  a3.a2 = -15.0;
+  a3.a3 = 16;
+  a4.a0 = -17.0;
+  a4.a1 = 18.0;
+  a4.a2 = -19.0;
+  a4.a3 = 20;
+  a5.a0 = -21.0;
+  a5.a1 = 22.0;
+  a5.a2 = -23.0;
+  a5.a3 = 24;
+  a6.a0 = -25.0;
+  a6.a1 = 26.0;
+  a6.a2 = -27.0;
+  a6.a3 = 28;
+  a7.a0 = -29.0;
+  a7.a1 = 30.0;
+  a7.a2 = -31.0;
+  a7.a3 = 32;
+  a8.a0 = -33.0;
+  a8.a1 = 34.0;
+  a8.a2 = -35.0;
+  a8.a3 = 36;
+  a9.a0 = -37.0;
+  a9.a1 = 38.0;
+  a9.a2 = -39.0;
+  a9.a3 = 40;
+
+  final result =
+      passStruct16BytesMixed2x10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(20.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct17BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt),
+    int Function(
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt,
+        Struct17BytesInt)>("PassStruct17BytesIntx10", isLeaf: true);
+
+/// Arguments are passed as pointer to copy on arm64.
+/// Tests that the memory allocated for copies are rounded up to word size.
+void testPassStruct17BytesIntx10Leaf() {
+  final a0Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct17BytesInt>();
+  final Struct17BytesInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+  a2.a0 = -7;
+  a2.a1 = 8;
+  a2.a2 = -9;
+  a3.a0 = 10;
+  a3.a1 = -11;
+  a3.a2 = 12;
+  a4.a0 = -13;
+  a4.a1 = 14;
+  a4.a2 = -15;
+  a5.a0 = 16;
+  a5.a1 = -17;
+  a5.a2 = 18;
+  a6.a0 = -19;
+  a6.a1 = 20;
+  a6.a2 = -21;
+  a7.a0 = 22;
+  a7.a1 = -23;
+  a7.a2 = 24;
+  a8.a0 = -25;
+  a8.a1 = 26;
+  a8.a2 = -27;
+  a9.a0 = 28;
+  a9.a1 = -29;
+  a9.a2 = 30;
+
+  final result =
+      passStruct17BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(15, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct19BytesHomogeneousUint8x10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8),
+            int Function(
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8,
+                Struct19BytesHomogeneousUint8)>(
+        "PassStruct19BytesHomogeneousUint8x10",
+        isLeaf: true);
+
+/// The minimum alignment of this struct is only 1 byte based on its fields.
+/// Test that the memory backing these structs is extended to the right size.
+///
+void testPassStruct19BytesHomogeneousUint8x10Leaf() {
+  final a0Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct19BytesHomogeneousUint8>();
+  final Struct19BytesHomogeneousUint8 a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a0.a7 = 8;
+  a0.a8 = 9;
+  a0.a9 = 10;
+  a0.a10 = 11;
+  a0.a11 = 12;
+  a0.a12 = 13;
+  a0.a13 = 14;
+  a0.a14 = 15;
+  a0.a15 = 16;
+  a0.a16 = 17;
+  a0.a17 = 18;
+  a0.a18 = 19;
+  a1.a0 = 20;
+  a1.a1 = 21;
+  a1.a2 = 22;
+  a1.a3 = 23;
+  a1.a4 = 24;
+  a1.a5 = 25;
+  a1.a6 = 26;
+  a1.a7 = 27;
+  a1.a8 = 28;
+  a1.a9 = 29;
+  a1.a10 = 30;
+  a1.a11 = 31;
+  a1.a12 = 32;
+  a1.a13 = 33;
+  a1.a14 = 34;
+  a1.a15 = 35;
+  a1.a16 = 36;
+  a1.a17 = 37;
+  a1.a18 = 38;
+  a2.a0 = 39;
+  a2.a1 = 40;
+  a2.a2 = 41;
+  a2.a3 = 42;
+  a2.a4 = 43;
+  a2.a5 = 44;
+  a2.a6 = 45;
+  a2.a7 = 46;
+  a2.a8 = 47;
+  a2.a9 = 48;
+  a2.a10 = 49;
+  a2.a11 = 50;
+  a2.a12 = 51;
+  a2.a13 = 52;
+  a2.a14 = 53;
+  a2.a15 = 54;
+  a2.a16 = 55;
+  a2.a17 = 56;
+  a2.a18 = 57;
+  a3.a0 = 58;
+  a3.a1 = 59;
+  a3.a2 = 60;
+  a3.a3 = 61;
+  a3.a4 = 62;
+  a3.a5 = 63;
+  a3.a6 = 64;
+  a3.a7 = 65;
+  a3.a8 = 66;
+  a3.a9 = 67;
+  a3.a10 = 68;
+  a3.a11 = 69;
+  a3.a12 = 70;
+  a3.a13 = 71;
+  a3.a14 = 72;
+  a3.a15 = 73;
+  a3.a16 = 74;
+  a3.a17 = 75;
+  a3.a18 = 76;
+  a4.a0 = 77;
+  a4.a1 = 78;
+  a4.a2 = 79;
+  a4.a3 = 80;
+  a4.a4 = 81;
+  a4.a5 = 82;
+  a4.a6 = 83;
+  a4.a7 = 84;
+  a4.a8 = 85;
+  a4.a9 = 86;
+  a4.a10 = 87;
+  a4.a11 = 88;
+  a4.a12 = 89;
+  a4.a13 = 90;
+  a4.a14 = 91;
+  a4.a15 = 92;
+  a4.a16 = 93;
+  a4.a17 = 94;
+  a4.a18 = 95;
+  a5.a0 = 96;
+  a5.a1 = 97;
+  a5.a2 = 98;
+  a5.a3 = 99;
+  a5.a4 = 100;
+  a5.a5 = 101;
+  a5.a6 = 102;
+  a5.a7 = 103;
+  a5.a8 = 104;
+  a5.a9 = 105;
+  a5.a10 = 106;
+  a5.a11 = 107;
+  a5.a12 = 108;
+  a5.a13 = 109;
+  a5.a14 = 110;
+  a5.a15 = 111;
+  a5.a16 = 112;
+  a5.a17 = 113;
+  a5.a18 = 114;
+  a6.a0 = 115;
+  a6.a1 = 116;
+  a6.a2 = 117;
+  a6.a3 = 118;
+  a6.a4 = 119;
+  a6.a5 = 120;
+  a6.a6 = 121;
+  a6.a7 = 122;
+  a6.a8 = 123;
+  a6.a9 = 124;
+  a6.a10 = 125;
+  a6.a11 = 126;
+  a6.a12 = 127;
+  a6.a13 = 128;
+  a6.a14 = 129;
+  a6.a15 = 130;
+  a6.a16 = 131;
+  a6.a17 = 132;
+  a6.a18 = 133;
+  a7.a0 = 134;
+  a7.a1 = 135;
+  a7.a2 = 136;
+  a7.a3 = 137;
+  a7.a4 = 138;
+  a7.a5 = 139;
+  a7.a6 = 140;
+  a7.a7 = 141;
+  a7.a8 = 142;
+  a7.a9 = 143;
+  a7.a10 = 144;
+  a7.a11 = 145;
+  a7.a12 = 146;
+  a7.a13 = 147;
+  a7.a14 = 148;
+  a7.a15 = 149;
+  a7.a16 = 150;
+  a7.a17 = 151;
+  a7.a18 = 152;
+  a8.a0 = 153;
+  a8.a1 = 154;
+  a8.a2 = 155;
+  a8.a3 = 156;
+  a8.a4 = 157;
+  a8.a5 = 158;
+  a8.a6 = 159;
+  a8.a7 = 160;
+  a8.a8 = 161;
+  a8.a9 = 162;
+  a8.a10 = 163;
+  a8.a11 = 164;
+  a8.a12 = 165;
+  a8.a13 = 166;
+  a8.a14 = 167;
+  a8.a15 = 168;
+  a8.a16 = 169;
+  a8.a17 = 170;
+  a8.a18 = 171;
+  a9.a0 = 172;
+  a9.a1 = 173;
+  a9.a2 = 174;
+  a9.a3 = 175;
+  a9.a4 = 176;
+  a9.a5 = 177;
+  a9.a6 = 178;
+  a9.a7 = 179;
+  a9.a8 = 180;
+  a9.a9 = 181;
+  a9.a10 = 182;
+  a9.a11 = 183;
+  a9.a12 = 184;
+  a9.a13 = 185;
+  a9.a14 = 186;
+  a9.a15 = 187;
+  a9.a16 = 188;
+  a9.a17 = 189;
+  a9.a18 = 190;
+
+  final result = passStruct19BytesHomogeneousUint8x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(18145, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct20BytesHomogeneousInt32x10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int32 Function(
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32),
+            int Function(
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32,
+                Struct20BytesHomogeneousInt32)>(
+        "PassStruct20BytesHomogeneousInt32x10",
+        isLeaf: true);
+
+/// Argument too big to go into integer registers on arm64.
+/// The arguments are passed as pointers to copies.
+/// The amount of arguments exhausts the number of integer registers, such that
+/// pointers to copies are also passed on the stack.
+void testPassStruct20BytesHomogeneousInt32x10Leaf() {
+  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a0.a3 = 4;
+  a0.a4 = -5;
+  a1.a0 = 6;
+  a1.a1 = -7;
+  a1.a2 = 8;
+  a1.a3 = -9;
+  a1.a4 = 10;
+  a2.a0 = -11;
+  a2.a1 = 12;
+  a2.a2 = -13;
+  a2.a3 = 14;
+  a2.a4 = -15;
+  a3.a0 = 16;
+  a3.a1 = -17;
+  a3.a2 = 18;
+  a3.a3 = -19;
+  a3.a4 = 20;
+  a4.a0 = -21;
+  a4.a1 = 22;
+  a4.a2 = -23;
+  a4.a3 = 24;
+  a4.a4 = -25;
+  a5.a0 = 26;
+  a5.a1 = -27;
+  a5.a2 = 28;
+  a5.a3 = -29;
+  a5.a4 = 30;
+  a6.a0 = -31;
+  a6.a1 = 32;
+  a6.a2 = -33;
+  a6.a3 = 34;
+  a6.a4 = -35;
+  a7.a0 = 36;
+  a7.a1 = -37;
+  a7.a2 = 38;
+  a7.a3 = -39;
+  a7.a4 = 40;
+  a8.a0 = -41;
+  a8.a1 = 42;
+  a8.a2 = -43;
+  a8.a3 = 44;
+  a8.a4 = -45;
+  a9.a0 = 46;
+  a9.a1 = -47;
+  a9.a2 = 48;
+  a9.a3 = -49;
+  a9.a4 = 50;
+
+  final result = passStruct20BytesHomogeneousInt32x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(25, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+        Float Function(Struct20BytesHomogeneousFloat),
+        double Function(Struct20BytesHomogeneousFloat)>(
+    "PassStruct20BytesHomogeneousFloat",
+    isLeaf: true);
+
+/// Argument too big to go into FPU registers in hardfp and arm64.
+void testPassStruct20BytesHomogeneousFloatLeaf() {
+  final a0Pointer = calloc<Struct20BytesHomogeneousFloat>();
+  final Struct20BytesHomogeneousFloat a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a0.a4 = -5.0;
+
+  final result = passStruct20BytesHomogeneousFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(-3.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct32BytesHomogeneousDoublex5Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble),
+            double Function(
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble,
+                Struct32BytesHomogeneousDouble)>(
+        "PassStruct32BytesHomogeneousDoublex5",
+        isLeaf: true);
+
+/// Arguments in FPU registers on arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStruct32BytesHomogeneousDoublex5Leaf() {
+  final a0Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a4 = a4Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a1.a0 = -5.0;
+  a1.a1 = 6.0;
+  a1.a2 = -7.0;
+  a1.a3 = 8.0;
+  a2.a0 = -9.0;
+  a2.a1 = 10.0;
+  a2.a2 = -11.0;
+  a2.a3 = 12.0;
+  a3.a0 = -13.0;
+  a3.a1 = 14.0;
+  a3.a2 = -15.0;
+  a3.a3 = 16.0;
+  a4.a0 = -17.0;
+  a4.a1 = 18.0;
+  a4.a2 = -19.0;
+  a4.a3 = 20.0;
+
+  final result = passStruct32BytesHomogeneousDoublex5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStruct40BytesHomogeneousDoubleLeaf = ffiTestFunctions.lookupFunction<
+        Double Function(Struct40BytesHomogeneousDouble),
+        double Function(Struct40BytesHomogeneousDouble)>(
+    "PassStruct40BytesHomogeneousDouble",
+    isLeaf: true);
+
+/// Argument too big to go into FPU registers in arm64.
+void testPassStruct40BytesHomogeneousDoubleLeaf() {
+  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
+  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a0.a4 = -5.0;
+
+  final result = passStruct40BytesHomogeneousDoubleLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(-3.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct1024BytesHomogeneousUint64Leaf =
+    ffiTestFunctions.lookupFunction<
+            Uint64 Function(Struct1024BytesHomogeneousUint64),
+            int Function(Struct1024BytesHomogeneousUint64)>(
+        "PassStruct1024BytesHomogeneousUint64",
+        isLeaf: true);
+
+/// Test 1kb struct.
+void testPassStruct1024BytesHomogeneousUint64Leaf() {
+  final a0Pointer = calloc<Struct1024BytesHomogeneousUint64>();
+  final Struct1024BytesHomogeneousUint64 a0 = a0Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a0.a5 = 6;
+  a0.a6 = 7;
+  a0.a7 = 8;
+  a0.a8 = 9;
+  a0.a9 = 10;
+  a0.a10 = 11;
+  a0.a11 = 12;
+  a0.a12 = 13;
+  a0.a13 = 14;
+  a0.a14 = 15;
+  a0.a15 = 16;
+  a0.a16 = 17;
+  a0.a17 = 18;
+  a0.a18 = 19;
+  a0.a19 = 20;
+  a0.a20 = 21;
+  a0.a21 = 22;
+  a0.a22 = 23;
+  a0.a23 = 24;
+  a0.a24 = 25;
+  a0.a25 = 26;
+  a0.a26 = 27;
+  a0.a27 = 28;
+  a0.a28 = 29;
+  a0.a29 = 30;
+  a0.a30 = 31;
+  a0.a31 = 32;
+  a0.a32 = 33;
+  a0.a33 = 34;
+  a0.a34 = 35;
+  a0.a35 = 36;
+  a0.a36 = 37;
+  a0.a37 = 38;
+  a0.a38 = 39;
+  a0.a39 = 40;
+  a0.a40 = 41;
+  a0.a41 = 42;
+  a0.a42 = 43;
+  a0.a43 = 44;
+  a0.a44 = 45;
+  a0.a45 = 46;
+  a0.a46 = 47;
+  a0.a47 = 48;
+  a0.a48 = 49;
+  a0.a49 = 50;
+  a0.a50 = 51;
+  a0.a51 = 52;
+  a0.a52 = 53;
+  a0.a53 = 54;
+  a0.a54 = 55;
+  a0.a55 = 56;
+  a0.a56 = 57;
+  a0.a57 = 58;
+  a0.a58 = 59;
+  a0.a59 = 60;
+  a0.a60 = 61;
+  a0.a61 = 62;
+  a0.a62 = 63;
+  a0.a63 = 64;
+  a0.a64 = 65;
+  a0.a65 = 66;
+  a0.a66 = 67;
+  a0.a67 = 68;
+  a0.a68 = 69;
+  a0.a69 = 70;
+  a0.a70 = 71;
+  a0.a71 = 72;
+  a0.a72 = 73;
+  a0.a73 = 74;
+  a0.a74 = 75;
+  a0.a75 = 76;
+  a0.a76 = 77;
+  a0.a77 = 78;
+  a0.a78 = 79;
+  a0.a79 = 80;
+  a0.a80 = 81;
+  a0.a81 = 82;
+  a0.a82 = 83;
+  a0.a83 = 84;
+  a0.a84 = 85;
+  a0.a85 = 86;
+  a0.a86 = 87;
+  a0.a87 = 88;
+  a0.a88 = 89;
+  a0.a89 = 90;
+  a0.a90 = 91;
+  a0.a91 = 92;
+  a0.a92 = 93;
+  a0.a93 = 94;
+  a0.a94 = 95;
+  a0.a95 = 96;
+  a0.a96 = 97;
+  a0.a97 = 98;
+  a0.a98 = 99;
+  a0.a99 = 100;
+  a0.a100 = 101;
+  a0.a101 = 102;
+  a0.a102 = 103;
+  a0.a103 = 104;
+  a0.a104 = 105;
+  a0.a105 = 106;
+  a0.a106 = 107;
+  a0.a107 = 108;
+  a0.a108 = 109;
+  a0.a109 = 110;
+  a0.a110 = 111;
+  a0.a111 = 112;
+  a0.a112 = 113;
+  a0.a113 = 114;
+  a0.a114 = 115;
+  a0.a115 = 116;
+  a0.a116 = 117;
+  a0.a117 = 118;
+  a0.a118 = 119;
+  a0.a119 = 120;
+  a0.a120 = 121;
+  a0.a121 = 122;
+  a0.a122 = 123;
+  a0.a123 = 124;
+  a0.a124 = 125;
+  a0.a125 = 126;
+  a0.a126 = 127;
+  a0.a127 = 128;
+
+  final result = passStruct1024BytesHomogeneousUint64Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(8256, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf =
+    ffiTestFunctions.lookupFunction<
+            Float Function(
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float,
+                Struct16BytesHomogeneousFloat,
+                Float),
+            double Function(
+                double,
+                Struct16BytesHomogeneousFloat,
+                double,
+                Struct16BytesHomogeneousFloat,
+                double,
+                Struct16BytesHomogeneousFloat,
+                double,
+                Struct16BytesHomogeneousFloat,
+                double)>("PassFloatStruct16BytesHomogeneousFloatFloatStruct1",
+        isLeaf: true);
+
+/// Tests the alignment of structs in FPU registers and backfilling.
+void testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf() {
+  double a0;
+  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
+  double a2;
+  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
+  double a4;
+  final a5Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a5 = a5Pointer.ref;
+  double a6;
+  final a7Pointer = calloc<Struct16BytesHomogeneousFloat>();
+  final Struct16BytesHomogeneousFloat a7 = a7Pointer.ref;
+  double a8;
+
+  a0 = -1.0;
+  a1.a0 = 2.0;
+  a1.a1 = -3.0;
+  a1.a2 = 4.0;
+  a1.a3 = -5.0;
+  a2 = 6.0;
+  a3.a0 = -7.0;
+  a3.a1 = 8.0;
+  a3.a2 = -9.0;
+  a3.a3 = 10.0;
+  a4 = -11.0;
+  a5.a0 = 12.0;
+  a5.a1 = -13.0;
+  a5.a2 = 14.0;
+  a5.a3 = -15.0;
+  a6 = 16.0;
+  a7.a0 = -17.0;
+  a7.a1 = 18.0;
+  a7.a2 = -19.0;
+  a7.a3 = 20.0;
+  a8 = -21.0;
+
+  final result = passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-11.0, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float,
+                Struct32BytesHomogeneousDouble,
+                Float),
+            double Function(
+                double,
+                Struct32BytesHomogeneousDouble,
+                double,
+                Struct32BytesHomogeneousDouble,
+                double,
+                Struct32BytesHomogeneousDouble,
+                double,
+                Struct32BytesHomogeneousDouble,
+                double)>("PassFloatStruct32BytesHomogeneousDoubleFloatStruct",
+        isLeaf: true);
+
+/// Tests the alignment of structs in FPU registers and backfilling.
+void testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf() {
+  double a0;
+  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
+  double a2;
+  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
+  double a4;
+  final a5Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a5 = a5Pointer.ref;
+  double a6;
+  final a7Pointer = calloc<Struct32BytesHomogeneousDouble>();
+  final Struct32BytesHomogeneousDouble a7 = a7Pointer.ref;
+  double a8;
+
+  a0 = -1.0;
+  a1.a0 = 2.0;
+  a1.a1 = -3.0;
+  a1.a2 = 4.0;
+  a1.a3 = -5.0;
+  a2 = 6.0;
+  a3.a0 = -7.0;
+  a3.a1 = 8.0;
+  a3.a2 = -9.0;
+  a3.a3 = 10.0;
+  a4 = -11.0;
+  a5.a0 = 12.0;
+  a5.a1 = -13.0;
+  a5.a2 = 14.0;
+  a5.a3 = -15.0;
+  a6 = 16.0;
+  a7.a0 = -17.0;
+  a7.a1 = 18.0;
+  a7.a2 = -19.0;
+  a7.a3 = 20.0;
+  a8 = -21.0;
+
+  final result = passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-11.0, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(Int8, Struct16BytesMixed, Int8, Struct16BytesMixed,
+                Int8, Struct16BytesMixed, Int8, Struct16BytesMixed, Int8),
+            double Function(
+                int,
+                Struct16BytesMixed,
+                int,
+                Struct16BytesMixed,
+                int,
+                Struct16BytesMixed,
+                int,
+                Struct16BytesMixed,
+                int)>("PassInt8Struct16BytesMixedInt8Struct16BytesMixedIn",
+        isLeaf: true);
+
+/// Tests the alignment of structs in integers registers and on the stack.
+/// Arm32 aligns this struct at 8.
+/// Also, arm32 allocates the second struct partially in registers, partially
+/// on stack.
+/// Test backfilling of integer registers.
+void testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf() {
+  int a0;
+  final a1Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a1 = a1Pointer.ref;
+  int a2;
+  final a3Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a3 = a3Pointer.ref;
+  int a4;
+  final a5Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a5 = a5Pointer.ref;
+  int a6;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  int a8;
+
+  a0 = -1;
+  a1.a0 = 2.0;
+  a1.a1 = -3;
+  a2 = 4;
+  a3.a0 = -5.0;
+  a3.a1 = 6;
+  a4 = -7;
+  a5.a0 = 8.0;
+  a5.a1 = -9;
+  a6 = 10;
+  a7.a0 = -11.0;
+  a7.a1 = 12;
+  a8 = -13;
+
+  final result = passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-7.0, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passDoublex6Struct16BytesMixedx4Int32Leaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Int32),
+        double Function(
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            int)>("PassDoublex6Struct16BytesMixedx4Int32", isLeaf: true);
+
+/// On Linux x64, it will exhaust xmm registers first, after 6 doubles and 2
+/// structs. The rest of the structs will go on the stack.
+/// The int will be backfilled into the int register.
+void testPassDoublex6Struct16BytesMixedx4Int32Leaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+  double a4;
+  double a5;
+  final a6Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a9 = a9Pointer.ref;
+  int a10;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+  a4 = -5.0;
+  a5 = 6.0;
+  a6.a0 = -7.0;
+  a6.a1 = 8;
+  a7.a0 = -9.0;
+  a7.a1 = 10;
+  a8.a0 = -11.0;
+  a8.a1 = 12;
+  a9.a0 = -13.0;
+  a9.a1 = 14;
+  a10 = -15;
+
+  final result = passDoublex6Struct16BytesMixedx4Int32Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
+
+  print("result = $result");
+
+  Expect.approxEquals(-8.0, result);
+
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passInt32x4Struct16BytesMixedx4DoubleLeaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(Int32, Int32, Int32, Int32, Struct16BytesMixed,
+            Struct16BytesMixed, Struct16BytesMixed, Struct16BytesMixed, Double),
+        double Function(
+            int,
+            int,
+            int,
+            int,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            Struct16BytesMixed,
+            double)>("PassInt32x4Struct16BytesMixedx4Double", isLeaf: true);
+
+/// On Linux x64, it will exhaust int registers first.
+/// The rest of the structs will go on the stack.
+/// The double will be backfilled into the xmm register.
+void testPassInt32x4Struct16BytesMixedx4DoubleLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  final a4Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct16BytesMixed>();
+  final Struct16BytesMixed a7 = a7Pointer.ref;
+  double a8;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4.a0 = -5.0;
+  a4.a1 = 6;
+  a5.a0 = -7.0;
+  a5.a1 = 8;
+  a6.a0 = -9.0;
+  a6.a1 = 10;
+  a7.a0 = -11.0;
+  a7.a1 = 12;
+  a8 = -13.0;
+
+  final result = passInt32x4Struct16BytesMixedx4DoubleLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.approxEquals(-7.0, result);
+
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+}
+
+final passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(Struct40BytesHomogeneousDouble,
+                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat),
+            double Function(Struct40BytesHomogeneousDouble,
+                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat)>(
+        "PassStruct40BytesHomogeneousDoubleStruct4BytesHomo",
+        isLeaf: true);
+
+/// On various architectures, first struct is allocated on stack.
+/// Check that the other two arguments are allocated on registers.
+void testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf() {
+  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
+  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a0.a2 = -3.0;
+  a0.a3 = 4.0;
+  a0.a4 = -5.0;
+  a1.a0 = 6;
+  a1.a1 = -7;
+  a2.a0 = 8.0;
+  a2.a1 = -9.0;
+
+  final result =
+      passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.approxEquals(-5.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+}
+
+final passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Int32,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Double,
+            Int64,
+            Int8,
+            Struct1ByteInt,
+            Int64,
+            Int8,
+            Struct4BytesHomogeneousInt16,
+            Int64,
+            Int8,
+            Struct8BytesInt,
+            Int64,
+            Int8,
+            Struct8BytesHomogeneousFloat,
+            Int64,
+            Int8,
+            Struct8BytesMixed,
+            Int64,
+            Int8,
+            StructAlignmentInt16,
+            Int64,
+            Int8,
+            StructAlignmentInt32,
+            Int64,
+            Int8,
+            StructAlignmentInt64),
+        double Function(
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            double,
+            int,
+            int,
+            Struct1ByteInt,
+            int,
+            int,
+            Struct4BytesHomogeneousInt16,
+            int,
+            int,
+            Struct8BytesInt,
+            int,
+            int,
+            Struct8BytesHomogeneousFloat,
+            int,
+            int,
+            Struct8BytesMixed,
+            int,
+            int,
+            StructAlignmentInt16,
+            int,
+            int,
+            StructAlignmentInt32,
+            int,
+            int,
+            StructAlignmentInt64)>("PassInt32x8Doublex8Int64Int8Struct1ByteIntInt64Int", isLeaf: true);
+
+/// Test alignment and padding of 16 byte int within struct.
+void testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  double a8;
+  double a9;
+  double a10;
+  double a11;
+  double a12;
+  double a13;
+  double a14;
+  double a15;
+  int a16;
+  int a17;
+  final a18Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a18 = a18Pointer.ref;
+  int a19;
+  int a20;
+  final a21Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a21 = a21Pointer.ref;
+  int a22;
+  int a23;
+  final a24Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a24 = a24Pointer.ref;
+  int a25;
+  int a26;
+  final a27Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a27 = a27Pointer.ref;
+  int a28;
+  int a29;
+  final a30Pointer = calloc<Struct8BytesMixed>();
+  final Struct8BytesMixed a30 = a30Pointer.ref;
+  int a31;
+  int a32;
+  final a33Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a33 = a33Pointer.ref;
+  int a34;
+  int a35;
+  final a36Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a36 = a36Pointer.ref;
+  int a37;
+  int a38;
+  final a39Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a39 = a39Pointer.ref;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+  a5 = 6;
+  a6 = -7;
+  a7 = 8;
+  a8 = -9.0;
+  a9 = 10.0;
+  a10 = -11.0;
+  a11 = 12.0;
+  a12 = -13.0;
+  a13 = 14.0;
+  a14 = -15.0;
+  a15 = 16.0;
+  a16 = -17;
+  a17 = 18;
+  a18.a0 = -19;
+  a19 = 20;
+  a20 = -21;
+  a21.a0 = 22;
+  a21.a1 = -23;
+  a22 = 24;
+  a23 = -25;
+  a24.a0 = 26;
+  a24.a1 = -27;
+  a24.a2 = 28;
+  a25 = -29;
+  a26 = 30;
+  a27.a0 = -31.0;
+  a27.a1 = 32.0;
+  a28 = -33;
+  a29 = 34;
+  a30.a0 = -35.0;
+  a30.a1 = 36;
+  a30.a2 = -37;
+  a31 = 38;
+  a32 = -39;
+  a33.a0 = 40;
+  a33.a1 = -41;
+  a33.a2 = 42;
+  a34 = -43;
+  a35 = 44;
+  a36.a0 = -45;
+  a36.a1 = 46;
+  a36.a2 = -47;
+  a37 = 48;
+  a38 = -49;
+  a39.a0 = 50;
+  a39.a1 = -51;
+  a39.a2 = 52;
+
+  final result = passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf(
+      a0,
+      a1,
+      a2,
+      a3,
+      a4,
+      a5,
+      a6,
+      a7,
+      a8,
+      a9,
+      a10,
+      a11,
+      a12,
+      a13,
+      a14,
+      a15,
+      a16,
+      a17,
+      a18,
+      a19,
+      a20,
+      a21,
+      a22,
+      a23,
+      a24,
+      a25,
+      a26,
+      a27,
+      a28,
+      a29,
+      a30,
+      a31,
+      a32,
+      a33,
+      a34,
+      a35,
+      a36,
+      a37,
+      a38,
+      a39);
+
+  print("result = $result");
+
+  Expect.approxEquals(26.0, result);
+
+  calloc.free(a18Pointer);
+  calloc.free(a21Pointer);
+  calloc.free(a24Pointer);
+  calloc.free(a27Pointer);
+  calloc.free(a30Pointer);
+  calloc.free(a33Pointer);
+  calloc.free(a36Pointer);
+  calloc.free(a39Pointer);
+}
+
+final passStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(StructAlignmentInt16),
+    int Function(
+        StructAlignmentInt16)>("PassStructAlignmentInt16", isLeaf: true);
+
+/// Test alignment and padding of 16 byte int within struct.
+void testPassStructAlignmentInt16Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = passStructAlignmentInt16Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(-2, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(StructAlignmentInt32),
+    int Function(
+        StructAlignmentInt32)>("PassStructAlignmentInt32", isLeaf: true);
+
+/// Test alignment and padding of 32 byte int within struct.
+void testPassStructAlignmentInt32Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = passStructAlignmentInt32Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(-2, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(StructAlignmentInt64),
+    int Function(
+        StructAlignmentInt64)>("PassStructAlignmentInt64", isLeaf: true);
+
+/// Test alignment and padding of 64 byte int within struct.
+void testPassStructAlignmentInt64Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = passStructAlignmentInt64Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(-2, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct8BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt),
+    int Function(
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt,
+        Struct8BytesNestedInt)>("PassStruct8BytesNestedIntx10", isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust registers on all platforms.
+void testPassStruct8BytesNestedIntx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a1.a0 = -3;
+  a0.a1.a1 = 4;
+  a1.a0.a0 = -5;
+  a1.a0.a1 = 6;
+  a1.a1.a0 = -7;
+  a1.a1.a1 = 8;
+  a2.a0.a0 = -9;
+  a2.a0.a1 = 10;
+  a2.a1.a0 = -11;
+  a2.a1.a1 = 12;
+  a3.a0.a0 = -13;
+  a3.a0.a1 = 14;
+  a3.a1.a0 = -15;
+  a3.a1.a1 = 16;
+  a4.a0.a0 = -17;
+  a4.a0.a1 = 18;
+  a4.a1.a0 = -19;
+  a4.a1.a1 = 20;
+  a5.a0.a0 = -21;
+  a5.a0.a1 = 22;
+  a5.a1.a0 = -23;
+  a5.a1.a1 = 24;
+  a6.a0.a0 = -25;
+  a6.a0.a1 = 26;
+  a6.a1.a0 = -27;
+  a6.a1.a1 = 28;
+  a7.a0.a0 = -29;
+  a7.a0.a1 = 30;
+  a7.a1.a0 = -31;
+  a7.a1.a1 = 32;
+  a8.a0.a0 = -33;
+  a8.a0.a1 = 34;
+  a8.a1.a0 = -35;
+  a8.a1.a1 = 36;
+  a9.a0.a0 = -37;
+  a9.a0.a1 = 38;
+  a9.a1.a0 = -39;
+  a9.a1.a1 = 40;
+
+  final result =
+      passStruct8BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(20, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat),
+        double Function(
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat,
+            Struct8BytesNestedFloat)>("PassStruct8BytesNestedFloatx10",
+    isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust fpu registers on all platforms.
+void testPassStruct8BytesNestedFloatx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedFloat>();
+  final Struct8BytesNestedFloat a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1.a0 = 2.0;
+  a1.a0.a0 = -3.0;
+  a1.a1.a0 = 4.0;
+  a2.a0.a0 = -5.0;
+  a2.a1.a0 = 6.0;
+  a3.a0.a0 = -7.0;
+  a3.a1.a0 = 8.0;
+  a4.a0.a0 = -9.0;
+  a4.a1.a0 = 10.0;
+  a5.a0.a0 = -11.0;
+  a5.a1.a0 = 12.0;
+  a6.a0.a0 = -13.0;
+  a6.a1.a0 = 14.0;
+  a7.a0.a0 = -15.0;
+  a7.a1.a0 = 16.0;
+  a8.a0.a0 = -17.0;
+  a8.a1.a0 = 18.0;
+  a9.a0.a0 = -19.0;
+  a9.a1.a0 = 20.0;
+
+  final result = passStruct8BytesNestedFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesNestedFloat2x10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2),
+        double Function(
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2,
+            Struct8BytesNestedFloat2)>("PassStruct8BytesNestedFloat2x10",
+    isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust fpu registers on all platforms.
+/// The nesting is irregular, testing homogenous float rules on arm and arm64,
+/// and the fpu register usage on x64.
+void testPassStruct8BytesNestedFloat2x10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedFloat2>();
+  final Struct8BytesNestedFloat2 a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1 = 2.0;
+  a1.a0.a0 = -3.0;
+  a1.a1 = 4.0;
+  a2.a0.a0 = -5.0;
+  a2.a1 = 6.0;
+  a3.a0.a0 = -7.0;
+  a3.a1 = 8.0;
+  a4.a0.a0 = -9.0;
+  a4.a1 = 10.0;
+  a5.a0.a0 = -11.0;
+  a5.a1 = 12.0;
+  a6.a0.a0 = -13.0;
+  a6.a1 = 14.0;
+  a7.a0.a0 = -15.0;
+  a7.a1 = 16.0;
+  a8.a0.a0 = -17.0;
+  a8.a1 = 18.0;
+  a9.a0.a0 = -19.0;
+  a9.a1 = 20.0;
+
+  final result = passStruct8BytesNestedFloat2x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesNestedMixedx10Leaf = ffiTestFunctions.lookupFunction<
+        Double Function(
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed),
+        double Function(
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed,
+            Struct8BytesNestedMixed)>("PassStruct8BytesNestedMixedx10",
+    isLeaf: true);
+
+/// Simple nested struct. No alignment gaps on any architectures.
+/// 10 arguments exhaust all registers on all platforms.
+void testPassStruct8BytesNestedMixedx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesNestedMixed>();
+  final Struct8BytesNestedMixed a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a1.a0 = -3.0;
+  a1.a0.a0 = 4;
+  a1.a0.a1 = -5;
+  a1.a1.a0 = 6.0;
+  a2.a0.a0 = -7;
+  a2.a0.a1 = 8;
+  a2.a1.a0 = -9.0;
+  a3.a0.a0 = 10;
+  a3.a0.a1 = -11;
+  a3.a1.a0 = 12.0;
+  a4.a0.a0 = -13;
+  a4.a0.a1 = 14;
+  a4.a1.a0 = -15.0;
+  a5.a0.a0 = 16;
+  a5.a0.a1 = -17;
+  a5.a1.a0 = 18.0;
+  a6.a0.a0 = -19;
+  a6.a0.a1 = 20;
+  a6.a1.a0 = -21.0;
+  a7.a0.a0 = 22;
+  a7.a0.a1 = -23;
+  a7.a1.a0 = 24.0;
+  a8.a0.a0 = -25;
+  a8.a0.a1 = 26;
+  a8.a1.a0 = -27.0;
+  a9.a0.a0 = 28;
+  a9.a0.a1 = -29;
+  a9.a1.a0 = 30.0;
+
+  final result = passStruct8BytesNestedMixedx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(15.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct16BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(Struct16BytesNestedInt, Struct16BytesNestedInt),
+    int Function(Struct16BytesNestedInt,
+        Struct16BytesNestedInt)>("PassStruct16BytesNestedIntx2", isLeaf: true);
+
+/// Deeper nested struct to test recursive member access.
+void testPassStruct16BytesNestedIntx2Leaf() {
+  final a0Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0.a0 = -1;
+  a0.a0.a0.a1 = 2;
+  a0.a0.a1.a0 = -3;
+  a0.a0.a1.a1 = 4;
+  a0.a1.a0.a0 = -5;
+  a0.a1.a0.a1 = 6;
+  a0.a1.a1.a0 = -7;
+  a0.a1.a1.a1 = 8;
+  a1.a0.a0.a0 = -9;
+  a1.a0.a0.a1 = 10;
+  a1.a0.a1.a0 = -11;
+  a1.a0.a1.a1 = 12;
+  a1.a1.a0.a0 = -13;
+  a1.a1.a0.a1 = 14;
+  a1.a1.a1.a0 = -15;
+  a1.a1.a1.a1 = 16;
+
+  final result = passStruct16BytesNestedIntx2Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(8, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final passStruct32BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(Struct32BytesNestedInt, Struct32BytesNestedInt),
+    int Function(Struct32BytesNestedInt,
+        Struct32BytesNestedInt)>("PassStruct32BytesNestedIntx2", isLeaf: true);
+
+/// Even deeper nested struct to test recursive member access.
+void testPassStruct32BytesNestedIntx2Leaf() {
+  final a0Pointer = calloc<Struct32BytesNestedInt>();
+  final Struct32BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct32BytesNestedInt>();
+  final Struct32BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0.a0.a0 = -1;
+  a0.a0.a0.a0.a1 = 2;
+  a0.a0.a0.a1.a0 = -3;
+  a0.a0.a0.a1.a1 = 4;
+  a0.a0.a1.a0.a0 = -5;
+  a0.a0.a1.a0.a1 = 6;
+  a0.a0.a1.a1.a0 = -7;
+  a0.a0.a1.a1.a1 = 8;
+  a0.a1.a0.a0.a0 = -9;
+  a0.a1.a0.a0.a1 = 10;
+  a0.a1.a0.a1.a0 = -11;
+  a0.a1.a0.a1.a1 = 12;
+  a0.a1.a1.a0.a0 = -13;
+  a0.a1.a1.a0.a1 = 14;
+  a0.a1.a1.a1.a0 = -15;
+  a0.a1.a1.a1.a1 = 16;
+  a1.a0.a0.a0.a0 = -17;
+  a1.a0.a0.a0.a1 = 18;
+  a1.a0.a0.a1.a0 = -19;
+  a1.a0.a0.a1.a1 = 20;
+  a1.a0.a1.a0.a0 = -21;
+  a1.a0.a1.a0.a1 = 22;
+  a1.a0.a1.a1.a0 = -23;
+  a1.a0.a1.a1.a1 = 24;
+  a1.a1.a0.a0.a0 = -25;
+  a1.a1.a0.a0.a1 = 26;
+  a1.a1.a0.a1.a0 = -27;
+  a1.a1.a0.a1.a1 = 28;
+  a1.a1.a1.a0.a0 = -29;
+  a1.a1.a1.a0.a1 = 30;
+  a1.a1.a1.a1.a0 = -31;
+  a1.a1.a1.a1.a1 = 32;
+
+  final result = passStruct32BytesNestedIntx2Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(16, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final passStructNestedIntStructAlignmentInt16Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(StructNestedIntStructAlignmentInt16),
+            int Function(StructNestedIntStructAlignmentInt16)>(
+        "PassStructNestedIntStructAlignmentInt16",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 16 byte int.
+void testPassStructNestedIntStructAlignmentInt16Leaf() {
+  final a0Pointer = calloc<StructNestedIntStructAlignmentInt16>();
+  final StructNestedIntStructAlignmentInt16 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a0.a1.a0 = 4;
+  a0.a1.a1 = -5;
+  a0.a1.a2 = 6;
+
+  final result = passStructNestedIntStructAlignmentInt16Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(3, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedIntStructAlignmentInt32Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(StructNestedIntStructAlignmentInt32),
+            int Function(StructNestedIntStructAlignmentInt32)>(
+        "PassStructNestedIntStructAlignmentInt32",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 32 byte int.
+void testPassStructNestedIntStructAlignmentInt32Leaf() {
+  final a0Pointer = calloc<StructNestedIntStructAlignmentInt32>();
+  final StructNestedIntStructAlignmentInt32 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a0.a1.a0 = 4;
+  a0.a1.a1 = -5;
+  a0.a1.a2 = 6;
+
+  final result = passStructNestedIntStructAlignmentInt32Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(3, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedIntStructAlignmentInt64Leaf =
+    ffiTestFunctions.lookupFunction<
+            Int64 Function(StructNestedIntStructAlignmentInt64),
+            int Function(StructNestedIntStructAlignmentInt64)>(
+        "PassStructNestedIntStructAlignmentInt64",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 64 byte int.
+void testPassStructNestedIntStructAlignmentInt64Leaf() {
+  final a0Pointer = calloc<StructNestedIntStructAlignmentInt64>();
+  final StructNestedIntStructAlignmentInt64 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a0.a1.a0 = 4;
+  a0.a1.a1 = -5;
+  a0.a1.a2 = 6;
+
+  final result = passStructNestedIntStructAlignmentInt64Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(3, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedIrregularEvenBiggerx4Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger),
+            double Function(
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger,
+                StructNestedIrregularEvenBigger)>(
+        "PassStructNestedIrregularEvenBiggerx4",
+        isLeaf: true);
+
+/// Return big irregular struct as smoke test.
+void testPassStructNestedIrregularEvenBiggerx4Leaf() {
+  final a0Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructNestedIrregularEvenBigger>();
+  final StructNestedIrregularEvenBigger a3 = a3Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1.a0.a0 = 2;
+  a0.a1.a0.a1.a0.a0 = -3;
+  a0.a1.a0.a1.a0.a1 = 4;
+  a0.a1.a0.a1.a1.a0 = -5.0;
+  a0.a1.a0.a2 = 6;
+  a0.a1.a0.a3.a0.a0 = -7.0;
+  a0.a1.a0.a3.a1 = 8.0;
+  a0.a1.a0.a4 = 9;
+  a0.a1.a0.a5.a0.a0 = 10.0;
+  a0.a1.a0.a5.a1.a0 = -11.0;
+  a0.a1.a0.a6 = 12;
+  a0.a1.a1.a0.a0 = -13;
+  a0.a1.a1.a0.a1 = 14;
+  a0.a1.a1.a1.a0 = -15.0;
+  a0.a1.a2 = 16.0;
+  a0.a1.a3 = -17.0;
+  a0.a2.a0.a0 = 18;
+  a0.a2.a0.a1.a0.a0 = -19;
+  a0.a2.a0.a1.a0.a1 = 20;
+  a0.a2.a0.a1.a1.a0 = -21.0;
+  a0.a2.a0.a2 = 22;
+  a0.a2.a0.a3.a0.a0 = -23.0;
+  a0.a2.a0.a3.a1 = 24.0;
+  a0.a2.a0.a4 = 25;
+  a0.a2.a0.a5.a0.a0 = 26.0;
+  a0.a2.a0.a5.a1.a0 = -27.0;
+  a0.a2.a0.a6 = 28;
+  a0.a2.a1.a0.a0 = -29;
+  a0.a2.a1.a0.a1 = 30;
+  a0.a2.a1.a1.a0 = -31.0;
+  a0.a2.a2 = 32.0;
+  a0.a2.a3 = -33.0;
+  a0.a3 = 34.0;
+  a1.a0 = 35;
+  a1.a1.a0.a0 = 36;
+  a1.a1.a0.a1.a0.a0 = -37;
+  a1.a1.a0.a1.a0.a1 = 38;
+  a1.a1.a0.a1.a1.a0 = -39.0;
+  a1.a1.a0.a2 = 40;
+  a1.a1.a0.a3.a0.a0 = -41.0;
+  a1.a1.a0.a3.a1 = 42.0;
+  a1.a1.a0.a4 = 43;
+  a1.a1.a0.a5.a0.a0 = 44.0;
+  a1.a1.a0.a5.a1.a0 = -45.0;
+  a1.a1.a0.a6 = 46;
+  a1.a1.a1.a0.a0 = -47;
+  a1.a1.a1.a0.a1 = 48;
+  a1.a1.a1.a1.a0 = -49.0;
+  a1.a1.a2 = 50.0;
+  a1.a1.a3 = -51.0;
+  a1.a2.a0.a0 = 52;
+  a1.a2.a0.a1.a0.a0 = -53;
+  a1.a2.a0.a1.a0.a1 = 54;
+  a1.a2.a0.a1.a1.a0 = -55.0;
+  a1.a2.a0.a2 = 56;
+  a1.a2.a0.a3.a0.a0 = -57.0;
+  a1.a2.a0.a3.a1 = 58.0;
+  a1.a2.a0.a4 = 59;
+  a1.a2.a0.a5.a0.a0 = 60.0;
+  a1.a2.a0.a5.a1.a0 = -61.0;
+  a1.a2.a0.a6 = 62;
+  a1.a2.a1.a0.a0 = -63;
+  a1.a2.a1.a0.a1 = 64;
+  a1.a2.a1.a1.a0 = -65.0;
+  a1.a2.a2 = 66.0;
+  a1.a2.a3 = -67.0;
+  a1.a3 = 68.0;
+  a2.a0 = 69;
+  a2.a1.a0.a0 = 70;
+  a2.a1.a0.a1.a0.a0 = -71;
+  a2.a1.a0.a1.a0.a1 = 72;
+  a2.a1.a0.a1.a1.a0 = -73.0;
+  a2.a1.a0.a2 = 74;
+  a2.a1.a0.a3.a0.a0 = -75.0;
+  a2.a1.a0.a3.a1 = 76.0;
+  a2.a1.a0.a4 = 77;
+  a2.a1.a0.a5.a0.a0 = 78.0;
+  a2.a1.a0.a5.a1.a0 = -79.0;
+  a2.a1.a0.a6 = 80;
+  a2.a1.a1.a0.a0 = -81;
+  a2.a1.a1.a0.a1 = 82;
+  a2.a1.a1.a1.a0 = -83.0;
+  a2.a1.a2 = 84.0;
+  a2.a1.a3 = -85.0;
+  a2.a2.a0.a0 = 86;
+  a2.a2.a0.a1.a0.a0 = -87;
+  a2.a2.a0.a1.a0.a1 = 88;
+  a2.a2.a0.a1.a1.a0 = -89.0;
+  a2.a2.a0.a2 = 90;
+  a2.a2.a0.a3.a0.a0 = -91.0;
+  a2.a2.a0.a3.a1 = 92.0;
+  a2.a2.a0.a4 = 93;
+  a2.a2.a0.a5.a0.a0 = 94.0;
+  a2.a2.a0.a5.a1.a0 = -95.0;
+  a2.a2.a0.a6 = 96;
+  a2.a2.a1.a0.a0 = -97;
+  a2.a2.a1.a0.a1 = 98;
+  a2.a2.a1.a1.a0 = -99.0;
+  a2.a2.a2 = 100.0;
+  a2.a2.a3 = -101.0;
+  a2.a3 = 102.0;
+  a3.a0 = 103;
+  a3.a1.a0.a0 = 104;
+  a3.a1.a0.a1.a0.a0 = -105;
+  a3.a1.a0.a1.a0.a1 = 106;
+  a3.a1.a0.a1.a1.a0 = -107.0;
+  a3.a1.a0.a2 = 108;
+  a3.a1.a0.a3.a0.a0 = -109.0;
+  a3.a1.a0.a3.a1 = 110.0;
+  a3.a1.a0.a4 = 111;
+  a3.a1.a0.a5.a0.a0 = 112.0;
+  a3.a1.a0.a5.a1.a0 = -113.0;
+  a3.a1.a0.a6 = 114;
+  a3.a1.a1.a0.a0 = -115;
+  a3.a1.a1.a0.a1 = 116;
+  a3.a1.a1.a1.a0 = -117.0;
+  a3.a1.a2 = 118.0;
+  a3.a1.a3 = -119.0;
+  a3.a2.a0.a0 = 120;
+  a3.a2.a0.a1.a0.a0 = -121;
+  a3.a2.a0.a1.a0.a1 = 122;
+  a3.a2.a0.a1.a1.a0 = -123.0;
+  a3.a2.a0.a2 = 124;
+  a3.a2.a0.a3.a0.a0 = -125.0;
+  a3.a2.a0.a3.a1 = 126.0;
+  a3.a2.a0.a4 = 127;
+  a3.a2.a0.a5.a0.a0 = 128.0;
+  a3.a2.a0.a5.a1.a0 = -129.0;
+  a3.a2.a0.a6 = 130;
+  a3.a2.a1.a0.a0 = -131;
+  a3.a2.a1.a0.a1 = 132;
+  a3.a2.a1.a1.a0 = -133.0;
+  a3.a2.a2 = 134.0;
+  a3.a2.a3 = -135.0;
+  a3.a3 = 136.0;
+
+  final result = passStructNestedIrregularEvenBiggerx4Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(1572.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+}
+
+final passStruct8BytesInlineArrayIntx4Leaf = ffiTestFunctions.lookupFunction<
+        Int32 Function(Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt),
+        int Function(
+            Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt,
+            Struct8BytesInlineArrayInt)>("PassStruct8BytesInlineArrayIntx4",
+    isLeaf: true);
+
+/// Simple struct with inline array.
+void testPassStruct8BytesInlineArrayIntx4Leaf() {
+  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a3 = a3Pointer.ref;
+
+  a0.a0[0] = 1;
+  a0.a0[1] = 2;
+  a0.a0[2] = 3;
+  a0.a0[3] = 4;
+  a0.a0[4] = 5;
+  a0.a0[5] = 6;
+  a0.a0[6] = 7;
+  a0.a0[7] = 8;
+  a1.a0[0] = 9;
+  a1.a0[1] = 10;
+  a1.a0[2] = 11;
+  a1.a0[3] = 12;
+  a1.a0[4] = 13;
+  a1.a0[5] = 14;
+  a1.a0[6] = 15;
+  a1.a0[7] = 16;
+  a2.a0[0] = 17;
+  a2.a0[1] = 18;
+  a2.a0[2] = 19;
+  a2.a0[3] = 20;
+  a2.a0[4] = 21;
+  a2.a0[5] = 22;
+  a2.a0[6] = 23;
+  a2.a0[7] = 24;
+  a3.a0[0] = 25;
+  a3.a0[1] = 26;
+  a3.a0[2] = 27;
+  a3.a0[3] = 28;
+  a3.a0[4] = 29;
+  a3.a0[5] = 30;
+  a3.a0[6] = 31;
+  a3.a0[7] = 32;
+
+  final result = passStruct8BytesInlineArrayIntx4Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.equals(528, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+}
+
+final passStructInlineArrayIrregularx4Leaf = ffiTestFunctions.lookupFunction<
+        Int32 Function(StructInlineArrayIrregular, StructInlineArrayIrregular,
+            StructInlineArrayIrregular, StructInlineArrayIrregular),
+        int Function(
+            StructInlineArrayIrregular,
+            StructInlineArrayIrregular,
+            StructInlineArrayIrregular,
+            StructInlineArrayIrregular)>("PassStructInlineArrayIrregularx4",
+    isLeaf: true);
+
+/// Irregular struct with inline array.
+void testPassStructInlineArrayIrregularx4Leaf() {
+  final a0Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructInlineArrayIrregular>();
+  final StructInlineArrayIrregular a3 = a3Pointer.ref;
+
+  a0.a0[0].a0 = -1;
+  a0.a0[0].a1 = 2;
+  a0.a0[1].a0 = -3;
+  a0.a0[1].a1 = 4;
+  a0.a1 = 5;
+  a1.a0[0].a0 = 6;
+  a1.a0[0].a1 = -7;
+  a1.a0[1].a0 = 8;
+  a1.a0[1].a1 = -9;
+  a1.a1 = 10;
+  a2.a0[0].a0 = -11;
+  a2.a0[0].a1 = 12;
+  a2.a0[1].a0 = -13;
+  a2.a0[1].a1 = 14;
+  a2.a1 = 15;
+  a3.a0[0].a0 = 16;
+  a3.a0[0].a1 = -17;
+  a3.a0[1].a0 = 18;
+  a3.a0[1].a1 = -19;
+  a3.a1 = 20;
+
+  final result = passStructInlineArrayIrregularx4Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.equals(50, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+}
+
+final passStructInlineArray100BytesLeaf = ffiTestFunctions.lookupFunction<
+        Int32 Function(StructInlineArray100Bytes),
+        int Function(StructInlineArray100Bytes)>(
+    "PassStructInlineArray100Bytes",
+    isLeaf: true);
+
+/// Regular larger struct with inline array.
+void testPassStructInlineArray100BytesLeaf() {
+  final a0Pointer = calloc<StructInlineArray100Bytes>();
+  final StructInlineArray100Bytes a0 = a0Pointer.ref;
+
+  a0.a0[0] = 1;
+  a0.a0[1] = 2;
+  a0.a0[2] = 3;
+  a0.a0[3] = 4;
+  a0.a0[4] = 5;
+  a0.a0[5] = 6;
+  a0.a0[6] = 7;
+  a0.a0[7] = 8;
+  a0.a0[8] = 9;
+  a0.a0[9] = 10;
+  a0.a0[10] = 11;
+  a0.a0[11] = 12;
+  a0.a0[12] = 13;
+  a0.a0[13] = 14;
+  a0.a0[14] = 15;
+  a0.a0[15] = 16;
+  a0.a0[16] = 17;
+  a0.a0[17] = 18;
+  a0.a0[18] = 19;
+  a0.a0[19] = 20;
+  a0.a0[20] = 21;
+  a0.a0[21] = 22;
+  a0.a0[22] = 23;
+  a0.a0[23] = 24;
+  a0.a0[24] = 25;
+  a0.a0[25] = 26;
+  a0.a0[26] = 27;
+  a0.a0[27] = 28;
+  a0.a0[28] = 29;
+  a0.a0[29] = 30;
+  a0.a0[30] = 31;
+  a0.a0[31] = 32;
+  a0.a0[32] = 33;
+  a0.a0[33] = 34;
+  a0.a0[34] = 35;
+  a0.a0[35] = 36;
+  a0.a0[36] = 37;
+  a0.a0[37] = 38;
+  a0.a0[38] = 39;
+  a0.a0[39] = 40;
+  a0.a0[40] = 41;
+  a0.a0[41] = 42;
+  a0.a0[42] = 43;
+  a0.a0[43] = 44;
+  a0.a0[44] = 45;
+  a0.a0[45] = 46;
+  a0.a0[46] = 47;
+  a0.a0[47] = 48;
+  a0.a0[48] = 49;
+  a0.a0[49] = 50;
+  a0.a0[50] = 51;
+  a0.a0[51] = 52;
+  a0.a0[52] = 53;
+  a0.a0[53] = 54;
+  a0.a0[54] = 55;
+  a0.a0[55] = 56;
+  a0.a0[56] = 57;
+  a0.a0[57] = 58;
+  a0.a0[58] = 59;
+  a0.a0[59] = 60;
+  a0.a0[60] = 61;
+  a0.a0[61] = 62;
+  a0.a0[62] = 63;
+  a0.a0[63] = 64;
+  a0.a0[64] = 65;
+  a0.a0[65] = 66;
+  a0.a0[66] = 67;
+  a0.a0[67] = 68;
+  a0.a0[68] = 69;
+  a0.a0[69] = 70;
+  a0.a0[70] = 71;
+  a0.a0[71] = 72;
+  a0.a0[72] = 73;
+  a0.a0[73] = 74;
+  a0.a0[74] = 75;
+  a0.a0[75] = 76;
+  a0.a0[76] = 77;
+  a0.a0[77] = 78;
+  a0.a0[78] = 79;
+  a0.a0[79] = 80;
+  a0.a0[80] = 81;
+  a0.a0[81] = 82;
+  a0.a0[82] = 83;
+  a0.a0[83] = 84;
+  a0.a0[84] = 85;
+  a0.a0[85] = 86;
+  a0.a0[86] = 87;
+  a0.a0[87] = 88;
+  a0.a0[88] = 89;
+  a0.a0[89] = 90;
+  a0.a0[90] = 91;
+  a0.a0[91] = 92;
+  a0.a0[92] = 93;
+  a0.a0[93] = 94;
+  a0.a0[94] = 95;
+  a0.a0[95] = 96;
+  a0.a0[96] = 97;
+  a0.a0[97] = 98;
+  a0.a0[98] = 99;
+  a0.a0[99] = 100;
+
+  final result = passStructInlineArray100BytesLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(5050, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructStruct16BytesHomogeneousFloat2x5Leaf =
+    ffiTestFunctions.lookupFunction<
+            Float Function(
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2),
+            double Function(
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2,
+                StructStruct16BytesHomogeneousFloat2)>(
+        "PassStructStruct16BytesHomogeneousFloat2x5",
+        isLeaf: true);
+
+/// Arguments in FPU registers on arm hardfp and arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStructStruct16BytesHomogeneousFloat2x5Leaf() {
+  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a4 = a4Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+  a1.a0.a0 = -5.0;
+  a1.a1[0].a0 = 6.0;
+  a1.a1[1].a0 = -7.0;
+  a1.a2 = 8.0;
+  a2.a0.a0 = -9.0;
+  a2.a1[0].a0 = 10.0;
+  a2.a1[1].a0 = -11.0;
+  a2.a2 = 12.0;
+  a3.a0.a0 = -13.0;
+  a3.a1[0].a0 = 14.0;
+  a3.a1[1].a0 = -15.0;
+  a3.a2 = 16.0;
+  a4.a0.a0 = -17.0;
+  a4.a1[0].a0 = 18.0;
+  a4.a1[1].a0 = -19.0;
+  a4.a2 = 20.0;
+
+  final result =
+      passStructStruct16BytesHomogeneousFloat2x5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStructStruct32BytesHomogeneousDouble2x5Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2),
+            double Function(
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2,
+                StructStruct32BytesHomogeneousDouble2)>(
+        "PassStructStruct32BytesHomogeneousDouble2x5",
+        isLeaf: true);
+
+/// Arguments in FPU registers on arm64.
+/// 5 struct arguments will exhaust available registers.
+void testPassStructStruct32BytesHomogeneousDouble2x5Leaf() {
+  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a4 = a4Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+  a1.a0.a0 = -5.0;
+  a1.a1[0].a0 = 6.0;
+  a1.a1[1].a0 = -7.0;
+  a1.a2 = 8.0;
+  a2.a0.a0 = -9.0;
+  a2.a1[0].a0 = 10.0;
+  a2.a1[1].a0 = -11.0;
+  a2.a2 = 12.0;
+  a3.a0.a0 = -13.0;
+  a3.a1[0].a0 = 14.0;
+  a3.a1[1].a0 = -15.0;
+  a3.a2 = 16.0;
+  a4.a0.a0 = -17.0;
+  a4.a1[0].a0 = 18.0;
+  a4.a1[1].a0 = -19.0;
+  a4.a2 = 20.0;
+
+  final result =
+      passStructStruct32BytesHomogeneousDouble2x5Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+}
+
+final passStructStruct16BytesMixed3x10Leaf = ffiTestFunctions.lookupFunction<
+        Float Function(
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3),
+        double Function(
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3,
+            StructStruct16BytesMixed3)>("PassStructStruct16BytesMixed3x10",
+    isLeaf: true);
+
+/// On x64, arguments are split over FP and int registers.
+/// On x64, it will exhaust the integer registers with the 6th argument.
+/// The rest goes on the stack.
+/// On arm, arguments are 4 byte aligned.
+void testPassStructStruct16BytesMixed3x10Leaf() {
+  final a0Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a2 = a2Pointer.ref;
+  final a3Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a3 = a3Pointer.ref;
+  final a4Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a4 = a4Pointer.ref;
+  final a5Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a5 = a5Pointer.ref;
+  final a6Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a6 = a6Pointer.ref;
+  final a7Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a7 = a7Pointer.ref;
+  final a8Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a8 = a8Pointer.ref;
+  final a9Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[0].a1 = -3;
+  a0.a1[0].a2 = 4;
+  a0.a2[0] = -5;
+  a0.a2[1] = 6;
+  a1.a0.a0 = -7.0;
+  a1.a1[0].a0 = 8.0;
+  a1.a1[0].a1 = -9;
+  a1.a1[0].a2 = 10;
+  a1.a2[0] = -11;
+  a1.a2[1] = 12;
+  a2.a0.a0 = -13.0;
+  a2.a1[0].a0 = 14.0;
+  a2.a1[0].a1 = -15;
+  a2.a1[0].a2 = 16;
+  a2.a2[0] = -17;
+  a2.a2[1] = 18;
+  a3.a0.a0 = -19.0;
+  a3.a1[0].a0 = 20.0;
+  a3.a1[0].a1 = -21;
+  a3.a1[0].a2 = 22;
+  a3.a2[0] = -23;
+  a3.a2[1] = 24;
+  a4.a0.a0 = -25.0;
+  a4.a1[0].a0 = 26.0;
+  a4.a1[0].a1 = -27;
+  a4.a1[0].a2 = 28;
+  a4.a2[0] = -29;
+  a4.a2[1] = 30;
+  a5.a0.a0 = -31.0;
+  a5.a1[0].a0 = 32.0;
+  a5.a1[0].a1 = -33;
+  a5.a1[0].a2 = 34;
+  a5.a2[0] = -35;
+  a5.a2[1] = 36;
+  a6.a0.a0 = -37.0;
+  a6.a1[0].a0 = 38.0;
+  a6.a1[0].a1 = -39;
+  a6.a1[0].a2 = 40;
+  a6.a2[0] = -41;
+  a6.a2[1] = 42;
+  a7.a0.a0 = -43.0;
+  a7.a1[0].a0 = 44.0;
+  a7.a1[0].a1 = -45;
+  a7.a1[0].a2 = 46;
+  a7.a2[0] = -47;
+  a7.a2[1] = 48;
+  a8.a0.a0 = -49.0;
+  a8.a1[0].a0 = 50.0;
+  a8.a1[0].a1 = -51;
+  a8.a1[0].a2 = 52;
+  a8.a2[0] = -53;
+  a8.a2[1] = 54;
+  a9.a0.a0 = -55.0;
+  a9.a1[0].a0 = 56.0;
+  a9.a1[0].a1 = -57;
+  a9.a1[0].a2 = 58;
+  a9.a2[0] = -59;
+  a9.a2[1] = 60;
+
+  final result = passStructStruct16BytesMixed3x10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(30.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUint8Struct32BytesInlineArrayMultiDimensionalILeaf =
+    ffiTestFunctions.lookupFunction<
+            Uint32 Function(
+                Uint8,
+                Struct32BytesInlineArrayMultiDimensionalInt,
+                Uint8,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                Uint8,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                Uint8),
+            int Function(
+                int,
+                Struct32BytesInlineArrayMultiDimensionalInt,
+                int,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                int,
+                Struct8BytesInlineArrayMultiDimensionalInt,
+                int)>("PassUint8Struct32BytesInlineArrayMultiDimensionalI",
+        isLeaf: true);
+
+/// Test multi dimensional inline array struct as argument.
+void testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf() {
+  int a0;
+  final a1Pointer = calloc<Struct32BytesInlineArrayMultiDimensionalInt>();
+  final Struct32BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
+  int a2;
+  final a3Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
+  final Struct8BytesInlineArrayMultiDimensionalInt a3 = a3Pointer.ref;
+  int a4;
+  final a5Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
+  final Struct8BytesInlineArrayMultiDimensionalInt a5 = a5Pointer.ref;
+  int a6;
+
+  a0 = 1;
+  a1.a0[0][0][0][0][0] = 2;
+  a1.a0[0][0][0][0][1] = 3;
+  a1.a0[0][0][0][1][0] = 4;
+  a1.a0[0][0][0][1][1] = 5;
+  a1.a0[0][0][1][0][0] = 6;
+  a1.a0[0][0][1][0][1] = 7;
+  a1.a0[0][0][1][1][0] = 8;
+  a1.a0[0][0][1][1][1] = 9;
+  a1.a0[0][1][0][0][0] = 10;
+  a1.a0[0][1][0][0][1] = 11;
+  a1.a0[0][1][0][1][0] = 12;
+  a1.a0[0][1][0][1][1] = 13;
+  a1.a0[0][1][1][0][0] = 14;
+  a1.a0[0][1][1][0][1] = 15;
+  a1.a0[0][1][1][1][0] = 16;
+  a1.a0[0][1][1][1][1] = 17;
+  a1.a0[1][0][0][0][0] = 18;
+  a1.a0[1][0][0][0][1] = 19;
+  a1.a0[1][0][0][1][0] = 20;
+  a1.a0[1][0][0][1][1] = 21;
+  a1.a0[1][0][1][0][0] = 22;
+  a1.a0[1][0][1][0][1] = 23;
+  a1.a0[1][0][1][1][0] = 24;
+  a1.a0[1][0][1][1][1] = 25;
+  a1.a0[1][1][0][0][0] = 26;
+  a1.a0[1][1][0][0][1] = 27;
+  a1.a0[1][1][0][1][0] = 28;
+  a1.a0[1][1][0][1][1] = 29;
+  a1.a0[1][1][1][0][0] = 30;
+  a1.a0[1][1][1][0][1] = 31;
+  a1.a0[1][1][1][1][0] = 32;
+  a1.a0[1][1][1][1][1] = 33;
+  a2 = 34;
+  a3.a0[0][0][0] = 35;
+  a3.a0[0][0][1] = 36;
+  a3.a0[0][1][0] = 37;
+  a3.a0[0][1][1] = 38;
+  a3.a0[1][0][0] = 39;
+  a3.a0[1][0][1] = 40;
+  a3.a0[1][1][0] = 41;
+  a3.a0[1][1][1] = 42;
+  a4 = 43;
+  a5.a0[0][0][0] = 44;
+  a5.a0[0][0][1] = 45;
+  a5.a0[0][1][0] = 46;
+  a5.a0[0][1][1] = 47;
+  a5.a0[1][0][0] = 48;
+  a5.a0[1][0][1] = 49;
+  a5.a0[1][1][0] = 50;
+  a5.a0[1][1][1] = 51;
+  a6 = 52;
+
+  final result = passUint8Struct32BytesInlineArrayMultiDimensionalILeaf(
+      a0, a1, a2, a3, a4, a5, a6);
+
+  print("result = $result");
+
+  Expect.equals(1378, result);
+
+  calloc.free(a1Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a5Pointer);
+}
+
+final passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf =
+    ffiTestFunctions.lookupFunction<
+            Uint32 Function(
+                Uint8, Struct4BytesInlineArrayMultiDimensionalInt, Uint8),
+            int Function(int, Struct4BytesInlineArrayMultiDimensionalInt, int)>(
+        "PassUint8Struct4BytesInlineArrayMultiDimensionalIn",
+        isLeaf: true);
+
+/// Test struct in multi dimensional inline array.
+void testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf() {
+  int a0;
+  final a1Pointer = calloc<Struct4BytesInlineArrayMultiDimensionalInt>();
+  final Struct4BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
+  int a2;
+
+  a0 = 1;
+  a1.a0[0][0].a0 = 2;
+  a1.a0[0][1].a0 = -3;
+  a1.a0[1][0].a0 = 4;
+  a1.a0[1][1].a0 = -5;
+  a2 = 6;
+
+  final result =
+      passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(5, result);
+
+  calloc.free(a1Pointer);
+}
+
+final passStruct3BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt),
+    int Function(
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt,
+        Struct3BytesPackedInt)>("PassStruct3BytesPackedIntx10", isLeaf: true);
+
+/// Small struct with mis-aligned member.
+void testPassStruct3BytesPackedIntx10Leaf() {
+  final a0Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct3BytesPackedInt>();
+  final Struct3BytesPackedInt a9 = a9Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+  a2.a0 = -5;
+  a2.a1 = 6;
+  a3.a0 = -7;
+  a3.a1 = 8;
+  a4.a0 = -9;
+  a4.a1 = 10;
+  a5.a0 = -11;
+  a5.a1 = 12;
+  a6.a0 = -13;
+  a6.a1 = 14;
+  a7.a0 = -15;
+  a7.a1 = 16;
+  a8.a0 = -17;
+  a8.a1 = 18;
+  a9.a0 = -19;
+  a9.a1 = 20;
+
+  final result =
+      passStruct3BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(10, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct8BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Int64 Function(
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt),
+    int Function(
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt,
+        Struct8BytesPackedInt)>("PassStruct8BytesPackedIntx10", isLeaf: true);
+
+/// Struct with mis-aligned member.
+void testPassStruct8BytesPackedIntx10Leaf() {
+  final a0Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct8BytesPackedInt>();
+  final Struct8BytesPackedInt a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1 = 2;
+  a0.a2 = 3;
+  a0.a3 = 4;
+  a0.a4 = 5;
+  a1.a0 = 6;
+  a1.a1 = 7;
+  a1.a2 = 8;
+  a1.a3 = 9;
+  a1.a4 = 10;
+  a2.a0 = 11;
+  a2.a1 = 12;
+  a2.a2 = 13;
+  a2.a3 = 14;
+  a2.a4 = 15;
+  a3.a0 = 16;
+  a3.a1 = 17;
+  a3.a2 = 18;
+  a3.a3 = 19;
+  a3.a4 = 20;
+  a4.a0 = 21;
+  a4.a1 = 22;
+  a4.a2 = 23;
+  a4.a3 = 24;
+  a4.a4 = 25;
+  a5.a0 = 26;
+  a5.a1 = 27;
+  a5.a2 = 28;
+  a5.a3 = 29;
+  a5.a4 = 30;
+  a6.a0 = 31;
+  a6.a1 = 32;
+  a6.a2 = 33;
+  a6.a3 = 34;
+  a6.a4 = 35;
+  a7.a0 = 36;
+  a7.a1 = 37;
+  a7.a2 = 38;
+  a7.a3 = 39;
+  a7.a4 = 40;
+  a8.a0 = 41;
+  a8.a1 = 42;
+  a8.a2 = 43;
+  a8.a3 = 44;
+  a8.a4 = 45;
+  a9.a0 = 46;
+  a9.a1 = 47;
+  a9.a2 = 48;
+  a9.a3 = 49;
+  a9.a4 = 50;
+
+  final result =
+      passStruct8BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.equals(1275, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct9BytesPackedMixedx10DoubleInt32x2Leaf =
+    ffiTestFunctions.lookupFunction<
+        Double Function(
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Double,
+            Int32,
+            Int32),
+        double Function(
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            Struct9BytesPackedMixed,
+            double,
+            int,
+            int)>("PassStruct9BytesPackedMixedx10DoubleInt32x2", isLeaf: true);
+
+/// Struct with mis-aligned member.
+/// Tests backfilling of CPU and FPU registers.
+void testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf() {
+  final a0Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Struct9BytesPackedMixed>();
+  final Struct9BytesPackedMixed a9 = a9Pointer.ref;
+  double a10;
+  int a11;
+  int a12;
+
+  a0.a0 = 1;
+  a0.a1 = 2.0;
+  a1.a0 = 3;
+  a1.a1 = 4.0;
+  a2.a0 = 5;
+  a2.a1 = 6.0;
+  a3.a0 = 7;
+  a3.a1 = 8.0;
+  a4.a0 = 9;
+  a4.a1 = 10.0;
+  a5.a0 = 11;
+  a5.a1 = 12.0;
+  a6.a0 = 13;
+  a6.a1 = 14.0;
+  a7.a0 = 15;
+  a7.a1 = 16.0;
+  a8.a0 = 17;
+  a8.a1 = 18.0;
+  a9.a0 = 19;
+  a9.a1 = 20.0;
+  a10 = -21.0;
+  a11 = 22;
+  a12 = -23;
+
+  final result = passStruct9BytesPackedMixedx10DoubleInt32x2Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
+
+  print("result = $result");
+
+  Expect.approxEquals(188.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passStruct5BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
+    Double Function(Struct5BytesPackedMixed),
+    double Function(
+        Struct5BytesPackedMixed)>("PassStruct5BytesPackedMixed", isLeaf: true);
+
+/// This packed struct happens to have only aligned members.
+void testPassStruct5BytesPackedMixedLeaf() {
+  final a0Pointer = calloc<Struct5BytesPackedMixed>();
+  final Struct5BytesPackedMixed a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2;
+
+  final result = passStruct5BytesPackedMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(1.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStructNestedAlignmentStruct5BytesPackedMixedLeaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(StructNestedAlignmentStruct5BytesPackedMixed),
+            double Function(StructNestedAlignmentStruct5BytesPackedMixed)>(
+        "PassStructNestedAlignmentStruct5BytesPackedMixed",
+        isLeaf: true);
+
+/// Check alignment of packed struct in non-packed struct.
+void testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf() {
+  final a0Pointer = calloc<StructNestedAlignmentStruct5BytesPackedMixed>();
+  final StructNestedAlignmentStruct5BytesPackedMixed a0 = a0Pointer.ref;
+
+  a0.a0 = 1;
+  a0.a1.a0 = 2.0;
+  a0.a1.a1 = 3;
+
+  final result = passStructNestedAlignmentStruct5BytesPackedMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(6.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct6BytesInlineArrayIntLeaf = ffiTestFunctions.lookupFunction<
+        Double Function(Struct6BytesInlineArrayInt),
+        double Function(Struct6BytesInlineArrayInt)>(
+    "PassStruct6BytesInlineArrayInt",
+    isLeaf: true);
+
+/// Check alignment of packed struct array in non-packed struct.
+void testPassStruct6BytesInlineArrayIntLeaf() {
+  final a0Pointer = calloc<Struct6BytesInlineArrayInt>();
+  final Struct6BytesInlineArrayInt a0 = a0Pointer.ref;
+
+  a0.a0[0].a0 = -1;
+  a0.a0[0].a1 = 2;
+  a0.a0[1].a0 = -3;
+  a0.a0[1].a1 = 4;
+
+  final result = passStruct6BytesInlineArrayIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(2.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passStruct15BytesInlineArrayMixedLeaf = ffiTestFunctions.lookupFunction<
+        Double Function(Struct15BytesInlineArrayMixed),
+        double Function(Struct15BytesInlineArrayMixed)>(
+    "PassStruct15BytesInlineArrayMixed",
+    isLeaf: true);
+
+/// Check alignment of packed struct array in non-packed struct.
+void testPassStruct15BytesInlineArrayMixedLeaf() {
+  final a0Pointer = calloc<Struct15BytesInlineArrayMixed>();
+  final Struct15BytesInlineArrayMixed a0 = a0Pointer.ref;
+
+  a0.a0[0].a0 = -1.0;
+  a0.a0[0].a1 = 2;
+  a0.a0[1].a0 = -3.0;
+  a0.a0[1].a1 = 4;
+  a0.a0[2].a0 = -5.0;
+  a0.a0[2].a1 = 6;
+
+  final result = passStruct15BytesInlineArrayMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(3.0, result);
+
+  calloc.free(a0Pointer);
+}
+
+final passUnion4BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed),
+    double Function(
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed,
+        Union4BytesMixed)>("PassUnion4BytesMixedx10", isLeaf: true);
+
+/// Check placement of mixed integer/float union.
+void testPassUnion4BytesMixedx10Leaf() {
+  final a0Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union4BytesMixed>();
+  final Union4BytesMixed a9 = a9Pointer.ref;
+
+  a0.a0 = 1;
+  a1.a0 = 2;
+  a2.a0 = 3;
+  a3.a0 = 4;
+  a4.a0 = 5;
+  a5.a0 = 6;
+  a6.a0 = 7;
+  a7.a0 = 8;
+  a8.a0 = 9;
+  a9.a0 = 10;
+
+  final result =
+      passUnion4BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(55.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat),
+    double Function(
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat,
+        Union8BytesNestedFloat)>("PassUnion8BytesNestedFloatx10", isLeaf: true);
+
+/// Check placement of mixed floats union.
+void testPassUnion8BytesNestedFloatx10Leaf() {
+  final a0Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union8BytesNestedFloat>();
+  final Union8BytesNestedFloat a9 = a9Pointer.ref;
+
+  a0.a0 = -1.0;
+  a1.a0 = 2.0;
+  a2.a0 = -3.0;
+  a3.a0 = 4.0;
+  a4.a0 = -5.0;
+  a5.a0 = 6.0;
+  a6.a0 = -7.0;
+  a7.a0 = 8.0;
+  a8.a0 = -9.0;
+  a9.a0 = 10.0;
+
+  final result =
+      passUnion8BytesNestedFloatx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(5.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion9BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
+    Double Function(
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt),
+    double Function(
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt,
+        Union9BytesNestedInt)>("PassUnion9BytesNestedIntx10", isLeaf: true);
+
+/// Mixed-size union argument.
+void testPassUnion9BytesNestedIntx10Leaf() {
+  final a0Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union9BytesNestedInt>();
+  final Union9BytesNestedInt a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a0.a2 = -3;
+  a1.a0.a0 = 4;
+  a1.a0.a1 = -5;
+  a1.a0.a2 = 6;
+  a2.a0.a0 = -7;
+  a2.a0.a1 = 8;
+  a2.a0.a2 = -9;
+  a3.a0.a0 = 10;
+  a3.a0.a1 = -11;
+  a3.a0.a2 = 12;
+  a4.a0.a0 = -13;
+  a4.a0.a1 = 14;
+  a4.a0.a2 = -15;
+  a5.a0.a0 = 16;
+  a5.a0.a1 = -17;
+  a5.a0.a2 = 18;
+  a6.a0.a0 = -19;
+  a6.a0.a1 = 20;
+  a6.a0.a2 = -21;
+  a7.a0.a0 = 22;
+  a7.a0.a1 = -23;
+  a7.a0.a2 = 24;
+  a8.a0.a0 = -25;
+  a8.a0.a1 = 26;
+  a8.a0.a2 = -27;
+  a9.a0.a0 = 28;
+  a9.a0.a1 = -29;
+  a9.a0.a2 = 30;
+
+  final result =
+      passUnion9BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(15.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion16BytesNestedInlineArrayFloatx10Leaf =
+    ffiTestFunctions.lookupFunction<
+            Double Function(
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat),
+            double Function(
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat,
+                Union16BytesNestedInlineArrayFloat)>(
+        "PassUnion16BytesNestedInlineArrayFloatx10",
+        isLeaf: true);
+
+/// Union with homogenous floats.
+void testPassUnion16BytesNestedInlineArrayFloatx10Leaf() {
+  final a0Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
+  final Union16BytesNestedInlineArrayFloat a9 = a9Pointer.ref;
+
+  a0.a0[0] = -1.0;
+  a0.a0[1] = 2.0;
+  a0.a0[2] = -3.0;
+  a0.a0[3] = 4.0;
+  a1.a0[0] = -5.0;
+  a1.a0[1] = 6.0;
+  a1.a0[2] = -7.0;
+  a1.a0[3] = 8.0;
+  a2.a0[0] = -9.0;
+  a2.a0[1] = 10.0;
+  a2.a0[2] = -11.0;
+  a2.a0[3] = 12.0;
+  a3.a0[0] = -13.0;
+  a3.a0[1] = 14.0;
+  a3.a0[2] = -15.0;
+  a3.a0[3] = 16.0;
+  a4.a0[0] = -17.0;
+  a4.a0[1] = 18.0;
+  a4.a0[2] = -19.0;
+  a4.a0[3] = 20.0;
+  a5.a0[0] = -21.0;
+  a5.a0[1] = 22.0;
+  a5.a0[2] = -23.0;
+  a5.a0[3] = 24.0;
+  a6.a0[0] = -25.0;
+  a6.a0[1] = 26.0;
+  a6.a0[2] = -27.0;
+  a6.a0[3] = 28.0;
+  a7.a0[0] = -29.0;
+  a7.a0[1] = 30.0;
+  a7.a0[2] = -31.0;
+  a7.a0[3] = 32.0;
+  a8.a0[0] = -33.0;
+  a8.a0[1] = 34.0;
+  a8.a0[2] = -35.0;
+  a8.a0[3] = 36.0;
+  a9.a0[0] = -37.0;
+  a9.a0[1] = 38.0;
+  a9.a0[2] = -39.0;
+  a9.a0[3] = 40.0;
+
+  final result = passUnion16BytesNestedInlineArrayFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(20.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final passUnion16BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
+        Double Function(
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat),
+        double Function(
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat,
+            Union16BytesNestedFloat)>("PassUnion16BytesNestedFloatx10",
+    isLeaf: true);
+
+/// Union with homogenous floats.
+void testPassUnion16BytesNestedFloatx10Leaf() {
+  final a0Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a1 = a1Pointer.ref;
+  final a2Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a2 = a2Pointer.ref;
+  final a3Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a3 = a3Pointer.ref;
+  final a4Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a4 = a4Pointer.ref;
+  final a5Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a5 = a5Pointer.ref;
+  final a6Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a6 = a6Pointer.ref;
+  final a7Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a7 = a7Pointer.ref;
+  final a8Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a8 = a8Pointer.ref;
+  final a9Pointer = calloc<Union16BytesNestedFloat>();
+  final Union16BytesNestedFloat a9 = a9Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a0.a1 = 2.0;
+  a1.a0.a0 = -3.0;
+  a1.a0.a1 = 4.0;
+  a2.a0.a0 = -5.0;
+  a2.a0.a1 = 6.0;
+  a3.a0.a0 = -7.0;
+  a3.a0.a1 = 8.0;
+  a4.a0.a0 = -9.0;
+  a4.a0.a1 = 10.0;
+  a5.a0.a0 = -11.0;
+  a5.a0.a1 = 12.0;
+  a6.a0.a0 = -13.0;
+  a6.a0.a1 = 14.0;
+  a7.a0.a0 = -15.0;
+  a7.a0.a1 = 16.0;
+  a8.a0.a0 = -17.0;
+  a8.a0.a1 = 18.0;
+  a9.a0.a0 = -19.0;
+  a9.a0.a1 = 20.0;
+
+  final result = passUnion16BytesNestedFloatx10Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
+
+  print("result = $result");
+
+  Expect.approxEquals(10.0, result);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+  calloc.free(a3Pointer);
+  calloc.free(a4Pointer);
+  calloc.free(a5Pointer);
+  calloc.free(a6Pointer);
+  calloc.free(a7Pointer);
+  calloc.free(a8Pointer);
+  calloc.free(a9Pointer);
+}
+
+final returnStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct1ByteInt Function(Int8),
+    Struct1ByteInt Function(int)>("ReturnStruct1ByteInt", isLeaf: true);
+
+/// Smallest struct with data.
+void testReturnStruct1ByteIntLeaf() {
+  int a0;
+
+  a0 = -1;
+
+  final result = returnStruct1ByteIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+}
+
+final returnStruct3BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct3BytesHomogeneousUint8 Function(Uint8, Uint8, Uint8),
+    Struct3BytesHomogeneousUint8 Function(
+        int, int, int)>("ReturnStruct3BytesHomogeneousUint8", isLeaf: true);
+
+/// Smaller than word size return value on all architectures.
+void testReturnStruct3BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+
+  final result = returnStruct3BytesHomogeneousUint8Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct3BytesInt2ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
+    Struct3BytesInt2ByteAligned Function(Int16, Int8),
+    Struct3BytesInt2ByteAligned Function(
+        int, int)>("ReturnStruct3BytesInt2ByteAligned", isLeaf: true);
+
+/// Smaller than word size return value on all architectures.
+/// With alignment rules taken into account size is 4 bytes.
+void testReturnStruct3BytesInt2ByteAlignedLeaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct3BytesInt2ByteAlignedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct4BytesHomogeneousInt16Leaf = ffiTestFunctions.lookupFunction<
+    Struct4BytesHomogeneousInt16 Function(Int16, Int16),
+    Struct4BytesHomogeneousInt16 Function(
+        int, int)>("ReturnStruct4BytesHomogeneousInt16", isLeaf: true);
+
+/// Word size return value on 32 bit architectures..
+void testReturnStruct4BytesHomogeneousInt16Leaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct4BytesHomogeneousInt16Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct7BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct7BytesHomogeneousUint8 Function(
+        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
+    Struct7BytesHomogeneousUint8 Function(int, int, int, int, int, int,
+        int)>("ReturnStruct7BytesHomogeneousUint8", isLeaf: true);
+
+/// Non-wordsize return value.
+void testReturnStruct7BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+
+  final result =
+      returnStruct7BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5, a6);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+}
+
+final returnStruct7BytesInt4ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
+    Struct7BytesInt4ByteAligned Function(Int32, Int16, Int8),
+    Struct7BytesInt4ByteAligned Function(
+        int, int, int)>("ReturnStruct7BytesInt4ByteAligned", isLeaf: true);
+
+/// Non-wordsize return value.
+/// With alignment rules taken into account size is 8 bytes.
+void testReturnStruct7BytesInt4ByteAlignedLeaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct7BytesInt4ByteAlignedLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct8BytesIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesInt Function(Int16, Int16, Int32),
+    Struct8BytesInt Function(
+        int, int, int)>("ReturnStruct8BytesInt", isLeaf: true);
+
+/// Return value in integer registers on many architectures.
+void testReturnStruct8BytesIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct8BytesIntLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct8BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesHomogeneousFloat Function(Float, Float),
+    Struct8BytesHomogeneousFloat Function(
+        double, double)>("ReturnStruct8BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value in FP registers on many architectures.
+void testReturnStruct8BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+
+  a0 = -1.0;
+  a1 = 2.0;
+
+  final result = returnStruct8BytesHomogeneousFloatLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+}
+
+final returnStruct8BytesMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesMixed Function(Float, Int16, Int16),
+    Struct8BytesMixed Function(
+        double, int, int)>("ReturnStruct8BytesMixed", isLeaf: true);
+
+/// Return value split over FP and integer register in x64.
+void testReturnStruct8BytesMixedLeaf() {
+  double a0;
+  int a1;
+  int a2;
+
+  a0 = -1.0;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct8BytesMixedLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct9BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct9BytesHomogeneousUint8 Function(
+        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
+    Struct9BytesHomogeneousUint8 Function(int, int, int, int, int, int, int,
+        int, int)>("ReturnStruct9BytesHomogeneousUint8", isLeaf: true);
+
+/// The minimum alignment of this struct is only 1 byte based on its fields.
+/// Test that the memory backing these structs is the right size and that
+/// dart:ffi trampolines do not write outside this size.
+void testReturnStruct9BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  int a8;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+  a7 = 8;
+  a8 = 9;
+
+  final result = returnStruct9BytesHomogeneousUint8Leaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+  Expect.equals(a7, result.a7);
+  Expect.equals(a8, result.a8);
+}
+
+final returnStruct9BytesInt4Or8ByteAlignedLeaf =
+    ffiTestFunctions.lookupFunction<
+        Struct9BytesInt4Or8ByteAligned Function(Int64, Int8),
+        Struct9BytesInt4Or8ByteAligned Function(
+            int, int)>("ReturnStruct9BytesInt4Or8ByteAligned", isLeaf: true);
+
+/// Return value in two integer registers on x64.
+/// With alignment rules taken into account size is 12 or 16 bytes.
+void testReturnStruct9BytesInt4Or8ByteAlignedLeaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct9BytesInt4Or8ByteAlignedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct12BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct12BytesHomogeneousFloat Function(Float, Float, Float),
+    Struct12BytesHomogeneousFloat Function(double, double,
+        double)>("ReturnStruct12BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value in FPU registers, but does not use all registers on arm hardfp
+/// and arm64.
+void testReturnStruct12BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+  double a2;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+
+  final result = returnStruct12BytesHomogeneousFloatLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+}
+
+final returnStruct16BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesHomogeneousFloat Function(Float, Float, Float, Float),
+    Struct16BytesHomogeneousFloat Function(double, double, double,
+        double)>("ReturnStruct16BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value in FPU registers on arm hardfp and arm64.
+void testReturnStruct16BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+
+  final result = returnStruct16BytesHomogeneousFloatLeaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+}
+
+final returnStruct16BytesMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesMixed Function(Double, Int64),
+    Struct16BytesMixed Function(
+        double, int)>("ReturnStruct16BytesMixed", isLeaf: true);
+
+/// Return value split over FP and integer register in x64.
+void testReturnStruct16BytesMixedLeaf() {
+  double a0;
+  int a1;
+
+  a0 = -1.0;
+  a1 = 2;
+
+  final result = returnStruct16BytesMixedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct16BytesMixed2Leaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesMixed2 Function(Float, Float, Float, Int32),
+    Struct16BytesMixed2 Function(double, double, double,
+        int)>("ReturnStruct16BytesMixed2", isLeaf: true);
+
+/// Return value split over FP and integer register in x64.
+/// The integer register contains half float half int.
+void testReturnStruct16BytesMixed2Leaf() {
+  double a0;
+  double a1;
+  double a2;
+  int a3;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4;
+
+  final result = returnStruct16BytesMixed2Leaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+}
+
+final returnStruct17BytesIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct17BytesInt Function(Int64, Int64, Int8),
+    Struct17BytesInt Function(
+        int, int, int)>("ReturnStruct17BytesInt", isLeaf: true);
+
+/// Rerturn value returned in preallocated space passed by pointer on most ABIs.
+/// Is non word size on purpose, to test that structs are rounded up to word size
+/// on all ABIs.
+void testReturnStruct17BytesIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStruct17BytesIntLeaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct19BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
+    Struct19BytesHomogeneousUint8 Function(
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8,
+        Uint8),
+    Struct19BytesHomogeneousUint8 Function(
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int,
+        int)>("ReturnStruct19BytesHomogeneousUint8", isLeaf: true);
+
+/// The minimum alignment of this struct is only 1 byte based on its fields.
+/// Test that the memory backing these structs is the right size and that
+/// dart:ffi trampolines do not write outside this size.
+void testReturnStruct19BytesHomogeneousUint8Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  int a8;
+  int a9;
+  int a10;
+  int a11;
+  int a12;
+  int a13;
+  int a14;
+  int a15;
+  int a16;
+  int a17;
+  int a18;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+  a7 = 8;
+  a8 = 9;
+  a9 = 10;
+  a10 = 11;
+  a11 = 12;
+  a12 = 13;
+  a13 = 14;
+  a14 = 15;
+  a15 = 16;
+  a16 = 17;
+  a17 = 18;
+  a18 = 19;
+
+  final result = returnStruct19BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5,
+      a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+  Expect.equals(a7, result.a7);
+  Expect.equals(a8, result.a8);
+  Expect.equals(a9, result.a9);
+  Expect.equals(a10, result.a10);
+  Expect.equals(a11, result.a11);
+  Expect.equals(a12, result.a12);
+  Expect.equals(a13, result.a13);
+  Expect.equals(a14, result.a14);
+  Expect.equals(a15, result.a15);
+  Expect.equals(a16, result.a16);
+  Expect.equals(a17, result.a17);
+  Expect.equals(a18, result.a18);
+}
+
+final returnStruct20BytesHomogeneousInt32Leaf = ffiTestFunctions.lookupFunction<
+    Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32, Int32),
+    Struct20BytesHomogeneousInt32 Function(int, int, int, int,
+        int)>("ReturnStruct20BytesHomogeneousInt32", isLeaf: true);
+
+/// Return value too big to go in cpu registers on arm64.
+void testReturnStruct20BytesHomogeneousInt32Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+
+  final result = returnStruct20BytesHomogeneousInt32Leaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+}
+
+final returnStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct20BytesHomogeneousFloat Function(Float, Float, Float, Float, Float),
+    Struct20BytesHomogeneousFloat Function(double, double, double, double,
+        double)>("ReturnStruct20BytesHomogeneousFloat", isLeaf: true);
+
+/// Return value too big to go in FPU registers on x64, arm hardfp and arm64.
+void testReturnStruct20BytesHomogeneousFloatLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+  double a4;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+  a4 = -5.0;
+
+  final result = returnStruct20BytesHomogeneousFloatLeaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+  Expect.approxEquals(a4, result.a4);
+}
+
+final returnStruct32BytesHomogeneousDoubleLeaf =
+    ffiTestFunctions.lookupFunction<
+        Struct32BytesHomogeneousDouble Function(Double, Double, Double, Double),
+        Struct32BytesHomogeneousDouble Function(double, double, double,
+            double)>("ReturnStruct32BytesHomogeneousDouble", isLeaf: true);
+
+/// Return value in FPU registers on arm64.
+void testReturnStruct32BytesHomogeneousDoubleLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+
+  final result = returnStruct32BytesHomogeneousDoubleLeaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+}
+
+final returnStruct40BytesHomogeneousDoubleLeaf =
+    ffiTestFunctions.lookupFunction<
+        Struct40BytesHomogeneousDouble Function(
+            Double, Double, Double, Double, Double),
+        Struct40BytesHomogeneousDouble Function(double, double, double, double,
+            double)>("ReturnStruct40BytesHomogeneousDouble", isLeaf: true);
+
+/// Return value too big to go in FPU registers on arm64.
+void testReturnStruct40BytesHomogeneousDoubleLeaf() {
+  double a0;
+  double a1;
+  double a2;
+  double a3;
+  double a4;
+
+  a0 = -1.0;
+  a1 = 2.0;
+  a2 = -3.0;
+  a3 = 4.0;
+  a4 = -5.0;
+
+  final result = returnStruct40BytesHomogeneousDoubleLeaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+  Expect.approxEquals(a2, result.a2);
+  Expect.approxEquals(a3, result.a3);
+  Expect.approxEquals(a4, result.a4);
+}
+
+final returnStruct1024BytesHomogeneousUint64Leaf =
+    ffiTestFunctions.lookupFunction<
+        Struct1024BytesHomogeneousUint64 Function(
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64,
+            Uint64),
+        Struct1024BytesHomogeneousUint64 Function(
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int,
+            int)>("ReturnStruct1024BytesHomogeneousUint64", isLeaf: true);
+
+/// Test 1kb struct.
+void testReturnStruct1024BytesHomogeneousUint64Leaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  int a8;
+  int a9;
+  int a10;
+  int a11;
+  int a12;
+  int a13;
+  int a14;
+  int a15;
+  int a16;
+  int a17;
+  int a18;
+  int a19;
+  int a20;
+  int a21;
+  int a22;
+  int a23;
+  int a24;
+  int a25;
+  int a26;
+  int a27;
+  int a28;
+  int a29;
+  int a30;
+  int a31;
+  int a32;
+  int a33;
+  int a34;
+  int a35;
+  int a36;
+  int a37;
+  int a38;
+  int a39;
+  int a40;
+  int a41;
+  int a42;
+  int a43;
+  int a44;
+  int a45;
+  int a46;
+  int a47;
+  int a48;
+  int a49;
+  int a50;
+  int a51;
+  int a52;
+  int a53;
+  int a54;
+  int a55;
+  int a56;
+  int a57;
+  int a58;
+  int a59;
+  int a60;
+  int a61;
+  int a62;
+  int a63;
+  int a64;
+  int a65;
+  int a66;
+  int a67;
+  int a68;
+  int a69;
+  int a70;
+  int a71;
+  int a72;
+  int a73;
+  int a74;
+  int a75;
+  int a76;
+  int a77;
+  int a78;
+  int a79;
+  int a80;
+  int a81;
+  int a82;
+  int a83;
+  int a84;
+  int a85;
+  int a86;
+  int a87;
+  int a88;
+  int a89;
+  int a90;
+  int a91;
+  int a92;
+  int a93;
+  int a94;
+  int a95;
+  int a96;
+  int a97;
+  int a98;
+  int a99;
+  int a100;
+  int a101;
+  int a102;
+  int a103;
+  int a104;
+  int a105;
+  int a106;
+  int a107;
+  int a108;
+  int a109;
+  int a110;
+  int a111;
+  int a112;
+  int a113;
+  int a114;
+  int a115;
+  int a116;
+  int a117;
+  int a118;
+  int a119;
+  int a120;
+  int a121;
+  int a122;
+  int a123;
+  int a124;
+  int a125;
+  int a126;
+  int a127;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+  a5 = 6;
+  a6 = 7;
+  a7 = 8;
+  a8 = 9;
+  a9 = 10;
+  a10 = 11;
+  a11 = 12;
+  a12 = 13;
+  a13 = 14;
+  a14 = 15;
+  a15 = 16;
+  a16 = 17;
+  a17 = 18;
+  a18 = 19;
+  a19 = 20;
+  a20 = 21;
+  a21 = 22;
+  a22 = 23;
+  a23 = 24;
+  a24 = 25;
+  a25 = 26;
+  a26 = 27;
+  a27 = 28;
+  a28 = 29;
+  a29 = 30;
+  a30 = 31;
+  a31 = 32;
+  a32 = 33;
+  a33 = 34;
+  a34 = 35;
+  a35 = 36;
+  a36 = 37;
+  a37 = 38;
+  a38 = 39;
+  a39 = 40;
+  a40 = 41;
+  a41 = 42;
+  a42 = 43;
+  a43 = 44;
+  a44 = 45;
+  a45 = 46;
+  a46 = 47;
+  a47 = 48;
+  a48 = 49;
+  a49 = 50;
+  a50 = 51;
+  a51 = 52;
+  a52 = 53;
+  a53 = 54;
+  a54 = 55;
+  a55 = 56;
+  a56 = 57;
+  a57 = 58;
+  a58 = 59;
+  a59 = 60;
+  a60 = 61;
+  a61 = 62;
+  a62 = 63;
+  a63 = 64;
+  a64 = 65;
+  a65 = 66;
+  a66 = 67;
+  a67 = 68;
+  a68 = 69;
+  a69 = 70;
+  a70 = 71;
+  a71 = 72;
+  a72 = 73;
+  a73 = 74;
+  a74 = 75;
+  a75 = 76;
+  a76 = 77;
+  a77 = 78;
+  a78 = 79;
+  a79 = 80;
+  a80 = 81;
+  a81 = 82;
+  a82 = 83;
+  a83 = 84;
+  a84 = 85;
+  a85 = 86;
+  a86 = 87;
+  a87 = 88;
+  a88 = 89;
+  a89 = 90;
+  a90 = 91;
+  a91 = 92;
+  a92 = 93;
+  a93 = 94;
+  a94 = 95;
+  a95 = 96;
+  a96 = 97;
+  a97 = 98;
+  a98 = 99;
+  a99 = 100;
+  a100 = 101;
+  a101 = 102;
+  a102 = 103;
+  a103 = 104;
+  a104 = 105;
+  a105 = 106;
+  a106 = 107;
+  a107 = 108;
+  a108 = 109;
+  a109 = 110;
+  a110 = 111;
+  a111 = 112;
+  a112 = 113;
+  a113 = 114;
+  a114 = 115;
+  a115 = 116;
+  a116 = 117;
+  a117 = 118;
+  a118 = 119;
+  a119 = 120;
+  a120 = 121;
+  a121 = 122;
+  a122 = 123;
+  a123 = 124;
+  a124 = 125;
+  a125 = 126;
+  a126 = 127;
+  a127 = 128;
+
+  final result = returnStruct1024BytesHomogeneousUint64Leaf(
+      a0,
+      a1,
+      a2,
+      a3,
+      a4,
+      a5,
+      a6,
+      a7,
+      a8,
+      a9,
+      a10,
+      a11,
+      a12,
+      a13,
+      a14,
+      a15,
+      a16,
+      a17,
+      a18,
+      a19,
+      a20,
+      a21,
+      a22,
+      a23,
+      a24,
+      a25,
+      a26,
+      a27,
+      a28,
+      a29,
+      a30,
+      a31,
+      a32,
+      a33,
+      a34,
+      a35,
+      a36,
+      a37,
+      a38,
+      a39,
+      a40,
+      a41,
+      a42,
+      a43,
+      a44,
+      a45,
+      a46,
+      a47,
+      a48,
+      a49,
+      a50,
+      a51,
+      a52,
+      a53,
+      a54,
+      a55,
+      a56,
+      a57,
+      a58,
+      a59,
+      a60,
+      a61,
+      a62,
+      a63,
+      a64,
+      a65,
+      a66,
+      a67,
+      a68,
+      a69,
+      a70,
+      a71,
+      a72,
+      a73,
+      a74,
+      a75,
+      a76,
+      a77,
+      a78,
+      a79,
+      a80,
+      a81,
+      a82,
+      a83,
+      a84,
+      a85,
+      a86,
+      a87,
+      a88,
+      a89,
+      a90,
+      a91,
+      a92,
+      a93,
+      a94,
+      a95,
+      a96,
+      a97,
+      a98,
+      a99,
+      a100,
+      a101,
+      a102,
+      a103,
+      a104,
+      a105,
+      a106,
+      a107,
+      a108,
+      a109,
+      a110,
+      a111,
+      a112,
+      a113,
+      a114,
+      a115,
+      a116,
+      a117,
+      a118,
+      a119,
+      a120,
+      a121,
+      a122,
+      a123,
+      a124,
+      a125,
+      a126,
+      a127);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+  Expect.equals(a5, result.a5);
+  Expect.equals(a6, result.a6);
+  Expect.equals(a7, result.a7);
+  Expect.equals(a8, result.a8);
+  Expect.equals(a9, result.a9);
+  Expect.equals(a10, result.a10);
+  Expect.equals(a11, result.a11);
+  Expect.equals(a12, result.a12);
+  Expect.equals(a13, result.a13);
+  Expect.equals(a14, result.a14);
+  Expect.equals(a15, result.a15);
+  Expect.equals(a16, result.a16);
+  Expect.equals(a17, result.a17);
+  Expect.equals(a18, result.a18);
+  Expect.equals(a19, result.a19);
+  Expect.equals(a20, result.a20);
+  Expect.equals(a21, result.a21);
+  Expect.equals(a22, result.a22);
+  Expect.equals(a23, result.a23);
+  Expect.equals(a24, result.a24);
+  Expect.equals(a25, result.a25);
+  Expect.equals(a26, result.a26);
+  Expect.equals(a27, result.a27);
+  Expect.equals(a28, result.a28);
+  Expect.equals(a29, result.a29);
+  Expect.equals(a30, result.a30);
+  Expect.equals(a31, result.a31);
+  Expect.equals(a32, result.a32);
+  Expect.equals(a33, result.a33);
+  Expect.equals(a34, result.a34);
+  Expect.equals(a35, result.a35);
+  Expect.equals(a36, result.a36);
+  Expect.equals(a37, result.a37);
+  Expect.equals(a38, result.a38);
+  Expect.equals(a39, result.a39);
+  Expect.equals(a40, result.a40);
+  Expect.equals(a41, result.a41);
+  Expect.equals(a42, result.a42);
+  Expect.equals(a43, result.a43);
+  Expect.equals(a44, result.a44);
+  Expect.equals(a45, result.a45);
+  Expect.equals(a46, result.a46);
+  Expect.equals(a47, result.a47);
+  Expect.equals(a48, result.a48);
+  Expect.equals(a49, result.a49);
+  Expect.equals(a50, result.a50);
+  Expect.equals(a51, result.a51);
+  Expect.equals(a52, result.a52);
+  Expect.equals(a53, result.a53);
+  Expect.equals(a54, result.a54);
+  Expect.equals(a55, result.a55);
+  Expect.equals(a56, result.a56);
+  Expect.equals(a57, result.a57);
+  Expect.equals(a58, result.a58);
+  Expect.equals(a59, result.a59);
+  Expect.equals(a60, result.a60);
+  Expect.equals(a61, result.a61);
+  Expect.equals(a62, result.a62);
+  Expect.equals(a63, result.a63);
+  Expect.equals(a64, result.a64);
+  Expect.equals(a65, result.a65);
+  Expect.equals(a66, result.a66);
+  Expect.equals(a67, result.a67);
+  Expect.equals(a68, result.a68);
+  Expect.equals(a69, result.a69);
+  Expect.equals(a70, result.a70);
+  Expect.equals(a71, result.a71);
+  Expect.equals(a72, result.a72);
+  Expect.equals(a73, result.a73);
+  Expect.equals(a74, result.a74);
+  Expect.equals(a75, result.a75);
+  Expect.equals(a76, result.a76);
+  Expect.equals(a77, result.a77);
+  Expect.equals(a78, result.a78);
+  Expect.equals(a79, result.a79);
+  Expect.equals(a80, result.a80);
+  Expect.equals(a81, result.a81);
+  Expect.equals(a82, result.a82);
+  Expect.equals(a83, result.a83);
+  Expect.equals(a84, result.a84);
+  Expect.equals(a85, result.a85);
+  Expect.equals(a86, result.a86);
+  Expect.equals(a87, result.a87);
+  Expect.equals(a88, result.a88);
+  Expect.equals(a89, result.a89);
+  Expect.equals(a90, result.a90);
+  Expect.equals(a91, result.a91);
+  Expect.equals(a92, result.a92);
+  Expect.equals(a93, result.a93);
+  Expect.equals(a94, result.a94);
+  Expect.equals(a95, result.a95);
+  Expect.equals(a96, result.a96);
+  Expect.equals(a97, result.a97);
+  Expect.equals(a98, result.a98);
+  Expect.equals(a99, result.a99);
+  Expect.equals(a100, result.a100);
+  Expect.equals(a101, result.a101);
+  Expect.equals(a102, result.a102);
+  Expect.equals(a103, result.a103);
+  Expect.equals(a104, result.a104);
+  Expect.equals(a105, result.a105);
+  Expect.equals(a106, result.a106);
+  Expect.equals(a107, result.a107);
+  Expect.equals(a108, result.a108);
+  Expect.equals(a109, result.a109);
+  Expect.equals(a110, result.a110);
+  Expect.equals(a111, result.a111);
+  Expect.equals(a112, result.a112);
+  Expect.equals(a113, result.a113);
+  Expect.equals(a114, result.a114);
+  Expect.equals(a115, result.a115);
+  Expect.equals(a116, result.a116);
+  Expect.equals(a117, result.a117);
+  Expect.equals(a118, result.a118);
+  Expect.equals(a119, result.a119);
+  Expect.equals(a120, result.a120);
+  Expect.equals(a121, result.a121);
+  Expect.equals(a122, result.a122);
+  Expect.equals(a123, result.a123);
+  Expect.equals(a124, result.a124);
+  Expect.equals(a125, result.a125);
+  Expect.equals(a126, result.a126);
+  Expect.equals(a127, result.a127);
+}
+
+final returnStruct3BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct3BytesPackedInt Function(Int8, Int16),
+    Struct3BytesPackedInt Function(
+        int, int)>("ReturnStruct3BytesPackedInt", isLeaf: true);
+
+/// Small struct with mis-aligned member.
+void testReturnStruct3BytesPackedIntLeaf() {
+  int a0;
+  int a1;
+
+  a0 = -1;
+  a1 = 2;
+
+  final result = returnStruct3BytesPackedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+}
+
+final returnStruct8BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesPackedInt Function(Uint8, Uint32, Uint8, Uint8, Uint8),
+    Struct8BytesPackedInt Function(
+        int, int, int, int, int)>("ReturnStruct8BytesPackedInt", isLeaf: true);
+
+/// Struct with mis-aligned member.
+void testReturnStruct8BytesPackedIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+
+  a0 = 1;
+  a1 = 2;
+  a2 = 3;
+  a3 = 4;
+  a4 = 5;
+
+  final result = returnStruct8BytesPackedIntLeaf(a0, a1, a2, a3, a4);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+  Expect.equals(a3, result.a3);
+  Expect.equals(a4, result.a4);
+}
+
+final returnStruct9BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct9BytesPackedMixed Function(Uint8, Double),
+    Struct9BytesPackedMixed Function(
+        int, double)>("ReturnStruct9BytesPackedMixed", isLeaf: true);
+
+/// Struct with mis-aligned member.
+/// Tests backfilling of CPU and FPU registers.
+void testReturnStruct9BytesPackedMixedLeaf() {
+  int a0;
+  double a1;
+
+  a0 = 1;
+  a1 = 2.0;
+
+  final result = returnStruct9BytesPackedMixedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.approxEquals(a1, result.a1);
+}
+
+final returnUnion4BytesMixedLeaf = ffiTestFunctions.lookupFunction<
+    Union4BytesMixed Function(Uint32),
+    Union4BytesMixed Function(int)>("ReturnUnion4BytesMixed", isLeaf: true);
+
+/// Returning a mixed integer/float union.
+void testReturnUnion4BytesMixedLeaf() {
+  int a0;
+
+  a0 = 1;
+
+  final result = returnUnion4BytesMixedLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+}
+
+final returnUnion8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
+    Union8BytesNestedFloat Function(Double),
+    Union8BytesNestedFloat Function(
+        double)>("ReturnUnion8BytesNestedFloat", isLeaf: true);
+
+/// Returning a floating point only union.
+void testReturnUnion8BytesNestedFloatLeaf() {
+  double a0;
+
+  a0 = -1.0;
+
+  final result = returnUnion8BytesNestedFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0, result.a0);
+}
+
+final returnUnion9BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+    Union9BytesNestedInt Function(Struct8BytesInt),
+    Union9BytesNestedInt Function(
+        Struct8BytesInt)>("ReturnUnion9BytesNestedInt", isLeaf: true);
+
+/// Returning a mixed-size union.
+void testReturnUnion9BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct8BytesInt>();
+  final Struct8BytesInt a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+
+  final result = returnUnion9BytesNestedIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+
+  calloc.free(a0Pointer);
+}
+
+final returnUnion16BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
+        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat),
+        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat)>(
+    "ReturnUnion16BytesNestedFloat",
+    isLeaf: true);
+
+/// Returning union with homogenous floats.
+void testReturnUnion16BytesNestedFloatLeaf() {
+  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+
+  final result = returnUnion16BytesNestedFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0.a0);
+  Expect.approxEquals(a0.a1, result.a0.a1);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct1ByteInt Function(Struct1ByteInt),
+    Struct1ByteInt Function(
+        Struct1ByteInt)>("ReturnStructArgumentStruct1ByteInt", isLeaf: true);
+
+/// Test that a struct passed in as argument can be returned.
+/// Especially for ffi callbacks.
+/// Struct is passed in int registers in most ABIs.
+void testReturnStructArgumentStruct1ByteIntLeaf() {
+  final a0Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+
+  final result = returnStructArgumentStruct1ByteIntLeaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentInt32x8Struct1ByteIntLeaf =
+    ffiTestFunctions
+        .lookupFunction<
+                Struct1ByteInt Function(Int32, Int32, Int32, Int32, Int32, Int32,
+                    Int32, Int32, Struct1ByteInt),
+                Struct1ByteInt Function(
+                    int, int, int, int, int, int, int, int, Struct1ByteInt)>(
+            "ReturnStructArgumentInt32x8Struct1ByteInt",
+            isLeaf: true);
+
+/// Test that a struct passed in as argument can be returned.
+/// Especially for ffi callbacks.
+/// Struct is passed on stack on all ABIs.
+void testReturnStructArgumentInt32x8Struct1ByteIntLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  final a8Pointer = calloc<Struct1ByteInt>();
+  final Struct1ByteInt a8 = a8Pointer.ref;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+  a5 = 6;
+  a6 = -7;
+  a7 = 8;
+  a8.a0 = -9;
+
+  final result = returnStructArgumentInt32x8Struct1ByteIntLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.equals(a8.a0, result.a0);
+
+  calloc.free(a8Pointer);
+}
+
+final returnStructArgumentStruct8BytesHomogeneousFloatLeaf =
+    ffiTestFunctions.lookupFunction<
+            Struct8BytesHomogeneousFloat Function(Struct8BytesHomogeneousFloat),
+            Struct8BytesHomogeneousFloat Function(
+                Struct8BytesHomogeneousFloat)>(
+        "ReturnStructArgumentStruct8BytesHomogeneousFloat",
+        isLeaf: true);
+
+/// Test that a struct passed in as argument can be returned.
+/// Especially for ffi callbacks.
+/// Struct is passed in float registers in most ABIs.
+void testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf() {
+  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
+  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
+
+  a0.a0 = -1.0;
+  a0.a1 = 2.0;
+
+  final result = returnStructArgumentStruct8BytesHomogeneousFloatLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0);
+  Expect.approxEquals(a0.a1, result.a1);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStruct20BytesHomogeneousInt32Leaf =
+    ffiTestFunctions
+        .lookupFunction<
+                Struct20BytesHomogeneousInt32 Function(
+                    Struct20BytesHomogeneousInt32),
+                Struct20BytesHomogeneousInt32 Function(
+                    Struct20BytesHomogeneousInt32)>(
+            "ReturnStructArgumentStruct20BytesHomogeneousInt32",
+            isLeaf: true);
+
+/// On arm64, both argument and return value are passed in by pointer.
+void testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf() {
+  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a0.a3 = 4;
+  a0.a4 = -5;
+
+  final result = returnStructArgumentStruct20BytesHomogeneousInt32Leaf(a0);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0);
+  Expect.equals(a0.a1, result.a1);
+  Expect.equals(a0.a2, result.a2);
+  Expect.equals(a0.a3, result.a3);
+  Expect.equals(a0.a4, result.a4);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf =
+    ffiTestFunctions.lookupFunction<
+            Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32,
+                Int32, Int32, Int32, Int32, Struct20BytesHomogeneousInt32),
+            Struct20BytesHomogeneousInt32 Function(int, int, int, int, int, int,
+                int, int, Struct20BytesHomogeneousInt32)>(
+        "ReturnStructArgumentInt32x8Struct20BytesHomogeneou",
+        isLeaf: true);
+
+/// On arm64, both argument and return value are passed in by pointer.
+/// Ints exhaust registers, so that pointer is passed on stack.
+void testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf() {
+  int a0;
+  int a1;
+  int a2;
+  int a3;
+  int a4;
+  int a5;
+  int a6;
+  int a7;
+  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
+  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+  a3 = 4;
+  a4 = -5;
+  a5 = 6;
+  a6 = -7;
+  a7 = 8;
+  a8.a0 = -9;
+  a8.a1 = 10;
+  a8.a2 = -11;
+  a8.a3 = 12;
+  a8.a4 = -13;
+
+  final result = returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf(
+      a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  print("result = $result");
+
+  Expect.equals(a8.a0, result.a0);
+  Expect.equals(a8.a1, result.a1);
+  Expect.equals(a8.a2, result.a2);
+  Expect.equals(a8.a3, result.a3);
+  Expect.equals(a8.a4, result.a4);
+
+  calloc.free(a8Pointer);
+}
+
+final returnStructArgumentStruct8BytesInlineArrayIntLeaf =
+    ffiTestFunctions.lookupFunction<
+            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt),
+            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt)>(
+        "ReturnStructArgumentStruct8BytesInlineArrayInt",
+        isLeaf: true);
+
+/// Test returning struct with inline array.
+void testReturnStructArgumentStruct8BytesInlineArrayIntLeaf() {
+  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
+  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
+
+  a0.a0[0] = 1;
+  a0.a0[1] = 2;
+  a0.a0[2] = 3;
+  a0.a0[3] = 4;
+  a0.a0[4] = 5;
+  a0.a0[5] = 6;
+  a0.a0[6] = 7;
+  a0.a0[7] = 8;
+
+  final result = returnStructArgumentStruct8BytesInlineArrayIntLeaf(a0);
+
+  print("result = $result");
+
+  for (int i = 0; i < 8; i++) {
+    Expect.equals(a0.a0[i], result.a0[i]);
+  }
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStructStruct16BytesHomogeneousLeaf =
+    ffiTestFunctions.lookupFunction<
+            StructStruct16BytesHomogeneousFloat2 Function(
+                StructStruct16BytesHomogeneousFloat2),
+            StructStruct16BytesHomogeneousFloat2 Function(
+                StructStruct16BytesHomogeneousFloat2)>(
+        "ReturnStructArgumentStructStruct16BytesHomogeneous",
+        isLeaf: true);
+
+/// Return value in FPU registers on arm hardfp and arm64.
+void testReturnStructArgumentStructStruct16BytesHomogeneousLeaf() {
+  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
+  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+
+  final result = returnStructArgumentStructStruct16BytesHomogeneousLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0.a0, result.a0.a0);
+  for (int i = 0; i < 2; i++) {
+    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
+  }
+  Expect.approxEquals(a0.a2, result.a2);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStructStruct32BytesHomogeneousLeaf =
+    ffiTestFunctions.lookupFunction<
+            StructStruct32BytesHomogeneousDouble2 Function(
+                StructStruct32BytesHomogeneousDouble2),
+            StructStruct32BytesHomogeneousDouble2 Function(
+                StructStruct32BytesHomogeneousDouble2)>(
+        "ReturnStructArgumentStructStruct32BytesHomogeneous",
+        isLeaf: true);
+
+/// Return value in FPU registers on arm64.
+void testReturnStructArgumentStructStruct32BytesHomogeneousLeaf() {
+  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
+  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[1].a0 = -3.0;
+  a0.a2 = 4.0;
+
+  final result = returnStructArgumentStructStruct32BytesHomogeneousLeaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0.a0, result.a0.a0);
+  for (int i = 0; i < 2; i++) {
+    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
+  }
+  Expect.approxEquals(a0.a2, result.a2);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructArgumentStructStruct16BytesMixed3Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3),
+            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3)>(
+        "ReturnStructArgumentStructStruct16BytesMixed3",
+        isLeaf: true);
+
+/// On x64 Linux, return value is split over FP and int registers.
+void testReturnStructArgumentStructStruct16BytesMixed3Leaf() {
+  final a0Pointer = calloc<StructStruct16BytesMixed3>();
+  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
+
+  a0.a0.a0 = -1.0;
+  a0.a1[0].a0 = 2.0;
+  a0.a1[0].a1 = -3;
+  a0.a1[0].a2 = 4;
+  a0.a2[0] = -5;
+  a0.a2[1] = 6;
+
+  final result = returnStructArgumentStructStruct16BytesMixed3Leaf(a0);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0.a0, result.a0.a0);
+  for (int i = 0; i < 1; i++) {
+    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
+    Expect.equals(a0.a1[i].a1, result.a1[i].a1);
+    Expect.equals(a0.a1[i].a2, result.a1[i].a2);
+  }
+  for (int i = 0; i < 2; i++) {
+    Expect.equals(a0.a2[i], result.a2[i]);
+  }
+
+  calloc.free(a0Pointer);
+}
+
+final returnStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
+    StructAlignmentInt16 Function(Int8, Int16, Int8),
+    StructAlignmentInt16 Function(
+        int, int, int)>("ReturnStructAlignmentInt16", isLeaf: true);
+
+/// Test alignment and padding of 16 byte int within struct.
+void testReturnStructAlignmentInt16Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStructAlignmentInt16Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
+    StructAlignmentInt32 Function(Int8, Int32, Int8),
+    StructAlignmentInt32 Function(
+        int, int, int)>("ReturnStructAlignmentInt32", isLeaf: true);
+
+/// Test alignment and padding of 32 byte int within struct.
+void testReturnStructAlignmentInt32Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStructAlignmentInt32Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
+    StructAlignmentInt64 Function(Int8, Int64, Int8),
+    StructAlignmentInt64 Function(
+        int, int, int)>("ReturnStructAlignmentInt64", isLeaf: true);
+
+/// Test alignment and padding of 64 byte int within struct.
+void testReturnStructAlignmentInt64Leaf() {
+  int a0;
+  int a1;
+  int a2;
+
+  a0 = -1;
+  a1 = 2;
+  a2 = -3;
+
+  final result = returnStructAlignmentInt64Leaf(a0, a1, a2);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1, result.a1);
+  Expect.equals(a2, result.a2);
+}
+
+final returnStruct8BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+        Struct8BytesNestedInt Function(
+            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16),
+        Struct8BytesNestedInt Function(
+            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16)>(
+    "ReturnStruct8BytesNestedInt",
+    isLeaf: true);
+
+/// Simple nested struct.
+void testReturnStruct8BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3;
+  a1.a1 = 4;
+
+  final result = returnStruct8BytesNestedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesNestedFloat Function(Struct4BytesFloat, Struct4BytesFloat),
+    Struct8BytesNestedFloat Function(Struct4BytesFloat,
+        Struct4BytesFloat)>("ReturnStruct8BytesNestedFloat", isLeaf: true);
+
+/// Simple nested struct with floats.
+void testReturnStruct8BytesNestedFloatLeaf() {
+  final a0Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a1 = a1Pointer.ref;
+
+  a0.a0 = -1.0;
+  a1.a0 = 2.0;
+
+  final result = returnStruct8BytesNestedFloatLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0.a0);
+  Expect.approxEquals(a1.a0, result.a1.a0);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct8BytesNestedFloat2Leaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesNestedFloat2 Function(Struct4BytesFloat, Float),
+    Struct8BytesNestedFloat2 Function(Struct4BytesFloat,
+        double)>("ReturnStruct8BytesNestedFloat2", isLeaf: true);
+
+/// The nesting is irregular, testing homogenous float rules on arm and arm64,
+/// and the fpu register usage on x64.
+void testReturnStruct8BytesNestedFloat2Leaf() {
+  final a0Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a0 = a0Pointer.ref;
+  double a1;
+
+  a0.a0 = -1.0;
+  a1 = 2.0;
+
+  final result = returnStruct8BytesNestedFloat2Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.approxEquals(a0.a0, result.a0.a0);
+  Expect.approxEquals(a1, result.a1);
+
+  calloc.free(a0Pointer);
+}
+
+final returnStruct8BytesNestedMixedLeaf = ffiTestFunctions.lookupFunction<
+    Struct8BytesNestedMixed Function(
+        Struct4BytesHomogeneousInt16, Struct4BytesFloat),
+    Struct8BytesNestedMixed Function(Struct4BytesHomogeneousInt16,
+        Struct4BytesFloat)>("ReturnStruct8BytesNestedMixed", isLeaf: true);
+
+/// Simple nested struct with mixed members.
+void testReturnStruct8BytesNestedMixedLeaf() {
+  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
+  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct4BytesFloat>();
+  final Struct4BytesFloat a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a1.a0 = -3.0;
+
+  final result = returnStruct8BytesNestedMixedLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.approxEquals(a1.a0, result.a1.a0);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct16BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct16BytesNestedInt Function(
+        Struct8BytesNestedInt, Struct8BytesNestedInt),
+    Struct16BytesNestedInt Function(Struct8BytesNestedInt,
+        Struct8BytesNestedInt)>("ReturnStruct16BytesNestedInt", isLeaf: true);
+
+/// Deeper nested struct to test recursive member access.
+void testReturnStruct16BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct8BytesNestedInt>();
+  final Struct8BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0 = -1;
+  a0.a0.a1 = 2;
+  a0.a1.a0 = -3;
+  a0.a1.a1 = 4;
+  a1.a0.a0 = -5;
+  a1.a0.a1 = 6;
+  a1.a1.a0 = -7;
+  a1.a1.a1 = 8;
+
+  final result = returnStruct16BytesNestedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0.a0, result.a0.a0.a0);
+  Expect.equals(a0.a0.a1, result.a0.a0.a1);
+  Expect.equals(a0.a1.a0, result.a0.a1.a0);
+  Expect.equals(a0.a1.a1, result.a0.a1.a1);
+  Expect.equals(a1.a0.a0, result.a1.a0.a0);
+  Expect.equals(a1.a0.a1, result.a1.a0.a1);
+  Expect.equals(a1.a1.a0, result.a1.a1.a0);
+  Expect.equals(a1.a1.a1, result.a1.a1.a1);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStruct32BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
+    Struct32BytesNestedInt Function(
+        Struct16BytesNestedInt, Struct16BytesNestedInt),
+    Struct32BytesNestedInt Function(Struct16BytesNestedInt,
+        Struct16BytesNestedInt)>("ReturnStruct32BytesNestedInt", isLeaf: true);
+
+/// Even deeper nested struct to test recursive member access.
+void testReturnStruct32BytesNestedIntLeaf() {
+  final a0Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a0 = a0Pointer.ref;
+  final a1Pointer = calloc<Struct16BytesNestedInt>();
+  final Struct16BytesNestedInt a1 = a1Pointer.ref;
+
+  a0.a0.a0.a0 = -1;
+  a0.a0.a0.a1 = 2;
+  a0.a0.a1.a0 = -3;
+  a0.a0.a1.a1 = 4;
+  a0.a1.a0.a0 = -5;
+  a0.a1.a0.a1 = 6;
+  a0.a1.a1.a0 = -7;
+  a0.a1.a1.a1 = 8;
+  a1.a0.a0.a0 = -9;
+  a1.a0.a0.a1 = 10;
+  a1.a0.a1.a0 = -11;
+  a1.a0.a1.a1 = 12;
+  a1.a1.a0.a0 = -13;
+  a1.a1.a0.a1 = 14;
+  a1.a1.a1.a0 = -15;
+  a1.a1.a1.a1 = 16;
+
+  final result = returnStruct32BytesNestedIntLeaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0.a0.a0, result.a0.a0.a0.a0);
+  Expect.equals(a0.a0.a0.a1, result.a0.a0.a0.a1);
+  Expect.equals(a0.a0.a1.a0, result.a0.a0.a1.a0);
+  Expect.equals(a0.a0.a1.a1, result.a0.a0.a1.a1);
+  Expect.equals(a0.a1.a0.a0, result.a0.a1.a0.a0);
+  Expect.equals(a0.a1.a0.a1, result.a0.a1.a0.a1);
+  Expect.equals(a0.a1.a1.a0, result.a0.a1.a1.a0);
+  Expect.equals(a0.a1.a1.a1, result.a0.a1.a1.a1);
+  Expect.equals(a1.a0.a0.a0, result.a1.a0.a0.a0);
+  Expect.equals(a1.a0.a0.a1, result.a1.a0.a0.a1);
+  Expect.equals(a1.a0.a1.a0, result.a1.a0.a1.a0);
+  Expect.equals(a1.a0.a1.a1, result.a1.a0.a1.a1);
+  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
+  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
+  Expect.equals(a1.a1.a1.a0, result.a1.a1.a1.a0);
+  Expect.equals(a1.a1.a1.a1, result.a1.a1.a1.a1);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIntStructAlignmentInt16Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructNestedIntStructAlignmentInt16 Function(
+                StructAlignmentInt16, StructAlignmentInt16),
+            StructNestedIntStructAlignmentInt16 Function(
+                StructAlignmentInt16, StructAlignmentInt16)>(
+        "ReturnStructNestedIntStructAlignmentInt16",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 16 byte int.
+void testReturnStructNestedIntStructAlignmentInt16Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructAlignmentInt16>();
+  final StructAlignmentInt16 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+
+  final result = returnStructNestedIntStructAlignmentInt16Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+  Expect.equals(a1.a2, result.a1.a2);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIntStructAlignmentInt32Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructNestedIntStructAlignmentInt32 Function(
+                StructAlignmentInt32, StructAlignmentInt32),
+            StructNestedIntStructAlignmentInt32 Function(
+                StructAlignmentInt32, StructAlignmentInt32)>(
+        "ReturnStructNestedIntStructAlignmentInt32",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 32 byte int.
+void testReturnStructNestedIntStructAlignmentInt32Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructAlignmentInt32>();
+  final StructAlignmentInt32 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+
+  final result = returnStructNestedIntStructAlignmentInt32Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+  Expect.equals(a1.a2, result.a1.a2);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIntStructAlignmentInt64Leaf =
+    ffiTestFunctions.lookupFunction<
+            StructNestedIntStructAlignmentInt64 Function(
+                StructAlignmentInt64, StructAlignmentInt64),
+            StructNestedIntStructAlignmentInt64 Function(
+                StructAlignmentInt64, StructAlignmentInt64)>(
+        "ReturnStructNestedIntStructAlignmentInt64",
+        isLeaf: true);
+
+/// Test alignment and padding of nested struct with 64 byte int.
+void testReturnStructNestedIntStructAlignmentInt64Leaf() {
+  final a0Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a0 = a0Pointer.ref;
+  final a1Pointer = calloc<StructAlignmentInt64>();
+  final StructAlignmentInt64 a1 = a1Pointer.ref;
+
+  a0.a0 = -1;
+  a0.a1 = 2;
+  a0.a2 = -3;
+  a1.a0 = 4;
+  a1.a1 = -5;
+  a1.a2 = 6;
+
+  final result = returnStructNestedIntStructAlignmentInt64Leaf(a0, a1);
+
+  print("result = $result");
+
+  Expect.equals(a0.a0, result.a0.a0);
+  Expect.equals(a0.a1, result.a0.a1);
+  Expect.equals(a0.a2, result.a0.a2);
+  Expect.equals(a1.a0, result.a1.a0);
+  Expect.equals(a1.a1, result.a1.a1);
+  Expect.equals(a1.a2, result.a1.a2);
+
+  calloc.free(a0Pointer);
+  calloc.free(a1Pointer);
+}
+
+final returnStructNestedIrregularEvenBiggerLeaf =
+    ffiTestFunctions.lookupFunction<
+        StructNestedIrregularEvenBigger Function(Uint64,
+            StructNestedIrregularBigger, StructNestedIrregularBigger, Double),
+        StructNestedIrregularEvenBigger Function(
+            int,
+            StructNestedIrregularBigger,
+            StructNestedIrregularBigger,
+            double)>("ReturnStructNestedIrregularEvenBigger", isLeaf: true);
+
+/// Return big irregular struct as smoke test.
+void testReturnStructNestedIrregularEvenBiggerLeaf() {
+  int a0;
+  final a1Pointer = calloc<StructNestedIrregularBigger>();
+  final StructNestedIrregularBigger a1 = a1Pointer.ref;
+  final a2Pointer = calloc<StructNestedIrregularBigger>();
+  final StructNestedIrregularBigger a2 = a2Pointer.ref;
+  double a3;
+
+  a0 = 1;
+  a1.a0.a0 = 2;
+  a1.a0.a1.a0.a0 = -3;
+  a1.a0.a1.a0.a1 = 4;
+  a1.a0.a1.a1.a0 = -5.0;
+  a1.a0.a2 = 6;
+  a1.a0.a3.a0.a0 = -7.0;
+  a1.a0.a3.a1 = 8.0;
+  a1.a0.a4 = 9;
+  a1.a0.a5.a0.a0 = 10.0;
+  a1.a0.a5.a1.a0 = -11.0;
+  a1.a0.a6 = 12;
+  a1.a1.a0.a0 = -13;
+  a1.a1.a0.a1 = 14;
+  a1.a1.a1.a0 = -15.0;
+  a1.a2 = 16.0;
+  a1.a3 = -17.0;
+  a2.a0.a0 = 18;
+  a2.a0.a1.a0.a0 = -19;
+  a2.a0.a1.a0.a1 = 20;
+  a2.a0.a1.a1.a0 = -21.0;
+  a2.a0.a2 = 22;
+  a2.a0.a3.a0.a0 = -23.0;
+  a2.a0.a3.a1 = 24.0;
+  a2.a0.a4 = 25;
+  a2.a0.a5.a0.a0 = 26.0;
+  a2.a0.a5.a1.a0 = -27.0;
+  a2.a0.a6 = 28;
+  a2.a1.a0.a0 = -29;
+  a2.a1.a0.a1 = 30;
+  a2.a1.a1.a0 = -31.0;
+  a2.a2 = 32.0;
+  a2.a3 = -33.0;
+  a3 = 34.0;
+
+  final result = returnStructNestedIrregularEvenBiggerLeaf(a0, a1, a2, a3);
+
+  print("result = $result");
+
+  Expect.equals(a0, result.a0);
+  Expect.equals(a1.a0.a0, result.a1.a0.a0);
+  Expect.equals(a1.a0.a1.a0.a0, result.a1.a0.a1.a0.a0);
+  Expect.equals(a1.a0.a1.a0.a1, result.a1.a0.a1.a0.a1);
+  Expect.approxEquals(a1.a0.a1.a1.a0, result.a1.a0.a1.a1.a0);
+  Expect.equals(a1.a0.a2, result.a1.a0.a2);
+  Expect.approxEquals(a1.a0.a3.a0.a0, result.a1.a0.a3.a0.a0);
+  Expect.approxEquals(a1.a0.a3.a1, result.a1.a0.a3.a1);
+  Expect.equals(a1.a0.a4, result.a1.a0.a4);
+  Expect.approxEquals(a1.a0.a5.a0.a0, result.a1.a0.a5.a0.a0);
+  Expect.approxEquals(a1.a0.a5.a1.a0, result.a1.a0.a5.a1.a0);
+  Expect.equals(a1.a0.a6, result.a1.a0.a6);
+  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
+  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
+  Expect.approxEquals(a1.a1.a1.a0, result.a1.a1.a1.a0);
+  Expect.approxEquals(a1.a2, result.a1.a2);
+  Expect.approxEquals(a1.a3, result.a1.a3);
+  Expect.equals(a2.a0.a0, result.a2.a0.a0);
+  Expect.equals(a2.a0.a1.a0.a0, result.a2.a0.a1.a0.a0);
+  Expect.equals(a2.a0.a1.a0.a1, result.a2.a0.a1.a0.a1);
+  Expect.approxEquals(a2.a0.a1.a1.a0, result.a2.a0.a1.a1.a0);
+  Expect.equals(a2.a0.a2, result.a2.a0.a2);
+  Expect.approxEquals(a2.a0.a3.a0.a0, result.a2.a0.a3.a0.a0);
+  Expect.approxEquals(a2.a0.a3.a1, result.a2.a0.a3.a1);
+  Expect.equals(a2.a0.a4, result.a2.a0.a4);
+  Expect.approxEquals(a2.a0.a5.a0.a0, result.a2.a0.a5.a0.a0);
+  Expect.approxEquals(a2.a0.a5.a1.a0, result.a2.a0.a5.a1.a0);
+  Expect.equals(a2.a0.a6, result.a2.a0.a6);
+  Expect.equals(a2.a1.a0.a0, result.a2.a1.a0.a0);
+  Expect.equals(a2.a1.a0.a1, result.a2.a1.a0.a1);
+  Expect.approxEquals(a2.a1.a1.a0, result.a2.a1.a1.a0);
+  Expect.approxEquals(a2.a2, result.a2.a2);
+  Expect.approxEquals(a2.a3, result.a2.a3);
+  Expect.approxEquals(a3, result.a3);
+
+  calloc.free(a1Pointer);
+  calloc.free(a2Pointer);
+}
diff --git a/tests/ffi_2/function_structs_by_value_generated_test.dart b/tests/ffi_2/function_structs_by_value_generated_test.dart
index 1de965c..3c3f791 100644
--- a/tests/ffi_2/function_structs_by_value_generated_test.dart
+++ b/tests/ffi_2/function_structs_by_value_generated_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 //
 // This file has been automatically generated. Please do not edit it manually.
+// Generated by tests/ffi/generator/structs_by_value_tests_generator.dart.
 //
 // SharedObjects=ffi_test_functions
 // VMOptions=
@@ -19,6 +20,9 @@
 
 import 'dylib_utils.dart';
 
+// Reuse the compound classes.
+import 'function_structs_by_value_generated_compounds.dart';
+
 final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
 void main() {
   for (int i = 0; i < 10; ++i) {
@@ -135,1324 +139,9 @@
     testReturnStructNestedIntStructAlignmentInt32();
     testReturnStructNestedIntStructAlignmentInt64();
     testReturnStructNestedIrregularEvenBigger();
-    testPassStruct1ByteIntx10Leaf();
-    testPassStruct3BytesHomogeneousUint8x10Leaf();
-    testPassStruct3BytesInt2ByteAlignedx10Leaf();
-    testPassStruct4BytesHomogeneousInt16x10Leaf();
-    testPassStruct7BytesHomogeneousUint8x10Leaf();
-    testPassStruct7BytesInt4ByteAlignedx10Leaf();
-    testPassStruct8BytesIntx10Leaf();
-    testPassStruct8BytesHomogeneousFloatx10Leaf();
-    testPassStruct8BytesMixedx10Leaf();
-    testPassStruct9BytesHomogeneousUint8x10Leaf();
-    testPassStruct9BytesInt4Or8ByteAlignedx10Leaf();
-    testPassStruct12BytesHomogeneousFloatx6Leaf();
-    testPassStruct16BytesHomogeneousFloatx5Leaf();
-    testPassStruct16BytesMixedx10Leaf();
-    testPassStruct16BytesMixed2x10Leaf();
-    testPassStruct17BytesIntx10Leaf();
-    testPassStruct19BytesHomogeneousUint8x10Leaf();
-    testPassStruct20BytesHomogeneousInt32x10Leaf();
-    testPassStruct20BytesHomogeneousFloatLeaf();
-    testPassStruct32BytesHomogeneousDoublex5Leaf();
-    testPassStruct40BytesHomogeneousDoubleLeaf();
-    testPassStruct1024BytesHomogeneousUint64Leaf();
-    testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf();
-    testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf();
-    testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf();
-    testPassDoublex6Struct16BytesMixedx4Int32Leaf();
-    testPassInt32x4Struct16BytesMixedx4DoubleLeaf();
-    testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf();
-    testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf();
-    testPassStructAlignmentInt16Leaf();
-    testPassStructAlignmentInt32Leaf();
-    testPassStructAlignmentInt64Leaf();
-    testPassStruct8BytesNestedIntx10Leaf();
-    testPassStruct8BytesNestedFloatx10Leaf();
-    testPassStruct8BytesNestedFloat2x10Leaf();
-    testPassStruct8BytesNestedMixedx10Leaf();
-    testPassStruct16BytesNestedIntx2Leaf();
-    testPassStruct32BytesNestedIntx2Leaf();
-    testPassStructNestedIntStructAlignmentInt16Leaf();
-    testPassStructNestedIntStructAlignmentInt32Leaf();
-    testPassStructNestedIntStructAlignmentInt64Leaf();
-    testPassStructNestedIrregularEvenBiggerx4Leaf();
-    testPassStruct8BytesInlineArrayIntx4Leaf();
-    testPassStructInlineArrayIrregularx4Leaf();
-    testPassStructInlineArray100BytesLeaf();
-    testPassStructStruct16BytesHomogeneousFloat2x5Leaf();
-    testPassStructStruct32BytesHomogeneousDouble2x5Leaf();
-    testPassStructStruct16BytesMixed3x10Leaf();
-    testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf();
-    testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf();
-    testPassStruct3BytesPackedIntx10Leaf();
-    testPassStruct8BytesPackedIntx10Leaf();
-    testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf();
-    testPassStruct5BytesPackedMixedLeaf();
-    testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf();
-    testPassStruct6BytesInlineArrayIntLeaf();
-    testPassStruct15BytesInlineArrayMixedLeaf();
-    testPassUnion4BytesMixedx10Leaf();
-    testPassUnion8BytesNestedFloatx10Leaf();
-    testPassUnion9BytesNestedIntx10Leaf();
-    testPassUnion16BytesNestedInlineArrayFloatx10Leaf();
-    testPassUnion16BytesNestedFloatx10Leaf();
-    testReturnStruct1ByteIntLeaf();
-    testReturnStruct3BytesHomogeneousUint8Leaf();
-    testReturnStruct3BytesInt2ByteAlignedLeaf();
-    testReturnStruct4BytesHomogeneousInt16Leaf();
-    testReturnStruct7BytesHomogeneousUint8Leaf();
-    testReturnStruct7BytesInt4ByteAlignedLeaf();
-    testReturnStruct8BytesIntLeaf();
-    testReturnStruct8BytesHomogeneousFloatLeaf();
-    testReturnStruct8BytesMixedLeaf();
-    testReturnStruct9BytesHomogeneousUint8Leaf();
-    testReturnStruct9BytesInt4Or8ByteAlignedLeaf();
-    testReturnStruct12BytesHomogeneousFloatLeaf();
-    testReturnStruct16BytesHomogeneousFloatLeaf();
-    testReturnStruct16BytesMixedLeaf();
-    testReturnStruct16BytesMixed2Leaf();
-    testReturnStruct17BytesIntLeaf();
-    testReturnStruct19BytesHomogeneousUint8Leaf();
-    testReturnStruct20BytesHomogeneousInt32Leaf();
-    testReturnStruct20BytesHomogeneousFloatLeaf();
-    testReturnStruct32BytesHomogeneousDoubleLeaf();
-    testReturnStruct40BytesHomogeneousDoubleLeaf();
-    testReturnStruct1024BytesHomogeneousUint64Leaf();
-    testReturnStruct3BytesPackedIntLeaf();
-    testReturnStruct8BytesPackedIntLeaf();
-    testReturnStruct9BytesPackedMixedLeaf();
-    testReturnUnion4BytesMixedLeaf();
-    testReturnUnion8BytesNestedFloatLeaf();
-    testReturnUnion9BytesNestedIntLeaf();
-    testReturnUnion16BytesNestedFloatLeaf();
-    testReturnStructArgumentStruct1ByteIntLeaf();
-    testReturnStructArgumentInt32x8Struct1ByteIntLeaf();
-    testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf();
-    testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf();
-    testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf();
-    testReturnStructArgumentStruct8BytesInlineArrayIntLeaf();
-    testReturnStructArgumentStructStruct16BytesHomogeneousLeaf();
-    testReturnStructArgumentStructStruct32BytesHomogeneousLeaf();
-    testReturnStructArgumentStructStruct16BytesMixed3Leaf();
-    testReturnStructAlignmentInt16Leaf();
-    testReturnStructAlignmentInt32Leaf();
-    testReturnStructAlignmentInt64Leaf();
-    testReturnStruct8BytesNestedIntLeaf();
-    testReturnStruct8BytesNestedFloatLeaf();
-    testReturnStruct8BytesNestedFloat2Leaf();
-    testReturnStruct8BytesNestedMixedLeaf();
-    testReturnStruct16BytesNestedIntLeaf();
-    testReturnStruct32BytesNestedIntLeaf();
-    testReturnStructNestedIntStructAlignmentInt16Leaf();
-    testReturnStructNestedIntStructAlignmentInt32Leaf();
-    testReturnStructNestedIntStructAlignmentInt64Leaf();
-    testReturnStructNestedIrregularEvenBiggerLeaf();
   }
 }
 
-class Struct1ByteInt extends Struct {
-  @Int8()
-  int a0;
-
-  String toString() => "(${a0})";
-}
-
-class Struct3BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  int a0;
-
-  @Uint8()
-  int a1;
-
-  @Uint8()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct3BytesInt2ByteAligned extends Struct {
-  @Int16()
-  int a0;
-
-  @Int8()
-  int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct4BytesHomogeneousInt16 extends Struct {
-  @Int16()
-  int a0;
-
-  @Int16()
-  int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct4BytesFloat extends Struct {
-  @Float()
-  double a0;
-
-  String toString() => "(${a0})";
-}
-
-class Struct7BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  int a0;
-
-  @Uint8()
-  int a1;
-
-  @Uint8()
-  int a2;
-
-  @Uint8()
-  int a3;
-
-  @Uint8()
-  int a4;
-
-  @Uint8()
-  int a5;
-
-  @Uint8()
-  int a6;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
-}
-
-class Struct7BytesInt4ByteAligned extends Struct {
-  @Int32()
-  int a0;
-
-  @Int16()
-  int a1;
-
-  @Int8()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct8BytesInt extends Struct {
-  @Int16()
-  int a0;
-
-  @Int16()
-  int a1;
-
-  @Int32()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct8BytesHomogeneousFloat extends Struct {
-  @Float()
-  double a0;
-
-  @Float()
-  double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesFloat extends Struct {
-  @Double()
-  double a0;
-
-  String toString() => "(${a0})";
-}
-
-class Struct8BytesMixed extends Struct {
-  @Float()
-  double a0;
-
-  @Int16()
-  int a1;
-
-  @Int16()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct9BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  int a0;
-
-  @Uint8()
-  int a1;
-
-  @Uint8()
-  int a2;
-
-  @Uint8()
-  int a3;
-
-  @Uint8()
-  int a4;
-
-  @Uint8()
-  int a5;
-
-  @Uint8()
-  int a6;
-
-  @Uint8()
-  int a7;
-
-  @Uint8()
-  int a8;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})";
-}
-
-class Struct9BytesInt4Or8ByteAligned extends Struct {
-  @Int64()
-  int a0;
-
-  @Int8()
-  int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct12BytesHomogeneousFloat extends Struct {
-  @Float()
-  double a0;
-
-  @Float()
-  double a1;
-
-  @Float()
-  double a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct16BytesHomogeneousFloat extends Struct {
-  @Float()
-  double a0;
-
-  @Float()
-  double a1;
-
-  @Float()
-  double a2;
-
-  @Float()
-  double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct16BytesMixed extends Struct {
-  @Double()
-  double a0;
-
-  @Int64()
-  int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct16BytesMixed2 extends Struct {
-  @Float()
-  double a0;
-
-  @Float()
-  double a1;
-
-  @Float()
-  double a2;
-
-  @Int32()
-  int a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct17BytesInt extends Struct {
-  @Int64()
-  int a0;
-
-  @Int64()
-  int a1;
-
-  @Int8()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct19BytesHomogeneousUint8 extends Struct {
-  @Uint8()
-  int a0;
-
-  @Uint8()
-  int a1;
-
-  @Uint8()
-  int a2;
-
-  @Uint8()
-  int a3;
-
-  @Uint8()
-  int a4;
-
-  @Uint8()
-  int a5;
-
-  @Uint8()
-  int a6;
-
-  @Uint8()
-  int a7;
-
-  @Uint8()
-  int a8;
-
-  @Uint8()
-  int a9;
-
-  @Uint8()
-  int a10;
-
-  @Uint8()
-  int a11;
-
-  @Uint8()
-  int a12;
-
-  @Uint8()
-  int a13;
-
-  @Uint8()
-  int a14;
-
-  @Uint8()
-  int a15;
-
-  @Uint8()
-  int a16;
-
-  @Uint8()
-  int a17;
-
-  @Uint8()
-  int a18;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18})";
-}
-
-class Struct20BytesHomogeneousInt32 extends Struct {
-  @Int32()
-  int a0;
-
-  @Int32()
-  int a1;
-
-  @Int32()
-  int a2;
-
-  @Int32()
-  int a3;
-
-  @Int32()
-  int a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-class Struct20BytesHomogeneousFloat extends Struct {
-  @Float()
-  double a0;
-
-  @Float()
-  double a1;
-
-  @Float()
-  double a2;
-
-  @Float()
-  double a3;
-
-  @Float()
-  double a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-class Struct32BytesHomogeneousDouble extends Struct {
-  @Double()
-  double a0;
-
-  @Double()
-  double a1;
-
-  @Double()
-  double a2;
-
-  @Double()
-  double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct40BytesHomogeneousDouble extends Struct {
-  @Double()
-  double a0;
-
-  @Double()
-  double a1;
-
-  @Double()
-  double a2;
-
-  @Double()
-  double a3;
-
-  @Double()
-  double a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-class Struct1024BytesHomogeneousUint64 extends Struct {
-  @Uint64()
-  int a0;
-
-  @Uint64()
-  int a1;
-
-  @Uint64()
-  int a2;
-
-  @Uint64()
-  int a3;
-
-  @Uint64()
-  int a4;
-
-  @Uint64()
-  int a5;
-
-  @Uint64()
-  int a6;
-
-  @Uint64()
-  int a7;
-
-  @Uint64()
-  int a8;
-
-  @Uint64()
-  int a9;
-
-  @Uint64()
-  int a10;
-
-  @Uint64()
-  int a11;
-
-  @Uint64()
-  int a12;
-
-  @Uint64()
-  int a13;
-
-  @Uint64()
-  int a14;
-
-  @Uint64()
-  int a15;
-
-  @Uint64()
-  int a16;
-
-  @Uint64()
-  int a17;
-
-  @Uint64()
-  int a18;
-
-  @Uint64()
-  int a19;
-
-  @Uint64()
-  int a20;
-
-  @Uint64()
-  int a21;
-
-  @Uint64()
-  int a22;
-
-  @Uint64()
-  int a23;
-
-  @Uint64()
-  int a24;
-
-  @Uint64()
-  int a25;
-
-  @Uint64()
-  int a26;
-
-  @Uint64()
-  int a27;
-
-  @Uint64()
-  int a28;
-
-  @Uint64()
-  int a29;
-
-  @Uint64()
-  int a30;
-
-  @Uint64()
-  int a31;
-
-  @Uint64()
-  int a32;
-
-  @Uint64()
-  int a33;
-
-  @Uint64()
-  int a34;
-
-  @Uint64()
-  int a35;
-
-  @Uint64()
-  int a36;
-
-  @Uint64()
-  int a37;
-
-  @Uint64()
-  int a38;
-
-  @Uint64()
-  int a39;
-
-  @Uint64()
-  int a40;
-
-  @Uint64()
-  int a41;
-
-  @Uint64()
-  int a42;
-
-  @Uint64()
-  int a43;
-
-  @Uint64()
-  int a44;
-
-  @Uint64()
-  int a45;
-
-  @Uint64()
-  int a46;
-
-  @Uint64()
-  int a47;
-
-  @Uint64()
-  int a48;
-
-  @Uint64()
-  int a49;
-
-  @Uint64()
-  int a50;
-
-  @Uint64()
-  int a51;
-
-  @Uint64()
-  int a52;
-
-  @Uint64()
-  int a53;
-
-  @Uint64()
-  int a54;
-
-  @Uint64()
-  int a55;
-
-  @Uint64()
-  int a56;
-
-  @Uint64()
-  int a57;
-
-  @Uint64()
-  int a58;
-
-  @Uint64()
-  int a59;
-
-  @Uint64()
-  int a60;
-
-  @Uint64()
-  int a61;
-
-  @Uint64()
-  int a62;
-
-  @Uint64()
-  int a63;
-
-  @Uint64()
-  int a64;
-
-  @Uint64()
-  int a65;
-
-  @Uint64()
-  int a66;
-
-  @Uint64()
-  int a67;
-
-  @Uint64()
-  int a68;
-
-  @Uint64()
-  int a69;
-
-  @Uint64()
-  int a70;
-
-  @Uint64()
-  int a71;
-
-  @Uint64()
-  int a72;
-
-  @Uint64()
-  int a73;
-
-  @Uint64()
-  int a74;
-
-  @Uint64()
-  int a75;
-
-  @Uint64()
-  int a76;
-
-  @Uint64()
-  int a77;
-
-  @Uint64()
-  int a78;
-
-  @Uint64()
-  int a79;
-
-  @Uint64()
-  int a80;
-
-  @Uint64()
-  int a81;
-
-  @Uint64()
-  int a82;
-
-  @Uint64()
-  int a83;
-
-  @Uint64()
-  int a84;
-
-  @Uint64()
-  int a85;
-
-  @Uint64()
-  int a86;
-
-  @Uint64()
-  int a87;
-
-  @Uint64()
-  int a88;
-
-  @Uint64()
-  int a89;
-
-  @Uint64()
-  int a90;
-
-  @Uint64()
-  int a91;
-
-  @Uint64()
-  int a92;
-
-  @Uint64()
-  int a93;
-
-  @Uint64()
-  int a94;
-
-  @Uint64()
-  int a95;
-
-  @Uint64()
-  int a96;
-
-  @Uint64()
-  int a97;
-
-  @Uint64()
-  int a98;
-
-  @Uint64()
-  int a99;
-
-  @Uint64()
-  int a100;
-
-  @Uint64()
-  int a101;
-
-  @Uint64()
-  int a102;
-
-  @Uint64()
-  int a103;
-
-  @Uint64()
-  int a104;
-
-  @Uint64()
-  int a105;
-
-  @Uint64()
-  int a106;
-
-  @Uint64()
-  int a107;
-
-  @Uint64()
-  int a108;
-
-  @Uint64()
-  int a109;
-
-  @Uint64()
-  int a110;
-
-  @Uint64()
-  int a111;
-
-  @Uint64()
-  int a112;
-
-  @Uint64()
-  int a113;
-
-  @Uint64()
-  int a114;
-
-  @Uint64()
-  int a115;
-
-  @Uint64()
-  int a116;
-
-  @Uint64()
-  int a117;
-
-  @Uint64()
-  int a118;
-
-  @Uint64()
-  int a119;
-
-  @Uint64()
-  int a120;
-
-  @Uint64()
-  int a121;
-
-  @Uint64()
-  int a122;
-
-  @Uint64()
-  int a123;
-
-  @Uint64()
-  int a124;
-
-  @Uint64()
-  int a125;
-
-  @Uint64()
-  int a126;
-
-  @Uint64()
-  int a127;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18}, ${a19}, ${a20}, ${a21}, ${a22}, ${a23}, ${a24}, ${a25}, ${a26}, ${a27}, ${a28}, ${a29}, ${a30}, ${a31}, ${a32}, ${a33}, ${a34}, ${a35}, ${a36}, ${a37}, ${a38}, ${a39}, ${a40}, ${a41}, ${a42}, ${a43}, ${a44}, ${a45}, ${a46}, ${a47}, ${a48}, ${a49}, ${a50}, ${a51}, ${a52}, ${a53}, ${a54}, ${a55}, ${a56}, ${a57}, ${a58}, ${a59}, ${a60}, ${a61}, ${a62}, ${a63}, ${a64}, ${a65}, ${a66}, ${a67}, ${a68}, ${a69}, ${a70}, ${a71}, ${a72}, ${a73}, ${a74}, ${a75}, ${a76}, ${a77}, ${a78}, ${a79}, ${a80}, ${a81}, ${a82}, ${a83}, ${a84}, ${a85}, ${a86}, ${a87}, ${a88}, ${a89}, ${a90}, ${a91}, ${a92}, ${a93}, ${a94}, ${a95}, ${a96}, ${a97}, ${a98}, ${a99}, ${a100}, ${a101}, ${a102}, ${a103}, ${a104}, ${a105}, ${a106}, ${a107}, ${a108}, ${a109}, ${a110}, ${a111}, ${a112}, ${a113}, ${a114}, ${a115}, ${a116}, ${a117}, ${a118}, ${a119}, ${a120}, ${a121}, ${a122}, ${a123}, ${a124}, ${a125}, ${a126}, ${a127})";
-}
-
-class StructAlignmentInt16 extends Struct {
-  @Int8()
-  int a0;
-
-  @Int16()
-  int a1;
-
-  @Int8()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class StructAlignmentInt32 extends Struct {
-  @Int8()
-  int a0;
-
-  @Int32()
-  int a1;
-
-  @Int8()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class StructAlignmentInt64 extends Struct {
-  @Int8()
-  int a0;
-
-  @Int64()
-  int a1;
-
-  @Int8()
-  int a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
-class Struct8BytesNestedInt extends Struct {
-  Struct4BytesHomogeneousInt16 a0;
-
-  Struct4BytesHomogeneousInt16 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesNestedFloat extends Struct {
-  Struct4BytesFloat a0;
-
-  Struct4BytesFloat a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesNestedFloat2 extends Struct {
-  Struct4BytesFloat a0;
-
-  @Float()
-  double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct8BytesNestedMixed extends Struct {
-  Struct4BytesHomogeneousInt16 a0;
-
-  Struct4BytesFloat a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct16BytesNestedInt extends Struct {
-  Struct8BytesNestedInt a0;
-
-  Struct8BytesNestedInt a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct32BytesNestedInt extends Struct {
-  Struct16BytesNestedInt a0;
-
-  Struct16BytesNestedInt a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIntStructAlignmentInt16 extends Struct {
-  StructAlignmentInt16 a0;
-
-  StructAlignmentInt16 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIntStructAlignmentInt32 extends Struct {
-  StructAlignmentInt32 a0;
-
-  StructAlignmentInt32 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIntStructAlignmentInt64 extends Struct {
-  StructAlignmentInt64 a0;
-
-  StructAlignmentInt64 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedIrregularBig extends Struct {
-  @Uint16()
-  int a0;
-
-  Struct8BytesNestedMixed a1;
-
-  @Uint16()
-  int a2;
-
-  Struct8BytesNestedFloat2 a3;
-
-  @Uint16()
-  int a4;
-
-  Struct8BytesNestedFloat a5;
-
-  @Uint16()
-  int a6;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})";
-}
-
-class StructNestedIrregularBigger extends Struct {
-  StructNestedIrregularBig a0;
-
-  Struct8BytesNestedMixed a1;
-
-  @Float()
-  double a2;
-
-  @Double()
-  double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class StructNestedIrregularEvenBigger extends Struct {
-  @Uint64()
-  int a0;
-
-  StructNestedIrregularBigger a1;
-
-  StructNestedIrregularBigger a2;
-
-  @Double()
-  double a3;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3})";
-}
-
-class Struct8BytesInlineArrayInt extends Struct {
-  @Array(8)
-  Array<Uint8> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 8; i0 += 1) a0[i0]]})";
-}
-
-class StructInlineArrayIrregular extends Struct {
-  @Array(2)
-  Array<Struct3BytesInt2ByteAligned> a0;
-
-  @Uint8()
-  int a1;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]}, ${a1})";
-}
-
-class StructInlineArray100Bytes extends Struct {
-  @Array(100)
-  Array<Uint8> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 100; i0 += 1) a0[i0]]})";
-}
-
-class StructInlineArrayBig extends Struct {
-  @Uint32()
-  int a0;
-
-  @Uint32()
-  int a1;
-
-  @Array(4000)
-  Array<Uint8> a2;
-
-  String toString() =>
-      "(${a0}, ${a1}, ${[for (var i0 = 0; i0 < 4000; i0 += 1) a2[i0]]})";
-}
-
-class StructStruct16BytesHomogeneousFloat2 extends Struct {
-  Struct4BytesFloat a0;
-
-  @Array(2)
-  Array<Struct4BytesFloat> a1;
-
-  @Float()
-  double a2;
-
-  String toString() =>
-      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
-}
-
-class StructStruct32BytesHomogeneousDouble2 extends Struct {
-  Struct8BytesFloat a0;
-
-  @Array(2)
-  Array<Struct8BytesFloat> a1;
-
-  @Double()
-  double a2;
-
-  String toString() =>
-      "(${a0}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a1[i0]]}, ${a2})";
-}
-
-class StructStruct16BytesMixed3 extends Struct {
-  Struct4BytesFloat a0;
-
-  @Array(1)
-  Array<Struct8BytesMixed> a1;
-
-  @Array(2)
-  Array<Int16> a2;
-
-  String toString() => "(${a0}, ${[
-        for (var i0 = 0; i0 < 1; i0 += 1) a1[i0]
-      ]}, ${[for (var i0 = 0; i0 < 2; i0 += 1) a2[i0]]})";
-}
-
-class Struct8BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array(2, 2, 2)
-  Array<Array<Array<Uint8>>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [
-            for (var i1 = 0; i1 < 2; i1 += 1)
-              [for (var i2 = 0; i2 < 2; i2 += 1) a0[i0][i1][i2]]
-          ]
-      ]})";
-}
-
-class Struct32BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array(2, 2, 2, 2, 2)
-  Array<Array<Array<Array<Array<Uint8>>>>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [
-            for (var i1 = 0; i1 < 2; i1 += 1)
-              [
-                for (var i2 = 0; i2 < 2; i2 += 1)
-                  [
-                    for (var i3 = 0; i3 < 2; i3 += 1)
-                      [for (var i4 = 0; i4 < 2; i4 += 1) a0[i0][i1][i2][i3][i4]]
-                  ]
-              ]
-          ]
-      ]})";
-}
-
-class Struct64BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array.multi([2, 2, 2, 2, 2, 2])
-  Array<Array<Array<Array<Array<Array<Uint8>>>>>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [
-            for (var i1 = 0; i1 < 2; i1 += 1)
-              [
-                for (var i2 = 0; i2 < 2; i2 += 1)
-                  [
-                    for (var i3 = 0; i3 < 2; i3 += 1)
-                      [
-                        for (var i4 = 0; i4 < 2; i4 += 1)
-                          [
-                            for (var i5 = 0; i5 < 2; i5 += 1)
-                              a0[i0][i1][i2][i3][i4][i5]
-                          ]
-                      ]
-                  ]
-              ]
-          ]
-      ]})";
-}
-
-class Struct4BytesInlineArrayMultiDimensionalInt extends Struct {
-  @Array(2, 2)
-  Array<Array<Struct1ByteInt>> a0;
-
-  String toString() => "(${[
-        for (var i0 = 0; i0 < 2; i0 += 1)
-          [for (var i1 = 0; i1 < 2; i1 += 1) a0[i0][i1]]
-      ]})";
-}
-
-@Packed(1)
-class Struct3BytesPackedInt extends Struct {
-  @Int8()
-  int a0;
-
-  @Int16()
-  int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-@Packed(1)
-class Struct3BytesPackedIntMembersAligned extends Struct {
-  @Int8()
-  int a0;
-
-  @Int16()
-  int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-@Packed(1)
-class Struct5BytesPackedMixed extends Struct {
-  @Float()
-  double a0;
-
-  @Uint8()
-  int a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class StructNestedAlignmentStruct5BytesPackedMixed extends Struct {
-  @Uint8()
-  int a0;
-
-  Struct5BytesPackedMixed a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct6BytesInlineArrayInt extends Struct {
-  @Array(2)
-  Array<Struct3BytesPackedIntMembersAligned> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 2; i0 += 1) a0[i0]]})";
-}
-
-@Packed(1)
-class Struct8BytesPackedInt extends Struct {
-  @Uint8()
-  int a0;
-
-  @Uint32()
-  int a1;
-
-  @Uint8()
-  int a2;
-
-  @Uint8()
-  int a3;
-
-  @Uint8()
-  int a4;
-
-  String toString() => "(${a0}, ${a1}, ${a2}, ${a3}, ${a4})";
-}
-
-@Packed(1)
-class Struct9BytesPackedMixed extends Struct {
-  @Uint8()
-  int a0;
-
-  @Double()
-  double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Struct15BytesInlineArrayMixed extends Struct {
-  @Array(3)
-  Array<Struct5BytesPackedMixed> a0;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 3; i0 += 1) a0[i0]]})";
-}
-
-class Union4BytesMixed extends Union {
-  @Uint32()
-  int a0;
-
-  @Float()
-  double a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Union8BytesNestedFloat extends Union {
-  @Double()
-  double a0;
-
-  Struct8BytesHomogeneousFloat a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Union9BytesNestedInt extends Union {
-  Struct8BytesInt a0;
-
-  Struct9BytesHomogeneousUint8 a1;
-
-  String toString() => "(${a0}, ${a1})";
-}
-
-class Union16BytesNestedInlineArrayFloat extends Union {
-  @Array(4)
-  Array<Float> a0;
-
-  Struct16BytesHomogeneousFloat a1;
-
-  String toString() => "(${[for (var i0 = 0; i0 < 4; i0 += 1) a0[i0]]}, ${a1})";
-}
-
-class Union16BytesNestedFloat extends Union {
-  Struct8BytesHomogeneousFloat a0;
-
-  Struct12BytesHomogeneousFloat a1;
-
-  Struct16BytesHomogeneousFloat a2;
-
-  String toString() => "(${a0}, ${a1}, ${a2})";
-}
-
 final passStruct1ByteIntx10 = ffiTestFunctions.lookupFunction<
     Int64 Function(
         Struct1ByteInt,
@@ -8889,7545 +7578,3 @@
   calloc.free(a1Pointer);
   calloc.free(a2Pointer);
 }
-
-final passStruct1ByteIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt),
-    int Function(
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt,
-        Struct1ByteInt)>("PassStruct1ByteIntx10", isLeaf: true);
-
-/// Smallest struct with data.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct1ByteIntx10Leaf() {
-  final a0Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a1.a0 = 2;
-  a2.a0 = -3;
-  a3.a0 = 4;
-  a4.a0 = -5;
-  a5.a0 = 6;
-  a6.a0 = -7;
-  a7.a0 = 8;
-  a8.a0 = -9;
-  a9.a0 = 10;
-
-  final result =
-      passStruct1ByteIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(5, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct3BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8),
-        int Function(
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8,
-            Struct3BytesHomogeneousUint8)>(
-    "PassStruct3BytesHomogeneousUint8x10",
-    isLeaf: true);
-
-/// Not a multiple of word size, not a power of two.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct3BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct3BytesHomogeneousUint8>();
-  final Struct3BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a1.a0 = 4;
-  a1.a1 = 5;
-  a1.a2 = 6;
-  a2.a0 = 7;
-  a2.a1 = 8;
-  a2.a2 = 9;
-  a3.a0 = 10;
-  a3.a1 = 11;
-  a3.a2 = 12;
-  a4.a0 = 13;
-  a4.a1 = 14;
-  a4.a2 = 15;
-  a5.a0 = 16;
-  a5.a1 = 17;
-  a5.a2 = 18;
-  a6.a0 = 19;
-  a6.a1 = 20;
-  a6.a2 = 21;
-  a7.a0 = 22;
-  a7.a1 = 23;
-  a7.a2 = 24;
-  a8.a0 = 25;
-  a8.a1 = 26;
-  a8.a2 = 27;
-  a9.a0 = 28;
-  a9.a1 = 29;
-  a9.a2 = 30;
-
-  final result = passStruct3BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(465, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct3BytesInt2ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned),
-        int Function(
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned,
-            Struct3BytesInt2ByteAligned)>("PassStruct3BytesInt2ByteAlignedx10",
-    isLeaf: true);
-
-/// Not a multiple of word size, not a power of two.
-/// With alignment rules taken into account size is 4 bytes.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct3BytesInt2ByteAlignedx10Leaf() {
-  final a0Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct3BytesInt2ByteAligned>();
-  final Struct3BytesInt2ByteAligned a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result = passStruct3BytesInt2ByteAlignedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct4BytesHomogeneousInt16x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16),
-        int Function(
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16,
-            Struct4BytesHomogeneousInt16)>(
-    "PassStruct4BytesHomogeneousInt16x10",
-    isLeaf: true);
-
-/// Exactly word size on 32-bit architectures.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct4BytesHomogeneousInt16x10Leaf() {
-  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result = passStruct4BytesHomogeneousInt16x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct7BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8),
-        int Function(
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8,
-            Struct7BytesHomogeneousUint8)>(
-    "PassStruct7BytesHomogeneousUint8x10",
-    isLeaf: true);
-
-/// Sub word size on 64 bit architectures.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct7BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct7BytesHomogeneousUint8>();
-  final Struct7BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a1.a0 = 8;
-  a1.a1 = 9;
-  a1.a2 = 10;
-  a1.a3 = 11;
-  a1.a4 = 12;
-  a1.a5 = 13;
-  a1.a6 = 14;
-  a2.a0 = 15;
-  a2.a1 = 16;
-  a2.a2 = 17;
-  a2.a3 = 18;
-  a2.a4 = 19;
-  a2.a5 = 20;
-  a2.a6 = 21;
-  a3.a0 = 22;
-  a3.a1 = 23;
-  a3.a2 = 24;
-  a3.a3 = 25;
-  a3.a4 = 26;
-  a3.a5 = 27;
-  a3.a6 = 28;
-  a4.a0 = 29;
-  a4.a1 = 30;
-  a4.a2 = 31;
-  a4.a3 = 32;
-  a4.a4 = 33;
-  a4.a5 = 34;
-  a4.a6 = 35;
-  a5.a0 = 36;
-  a5.a1 = 37;
-  a5.a2 = 38;
-  a5.a3 = 39;
-  a5.a4 = 40;
-  a5.a5 = 41;
-  a5.a6 = 42;
-  a6.a0 = 43;
-  a6.a1 = 44;
-  a6.a2 = 45;
-  a6.a3 = 46;
-  a6.a4 = 47;
-  a6.a5 = 48;
-  a6.a6 = 49;
-  a7.a0 = 50;
-  a7.a1 = 51;
-  a7.a2 = 52;
-  a7.a3 = 53;
-  a7.a4 = 54;
-  a7.a5 = 55;
-  a7.a6 = 56;
-  a8.a0 = 57;
-  a8.a1 = 58;
-  a8.a2 = 59;
-  a8.a3 = 60;
-  a8.a4 = 61;
-  a8.a5 = 62;
-  a8.a6 = 63;
-  a9.a0 = 64;
-  a9.a1 = 65;
-  a9.a2 = 66;
-  a9.a3 = 67;
-  a9.a4 = 68;
-  a9.a5 = 69;
-  a9.a6 = 70;
-
-  final result = passStruct7BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(2485, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct7BytesInt4ByteAlignedx10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned),
-        int Function(
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned,
-            Struct7BytesInt4ByteAligned)>("PassStruct7BytesInt4ByteAlignedx10",
-    isLeaf: true);
-
-/// Sub word size on 64 bit architectures.
-/// With alignment rules taken into account size is 8 bytes.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct7BytesInt4ByteAlignedx10Leaf() {
-  final a0Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct7BytesInt4ByteAligned>();
-  final Struct7BytesInt4ByteAligned a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result = passStruct7BytesInt4ByteAlignedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(15, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt),
-    int Function(
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt,
-        Struct8BytesInt)>("PassStruct8BytesIntx10", isLeaf: true);
-
-/// Exactly word size struct on 64bit architectures.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct8BytesIntx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result =
-      passStruct8BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(15, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesHomogeneousFloatx10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat),
-        double Function(
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat,
-            Struct8BytesHomogeneousFloat)>(
-    "PassStruct8BytesHomogeneousFloatx10",
-    isLeaf: true);
-
-/// Arguments passed in FP registers as long as they fit.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct8BytesHomogeneousFloatx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a1.a0 = -3.0;
-  a1.a1 = 4.0;
-  a2.a0 = -5.0;
-  a2.a1 = 6.0;
-  a3.a0 = -7.0;
-  a3.a1 = 8.0;
-  a4.a0 = -9.0;
-  a4.a1 = 10.0;
-  a5.a0 = -11.0;
-  a5.a1 = 12.0;
-  a6.a0 = -13.0;
-  a6.a1 = 14.0;
-  a7.a0 = -15.0;
-  a7.a1 = 16.0;
-  a8.a0 = -17.0;
-  a8.a1 = 18.0;
-  a9.a0 = -19.0;
-  a9.a1 = 20.0;
-
-  final result = passStruct8BytesHomogeneousFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
-    Float Function(
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed),
-    double Function(
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed,
-        Struct8BytesMixed)>("PassStruct8BytesMixedx10", isLeaf: true);
-
-/// On x64, arguments go in int registers because it is not only float.
-/// 10 struct arguments will exhaust available registers.
-void testPassStruct8BytesMixedx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4.0;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7.0;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10.0;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13.0;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16.0;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19.0;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22.0;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25.0;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28.0;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result =
-      passStruct8BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(15.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct9BytesHomogeneousUint8x10Leaf = ffiTestFunctions.lookupFunction<
-        Int64 Function(
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8),
-        int Function(
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8,
-            Struct9BytesHomogeneousUint8)>(
-    "PassStruct9BytesHomogeneousUint8x10",
-    isLeaf: true);
-
-/// Argument is a single byte over a multiple of word size.
-/// 10 struct arguments will exhaust available registers.
-/// Struct only has 1-byte aligned fields to test struct alignment itself.
-/// Tests upper bytes in the integer registers that are partly filled.
-/// Tests stack alignment of non word size stack arguments.
-void testPassStruct9BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct9BytesHomogeneousUint8>();
-  final Struct9BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a0.a7 = 8;
-  a0.a8 = 9;
-  a1.a0 = 10;
-  a1.a1 = 11;
-  a1.a2 = 12;
-  a1.a3 = 13;
-  a1.a4 = 14;
-  a1.a5 = 15;
-  a1.a6 = 16;
-  a1.a7 = 17;
-  a1.a8 = 18;
-  a2.a0 = 19;
-  a2.a1 = 20;
-  a2.a2 = 21;
-  a2.a3 = 22;
-  a2.a4 = 23;
-  a2.a5 = 24;
-  a2.a6 = 25;
-  a2.a7 = 26;
-  a2.a8 = 27;
-  a3.a0 = 28;
-  a3.a1 = 29;
-  a3.a2 = 30;
-  a3.a3 = 31;
-  a3.a4 = 32;
-  a3.a5 = 33;
-  a3.a6 = 34;
-  a3.a7 = 35;
-  a3.a8 = 36;
-  a4.a0 = 37;
-  a4.a1 = 38;
-  a4.a2 = 39;
-  a4.a3 = 40;
-  a4.a4 = 41;
-  a4.a5 = 42;
-  a4.a6 = 43;
-  a4.a7 = 44;
-  a4.a8 = 45;
-  a5.a0 = 46;
-  a5.a1 = 47;
-  a5.a2 = 48;
-  a5.a3 = 49;
-  a5.a4 = 50;
-  a5.a5 = 51;
-  a5.a6 = 52;
-  a5.a7 = 53;
-  a5.a8 = 54;
-  a6.a0 = 55;
-  a6.a1 = 56;
-  a6.a2 = 57;
-  a6.a3 = 58;
-  a6.a4 = 59;
-  a6.a5 = 60;
-  a6.a6 = 61;
-  a6.a7 = 62;
-  a6.a8 = 63;
-  a7.a0 = 64;
-  a7.a1 = 65;
-  a7.a2 = 66;
-  a7.a3 = 67;
-  a7.a4 = 68;
-  a7.a5 = 69;
-  a7.a6 = 70;
-  a7.a7 = 71;
-  a7.a8 = 72;
-  a8.a0 = 73;
-  a8.a1 = 74;
-  a8.a2 = 75;
-  a8.a3 = 76;
-  a8.a4 = 77;
-  a8.a5 = 78;
-  a8.a6 = 79;
-  a8.a7 = 80;
-  a8.a8 = 81;
-  a9.a0 = 82;
-  a9.a1 = 83;
-  a9.a2 = 84;
-  a9.a3 = 85;
-  a9.a4 = 86;
-  a9.a5 = 87;
-  a9.a6 = 88;
-  a9.a7 = 89;
-  a9.a8 = 90;
-
-  final result = passStruct9BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(4095, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct9BytesInt4Or8ByteAlignedx10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned),
-            int Function(
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned,
-                Struct9BytesInt4Or8ByteAligned)>(
-        "PassStruct9BytesInt4Or8ByteAlignedx10",
-        isLeaf: true);
-
-/// Argument is a single byte over a multiple of word size.
-/// With alignment rules taken into account size is 12 or 16 bytes.
-/// 10 struct arguments will exhaust available registers.
-///
-void testPassStruct9BytesInt4Or8ByteAlignedx10Leaf() {
-  final a0Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct9BytesInt4Or8ByteAligned>();
-  final Struct9BytesInt4Or8ByteAligned a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result = passStruct9BytesInt4Or8ByteAlignedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct12BytesHomogeneousFloatx6Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat),
-        double Function(
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat,
-            Struct12BytesHomogeneousFloat)>(
-    "PassStruct12BytesHomogeneousFloatx6",
-    isLeaf: true);
-
-/// Arguments in FPU registers on arm hardfp and arm64.
-/// Struct arguments will exhaust available registers, and leave some empty.
-/// The last argument is to test whether arguments are backfilled.
-void testPassStruct12BytesHomogeneousFloatx6Leaf() {
-  final a0Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct12BytesHomogeneousFloat>();
-  final Struct12BytesHomogeneousFloat a5 = a5Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a1.a0 = 4.0;
-  a1.a1 = -5.0;
-  a1.a2 = 6.0;
-  a2.a0 = -7.0;
-  a2.a1 = 8.0;
-  a2.a2 = -9.0;
-  a3.a0 = 10.0;
-  a3.a1 = -11.0;
-  a3.a2 = 12.0;
-  a4.a0 = -13.0;
-  a4.a1 = 14.0;
-  a4.a2 = -15.0;
-  a5.a0 = 16.0;
-  a5.a1 = -17.0;
-  a5.a2 = 18.0;
-
-  final result =
-      passStruct12BytesHomogeneousFloatx6Leaf(a0, a1, a2, a3, a4, a5);
-
-  print("result = $result");
-
-  Expect.approxEquals(9.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-}
-
-final passStruct16BytesHomogeneousFloatx5Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat),
-        double Function(
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat,
-            Struct16BytesHomogeneousFloat)>(
-    "PassStruct16BytesHomogeneousFloatx5",
-    isLeaf: true);
-
-/// On Linux x64 argument is transferred on stack because it is over 16 bytes.
-/// Arguments in FPU registers on arm hardfp and arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStruct16BytesHomogeneousFloatx5Leaf() {
-  final a0Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a4 = a4Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a1.a0 = -5.0;
-  a1.a1 = 6.0;
-  a1.a2 = -7.0;
-  a1.a3 = 8.0;
-  a2.a0 = -9.0;
-  a2.a1 = 10.0;
-  a2.a2 = -11.0;
-  a2.a3 = 12.0;
-  a3.a0 = -13.0;
-  a3.a1 = 14.0;
-  a3.a2 = -15.0;
-  a3.a3 = 16.0;
-  a4.a0 = -17.0;
-  a4.a1 = 18.0;
-  a4.a2 = -19.0;
-  a4.a3 = 20.0;
-
-  final result = passStruct16BytesHomogeneousFloatx5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStruct16BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed),
-    double Function(
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed,
-        Struct16BytesMixed)>("PassStruct16BytesMixedx10", isLeaf: true);
-
-/// On x64, arguments are split over FP and int registers.
-/// On x64, it will exhaust the integer registers with the 6th argument.
-/// The rest goes on the stack.
-/// On arm, arguments are 8 byte aligned.
-void testPassStruct16BytesMixedx10Leaf() {
-  final a0Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2;
-  a1.a0 = -3.0;
-  a1.a1 = 4;
-  a2.a0 = -5.0;
-  a2.a1 = 6;
-  a3.a0 = -7.0;
-  a3.a1 = 8;
-  a4.a0 = -9.0;
-  a4.a1 = 10;
-  a5.a0 = -11.0;
-  a5.a1 = 12;
-  a6.a0 = -13.0;
-  a6.a1 = 14;
-  a7.a0 = -15.0;
-  a7.a1 = 16;
-  a8.a0 = -17.0;
-  a8.a1 = 18;
-  a9.a0 = -19.0;
-  a9.a1 = 20;
-
-  final result =
-      passStruct16BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct16BytesMixed2x10Leaf = ffiTestFunctions.lookupFunction<
-    Float Function(
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2),
-    double Function(
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2,
-        Struct16BytesMixed2)>("PassStruct16BytesMixed2x10", isLeaf: true);
-
-/// On x64, arguments are split over FP and int registers.
-/// On x64, it will exhaust the integer registers with the 6th argument.
-/// The rest goes on the stack.
-/// On arm, arguments are 4 byte aligned.
-void testPassStruct16BytesMixed2x10Leaf() {
-  final a0Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct16BytesMixed2>();
-  final Struct16BytesMixed2 a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4;
-  a1.a0 = -5.0;
-  a1.a1 = 6.0;
-  a1.a2 = -7.0;
-  a1.a3 = 8;
-  a2.a0 = -9.0;
-  a2.a1 = 10.0;
-  a2.a2 = -11.0;
-  a2.a3 = 12;
-  a3.a0 = -13.0;
-  a3.a1 = 14.0;
-  a3.a2 = -15.0;
-  a3.a3 = 16;
-  a4.a0 = -17.0;
-  a4.a1 = 18.0;
-  a4.a2 = -19.0;
-  a4.a3 = 20;
-  a5.a0 = -21.0;
-  a5.a1 = 22.0;
-  a5.a2 = -23.0;
-  a5.a3 = 24;
-  a6.a0 = -25.0;
-  a6.a1 = 26.0;
-  a6.a2 = -27.0;
-  a6.a3 = 28;
-  a7.a0 = -29.0;
-  a7.a1 = 30.0;
-  a7.a2 = -31.0;
-  a7.a3 = 32;
-  a8.a0 = -33.0;
-  a8.a1 = 34.0;
-  a8.a2 = -35.0;
-  a8.a3 = 36;
-  a9.a0 = -37.0;
-  a9.a1 = 38.0;
-  a9.a2 = -39.0;
-  a9.a3 = 40;
-
-  final result =
-      passStruct16BytesMixed2x10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(20.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct17BytesIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt),
-    int Function(
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt,
-        Struct17BytesInt)>("PassStruct17BytesIntx10", isLeaf: true);
-
-/// Arguments are passed as pointer to copy on arm64.
-/// Tests that the memory allocated for copies are rounded up to word size.
-void testPassStruct17BytesIntx10Leaf() {
-  final a0Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct17BytesInt>();
-  final Struct17BytesInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-  a2.a0 = -7;
-  a2.a1 = 8;
-  a2.a2 = -9;
-  a3.a0 = 10;
-  a3.a1 = -11;
-  a3.a2 = 12;
-  a4.a0 = -13;
-  a4.a1 = 14;
-  a4.a2 = -15;
-  a5.a0 = 16;
-  a5.a1 = -17;
-  a5.a2 = 18;
-  a6.a0 = -19;
-  a6.a1 = 20;
-  a6.a2 = -21;
-  a7.a0 = 22;
-  a7.a1 = -23;
-  a7.a2 = 24;
-  a8.a0 = -25;
-  a8.a1 = 26;
-  a8.a2 = -27;
-  a9.a0 = 28;
-  a9.a1 = -29;
-  a9.a2 = 30;
-
-  final result =
-      passStruct17BytesIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(15, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct19BytesHomogeneousUint8x10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8),
-            int Function(
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8,
-                Struct19BytesHomogeneousUint8)>(
-        "PassStruct19BytesHomogeneousUint8x10",
-        isLeaf: true);
-
-/// The minimum alignment of this struct is only 1 byte based on its fields.
-/// Test that the memory backing these structs is extended to the right size.
-///
-void testPassStruct19BytesHomogeneousUint8x10Leaf() {
-  final a0Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct19BytesHomogeneousUint8>();
-  final Struct19BytesHomogeneousUint8 a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a0.a7 = 8;
-  a0.a8 = 9;
-  a0.a9 = 10;
-  a0.a10 = 11;
-  a0.a11 = 12;
-  a0.a12 = 13;
-  a0.a13 = 14;
-  a0.a14 = 15;
-  a0.a15 = 16;
-  a0.a16 = 17;
-  a0.a17 = 18;
-  a0.a18 = 19;
-  a1.a0 = 20;
-  a1.a1 = 21;
-  a1.a2 = 22;
-  a1.a3 = 23;
-  a1.a4 = 24;
-  a1.a5 = 25;
-  a1.a6 = 26;
-  a1.a7 = 27;
-  a1.a8 = 28;
-  a1.a9 = 29;
-  a1.a10 = 30;
-  a1.a11 = 31;
-  a1.a12 = 32;
-  a1.a13 = 33;
-  a1.a14 = 34;
-  a1.a15 = 35;
-  a1.a16 = 36;
-  a1.a17 = 37;
-  a1.a18 = 38;
-  a2.a0 = 39;
-  a2.a1 = 40;
-  a2.a2 = 41;
-  a2.a3 = 42;
-  a2.a4 = 43;
-  a2.a5 = 44;
-  a2.a6 = 45;
-  a2.a7 = 46;
-  a2.a8 = 47;
-  a2.a9 = 48;
-  a2.a10 = 49;
-  a2.a11 = 50;
-  a2.a12 = 51;
-  a2.a13 = 52;
-  a2.a14 = 53;
-  a2.a15 = 54;
-  a2.a16 = 55;
-  a2.a17 = 56;
-  a2.a18 = 57;
-  a3.a0 = 58;
-  a3.a1 = 59;
-  a3.a2 = 60;
-  a3.a3 = 61;
-  a3.a4 = 62;
-  a3.a5 = 63;
-  a3.a6 = 64;
-  a3.a7 = 65;
-  a3.a8 = 66;
-  a3.a9 = 67;
-  a3.a10 = 68;
-  a3.a11 = 69;
-  a3.a12 = 70;
-  a3.a13 = 71;
-  a3.a14 = 72;
-  a3.a15 = 73;
-  a3.a16 = 74;
-  a3.a17 = 75;
-  a3.a18 = 76;
-  a4.a0 = 77;
-  a4.a1 = 78;
-  a4.a2 = 79;
-  a4.a3 = 80;
-  a4.a4 = 81;
-  a4.a5 = 82;
-  a4.a6 = 83;
-  a4.a7 = 84;
-  a4.a8 = 85;
-  a4.a9 = 86;
-  a4.a10 = 87;
-  a4.a11 = 88;
-  a4.a12 = 89;
-  a4.a13 = 90;
-  a4.a14 = 91;
-  a4.a15 = 92;
-  a4.a16 = 93;
-  a4.a17 = 94;
-  a4.a18 = 95;
-  a5.a0 = 96;
-  a5.a1 = 97;
-  a5.a2 = 98;
-  a5.a3 = 99;
-  a5.a4 = 100;
-  a5.a5 = 101;
-  a5.a6 = 102;
-  a5.a7 = 103;
-  a5.a8 = 104;
-  a5.a9 = 105;
-  a5.a10 = 106;
-  a5.a11 = 107;
-  a5.a12 = 108;
-  a5.a13 = 109;
-  a5.a14 = 110;
-  a5.a15 = 111;
-  a5.a16 = 112;
-  a5.a17 = 113;
-  a5.a18 = 114;
-  a6.a0 = 115;
-  a6.a1 = 116;
-  a6.a2 = 117;
-  a6.a3 = 118;
-  a6.a4 = 119;
-  a6.a5 = 120;
-  a6.a6 = 121;
-  a6.a7 = 122;
-  a6.a8 = 123;
-  a6.a9 = 124;
-  a6.a10 = 125;
-  a6.a11 = 126;
-  a6.a12 = 127;
-  a6.a13 = 128;
-  a6.a14 = 129;
-  a6.a15 = 130;
-  a6.a16 = 131;
-  a6.a17 = 132;
-  a6.a18 = 133;
-  a7.a0 = 134;
-  a7.a1 = 135;
-  a7.a2 = 136;
-  a7.a3 = 137;
-  a7.a4 = 138;
-  a7.a5 = 139;
-  a7.a6 = 140;
-  a7.a7 = 141;
-  a7.a8 = 142;
-  a7.a9 = 143;
-  a7.a10 = 144;
-  a7.a11 = 145;
-  a7.a12 = 146;
-  a7.a13 = 147;
-  a7.a14 = 148;
-  a7.a15 = 149;
-  a7.a16 = 150;
-  a7.a17 = 151;
-  a7.a18 = 152;
-  a8.a0 = 153;
-  a8.a1 = 154;
-  a8.a2 = 155;
-  a8.a3 = 156;
-  a8.a4 = 157;
-  a8.a5 = 158;
-  a8.a6 = 159;
-  a8.a7 = 160;
-  a8.a8 = 161;
-  a8.a9 = 162;
-  a8.a10 = 163;
-  a8.a11 = 164;
-  a8.a12 = 165;
-  a8.a13 = 166;
-  a8.a14 = 167;
-  a8.a15 = 168;
-  a8.a16 = 169;
-  a8.a17 = 170;
-  a8.a18 = 171;
-  a9.a0 = 172;
-  a9.a1 = 173;
-  a9.a2 = 174;
-  a9.a3 = 175;
-  a9.a4 = 176;
-  a9.a5 = 177;
-  a9.a6 = 178;
-  a9.a7 = 179;
-  a9.a8 = 180;
-  a9.a9 = 181;
-  a9.a10 = 182;
-  a9.a11 = 183;
-  a9.a12 = 184;
-  a9.a13 = 185;
-  a9.a14 = 186;
-  a9.a15 = 187;
-  a9.a16 = 188;
-  a9.a17 = 189;
-  a9.a18 = 190;
-
-  final result = passStruct19BytesHomogeneousUint8x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(18145, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct20BytesHomogeneousInt32x10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int32 Function(
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32),
-            int Function(
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32,
-                Struct20BytesHomogeneousInt32)>(
-        "PassStruct20BytesHomogeneousInt32x10",
-        isLeaf: true);
-
-/// Argument too big to go into integer registers on arm64.
-/// The arguments are passed as pointers to copies.
-/// The amount of arguments exhausts the number of integer registers, such that
-/// pointers to copies are also passed on the stack.
-void testPassStruct20BytesHomogeneousInt32x10Leaf() {
-  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a0.a3 = 4;
-  a0.a4 = -5;
-  a1.a0 = 6;
-  a1.a1 = -7;
-  a1.a2 = 8;
-  a1.a3 = -9;
-  a1.a4 = 10;
-  a2.a0 = -11;
-  a2.a1 = 12;
-  a2.a2 = -13;
-  a2.a3 = 14;
-  a2.a4 = -15;
-  a3.a0 = 16;
-  a3.a1 = -17;
-  a3.a2 = 18;
-  a3.a3 = -19;
-  a3.a4 = 20;
-  a4.a0 = -21;
-  a4.a1 = 22;
-  a4.a2 = -23;
-  a4.a3 = 24;
-  a4.a4 = -25;
-  a5.a0 = 26;
-  a5.a1 = -27;
-  a5.a2 = 28;
-  a5.a3 = -29;
-  a5.a4 = 30;
-  a6.a0 = -31;
-  a6.a1 = 32;
-  a6.a2 = -33;
-  a6.a3 = 34;
-  a6.a4 = -35;
-  a7.a0 = 36;
-  a7.a1 = -37;
-  a7.a2 = 38;
-  a7.a3 = -39;
-  a7.a4 = 40;
-  a8.a0 = -41;
-  a8.a1 = 42;
-  a8.a2 = -43;
-  a8.a3 = 44;
-  a8.a4 = -45;
-  a9.a0 = 46;
-  a9.a1 = -47;
-  a9.a2 = 48;
-  a9.a3 = -49;
-  a9.a4 = 50;
-
-  final result = passStruct20BytesHomogeneousInt32x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(25, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-        Float Function(Struct20BytesHomogeneousFloat),
-        double Function(Struct20BytesHomogeneousFloat)>(
-    "PassStruct20BytesHomogeneousFloat",
-    isLeaf: true);
-
-/// Argument too big to go into FPU registers in hardfp and arm64.
-void testPassStruct20BytesHomogeneousFloatLeaf() {
-  final a0Pointer = calloc<Struct20BytesHomogeneousFloat>();
-  final Struct20BytesHomogeneousFloat a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a0.a4 = -5.0;
-
-  final result = passStruct20BytesHomogeneousFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(-3.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct32BytesHomogeneousDoublex5Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble),
-            double Function(
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble,
-                Struct32BytesHomogeneousDouble)>(
-        "PassStruct32BytesHomogeneousDoublex5",
-        isLeaf: true);
-
-/// Arguments in FPU registers on arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStruct32BytesHomogeneousDoublex5Leaf() {
-  final a0Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a4 = a4Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a1.a0 = -5.0;
-  a1.a1 = 6.0;
-  a1.a2 = -7.0;
-  a1.a3 = 8.0;
-  a2.a0 = -9.0;
-  a2.a1 = 10.0;
-  a2.a2 = -11.0;
-  a2.a3 = 12.0;
-  a3.a0 = -13.0;
-  a3.a1 = 14.0;
-  a3.a2 = -15.0;
-  a3.a3 = 16.0;
-  a4.a0 = -17.0;
-  a4.a1 = 18.0;
-  a4.a2 = -19.0;
-  a4.a3 = 20.0;
-
-  final result = passStruct32BytesHomogeneousDoublex5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStruct40BytesHomogeneousDoubleLeaf = ffiTestFunctions.lookupFunction<
-        Double Function(Struct40BytesHomogeneousDouble),
-        double Function(Struct40BytesHomogeneousDouble)>(
-    "PassStruct40BytesHomogeneousDouble",
-    isLeaf: true);
-
-/// Argument too big to go into FPU registers in arm64.
-void testPassStruct40BytesHomogeneousDoubleLeaf() {
-  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
-  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a0.a4 = -5.0;
-
-  final result = passStruct40BytesHomogeneousDoubleLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(-3.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct1024BytesHomogeneousUint64Leaf =
-    ffiTestFunctions.lookupFunction<
-            Uint64 Function(Struct1024BytesHomogeneousUint64),
-            int Function(Struct1024BytesHomogeneousUint64)>(
-        "PassStruct1024BytesHomogeneousUint64",
-        isLeaf: true);
-
-/// Test 1kb struct.
-void testPassStruct1024BytesHomogeneousUint64Leaf() {
-  final a0Pointer = calloc<Struct1024BytesHomogeneousUint64>();
-  final Struct1024BytesHomogeneousUint64 a0 = a0Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a0.a5 = 6;
-  a0.a6 = 7;
-  a0.a7 = 8;
-  a0.a8 = 9;
-  a0.a9 = 10;
-  a0.a10 = 11;
-  a0.a11 = 12;
-  a0.a12 = 13;
-  a0.a13 = 14;
-  a0.a14 = 15;
-  a0.a15 = 16;
-  a0.a16 = 17;
-  a0.a17 = 18;
-  a0.a18 = 19;
-  a0.a19 = 20;
-  a0.a20 = 21;
-  a0.a21 = 22;
-  a0.a22 = 23;
-  a0.a23 = 24;
-  a0.a24 = 25;
-  a0.a25 = 26;
-  a0.a26 = 27;
-  a0.a27 = 28;
-  a0.a28 = 29;
-  a0.a29 = 30;
-  a0.a30 = 31;
-  a0.a31 = 32;
-  a0.a32 = 33;
-  a0.a33 = 34;
-  a0.a34 = 35;
-  a0.a35 = 36;
-  a0.a36 = 37;
-  a0.a37 = 38;
-  a0.a38 = 39;
-  a0.a39 = 40;
-  a0.a40 = 41;
-  a0.a41 = 42;
-  a0.a42 = 43;
-  a0.a43 = 44;
-  a0.a44 = 45;
-  a0.a45 = 46;
-  a0.a46 = 47;
-  a0.a47 = 48;
-  a0.a48 = 49;
-  a0.a49 = 50;
-  a0.a50 = 51;
-  a0.a51 = 52;
-  a0.a52 = 53;
-  a0.a53 = 54;
-  a0.a54 = 55;
-  a0.a55 = 56;
-  a0.a56 = 57;
-  a0.a57 = 58;
-  a0.a58 = 59;
-  a0.a59 = 60;
-  a0.a60 = 61;
-  a0.a61 = 62;
-  a0.a62 = 63;
-  a0.a63 = 64;
-  a0.a64 = 65;
-  a0.a65 = 66;
-  a0.a66 = 67;
-  a0.a67 = 68;
-  a0.a68 = 69;
-  a0.a69 = 70;
-  a0.a70 = 71;
-  a0.a71 = 72;
-  a0.a72 = 73;
-  a0.a73 = 74;
-  a0.a74 = 75;
-  a0.a75 = 76;
-  a0.a76 = 77;
-  a0.a77 = 78;
-  a0.a78 = 79;
-  a0.a79 = 80;
-  a0.a80 = 81;
-  a0.a81 = 82;
-  a0.a82 = 83;
-  a0.a83 = 84;
-  a0.a84 = 85;
-  a0.a85 = 86;
-  a0.a86 = 87;
-  a0.a87 = 88;
-  a0.a88 = 89;
-  a0.a89 = 90;
-  a0.a90 = 91;
-  a0.a91 = 92;
-  a0.a92 = 93;
-  a0.a93 = 94;
-  a0.a94 = 95;
-  a0.a95 = 96;
-  a0.a96 = 97;
-  a0.a97 = 98;
-  a0.a98 = 99;
-  a0.a99 = 100;
-  a0.a100 = 101;
-  a0.a101 = 102;
-  a0.a102 = 103;
-  a0.a103 = 104;
-  a0.a104 = 105;
-  a0.a105 = 106;
-  a0.a106 = 107;
-  a0.a107 = 108;
-  a0.a108 = 109;
-  a0.a109 = 110;
-  a0.a110 = 111;
-  a0.a111 = 112;
-  a0.a112 = 113;
-  a0.a113 = 114;
-  a0.a114 = 115;
-  a0.a115 = 116;
-  a0.a116 = 117;
-  a0.a117 = 118;
-  a0.a118 = 119;
-  a0.a119 = 120;
-  a0.a120 = 121;
-  a0.a121 = 122;
-  a0.a122 = 123;
-  a0.a123 = 124;
-  a0.a124 = 125;
-  a0.a125 = 126;
-  a0.a126 = 127;
-  a0.a127 = 128;
-
-  final result = passStruct1024BytesHomogeneousUint64Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(8256, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf =
-    ffiTestFunctions.lookupFunction<
-            Float Function(
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float,
-                Struct16BytesHomogeneousFloat,
-                Float),
-            double Function(
-                double,
-                Struct16BytesHomogeneousFloat,
-                double,
-                Struct16BytesHomogeneousFloat,
-                double,
-                Struct16BytesHomogeneousFloat,
-                double,
-                Struct16BytesHomogeneousFloat,
-                double)>("PassFloatStruct16BytesHomogeneousFloatFloatStruct1",
-        isLeaf: true);
-
-/// Tests the alignment of structs in FPU registers and backfilling.
-void testPassFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf() {
-  double a0;
-  final a1Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a1 = a1Pointer.ref;
-  double a2;
-  final a3Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a3 = a3Pointer.ref;
-  double a4;
-  final a5Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a5 = a5Pointer.ref;
-  double a6;
-  final a7Pointer = calloc<Struct16BytesHomogeneousFloat>();
-  final Struct16BytesHomogeneousFloat a7 = a7Pointer.ref;
-  double a8;
-
-  a0 = -1.0;
-  a1.a0 = 2.0;
-  a1.a1 = -3.0;
-  a1.a2 = 4.0;
-  a1.a3 = -5.0;
-  a2 = 6.0;
-  a3.a0 = -7.0;
-  a3.a1 = 8.0;
-  a3.a2 = -9.0;
-  a3.a3 = 10.0;
-  a4 = -11.0;
-  a5.a0 = 12.0;
-  a5.a1 = -13.0;
-  a5.a2 = 14.0;
-  a5.a3 = -15.0;
-  a6 = 16.0;
-  a7.a0 = -17.0;
-  a7.a1 = 18.0;
-  a7.a2 = -19.0;
-  a7.a3 = 20.0;
-  a8 = -21.0;
-
-  final result = passFloatStruct16BytesHomogeneousFloatFloatStruct1Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-11.0, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float,
-                Struct32BytesHomogeneousDouble,
-                Float),
-            double Function(
-                double,
-                Struct32BytesHomogeneousDouble,
-                double,
-                Struct32BytesHomogeneousDouble,
-                double,
-                Struct32BytesHomogeneousDouble,
-                double,
-                Struct32BytesHomogeneousDouble,
-                double)>("PassFloatStruct32BytesHomogeneousDoubleFloatStruct",
-        isLeaf: true);
-
-/// Tests the alignment of structs in FPU registers and backfilling.
-void testPassFloatStruct32BytesHomogeneousDoubleFloatStructLeaf() {
-  double a0;
-  final a1Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a1 = a1Pointer.ref;
-  double a2;
-  final a3Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a3 = a3Pointer.ref;
-  double a4;
-  final a5Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a5 = a5Pointer.ref;
-  double a6;
-  final a7Pointer = calloc<Struct32BytesHomogeneousDouble>();
-  final Struct32BytesHomogeneousDouble a7 = a7Pointer.ref;
-  double a8;
-
-  a0 = -1.0;
-  a1.a0 = 2.0;
-  a1.a1 = -3.0;
-  a1.a2 = 4.0;
-  a1.a3 = -5.0;
-  a2 = 6.0;
-  a3.a0 = -7.0;
-  a3.a1 = 8.0;
-  a3.a2 = -9.0;
-  a3.a3 = 10.0;
-  a4 = -11.0;
-  a5.a0 = 12.0;
-  a5.a1 = -13.0;
-  a5.a2 = 14.0;
-  a5.a3 = -15.0;
-  a6 = 16.0;
-  a7.a0 = -17.0;
-  a7.a1 = 18.0;
-  a7.a2 = -19.0;
-  a7.a3 = 20.0;
-  a8 = -21.0;
-
-  final result = passFloatStruct32BytesHomogeneousDoubleFloatStructLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-11.0, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(Int8, Struct16BytesMixed, Int8, Struct16BytesMixed,
-                Int8, Struct16BytesMixed, Int8, Struct16BytesMixed, Int8),
-            double Function(
-                int,
-                Struct16BytesMixed,
-                int,
-                Struct16BytesMixed,
-                int,
-                Struct16BytesMixed,
-                int,
-                Struct16BytesMixed,
-                int)>("PassInt8Struct16BytesMixedInt8Struct16BytesMixedIn",
-        isLeaf: true);
-
-/// Tests the alignment of structs in integers registers and on the stack.
-/// Arm32 aligns this struct at 8.
-/// Also, arm32 allocates the second struct partially in registers, partially
-/// on stack.
-/// Test backfilling of integer registers.
-void testPassInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf() {
-  int a0;
-  final a1Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a1 = a1Pointer.ref;
-  int a2;
-  final a3Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a3 = a3Pointer.ref;
-  int a4;
-  final a5Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a5 = a5Pointer.ref;
-  int a6;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  int a8;
-
-  a0 = -1;
-  a1.a0 = 2.0;
-  a1.a1 = -3;
-  a2 = 4;
-  a3.a0 = -5.0;
-  a3.a1 = 6;
-  a4 = -7;
-  a5.a0 = 8.0;
-  a5.a1 = -9;
-  a6 = 10;
-  a7.a0 = -11.0;
-  a7.a1 = 12;
-  a8 = -13;
-
-  final result = passInt8Struct16BytesMixedInt8Struct16BytesMixedInLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-7.0, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passDoublex6Struct16BytesMixedx4Int32Leaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Int32),
-        double Function(
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            int)>("PassDoublex6Struct16BytesMixedx4Int32", isLeaf: true);
-
-/// On Linux x64, it will exhaust xmm registers first, after 6 doubles and 2
-/// structs. The rest of the structs will go on the stack.
-/// The int will be backfilled into the int register.
-void testPassDoublex6Struct16BytesMixedx4Int32Leaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-  double a4;
-  double a5;
-  final a6Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a9 = a9Pointer.ref;
-  int a10;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-  a4 = -5.0;
-  a5 = 6.0;
-  a6.a0 = -7.0;
-  a6.a1 = 8;
-  a7.a0 = -9.0;
-  a7.a1 = 10;
-  a8.a0 = -11.0;
-  a8.a1 = 12;
-  a9.a0 = -13.0;
-  a9.a1 = 14;
-  a10 = -15;
-
-  final result = passDoublex6Struct16BytesMixedx4Int32Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
-
-  print("result = $result");
-
-  Expect.approxEquals(-8.0, result);
-
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passInt32x4Struct16BytesMixedx4DoubleLeaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(Int32, Int32, Int32, Int32, Struct16BytesMixed,
-            Struct16BytesMixed, Struct16BytesMixed, Struct16BytesMixed, Double),
-        double Function(
-            int,
-            int,
-            int,
-            int,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            Struct16BytesMixed,
-            double)>("PassInt32x4Struct16BytesMixedx4Double", isLeaf: true);
-
-/// On Linux x64, it will exhaust int registers first.
-/// The rest of the structs will go on the stack.
-/// The double will be backfilled into the xmm register.
-void testPassInt32x4Struct16BytesMixedx4DoubleLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  final a4Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct16BytesMixed>();
-  final Struct16BytesMixed a7 = a7Pointer.ref;
-  double a8;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4.a0 = -5.0;
-  a4.a1 = 6;
-  a5.a0 = -7.0;
-  a5.a1 = 8;
-  a6.a0 = -9.0;
-  a6.a1 = 10;
-  a7.a0 = -11.0;
-  a7.a1 = 12;
-  a8 = -13.0;
-
-  final result = passInt32x4Struct16BytesMixedx4DoubleLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.approxEquals(-7.0, result);
-
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-}
-
-final passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(Struct40BytesHomogeneousDouble,
-                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat),
-            double Function(Struct40BytesHomogeneousDouble,
-                Struct4BytesHomogeneousInt16, Struct8BytesHomogeneousFloat)>(
-        "PassStruct40BytesHomogeneousDoubleStruct4BytesHomo",
-        isLeaf: true);
-
-/// On various architectures, first struct is allocated on stack.
-/// Check that the other two arguments are allocated on registers.
-void testPassStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf() {
-  final a0Pointer = calloc<Struct40BytesHomogeneousDouble>();
-  final Struct40BytesHomogeneousDouble a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a2 = a2Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a0.a2 = -3.0;
-  a0.a3 = 4.0;
-  a0.a4 = -5.0;
-  a1.a0 = 6;
-  a1.a1 = -7;
-  a2.a0 = 8.0;
-  a2.a1 = -9.0;
-
-  final result =
-      passStruct40BytesHomogeneousDoubleStruct4BytesHomoLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.approxEquals(-5.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-}
-
-final passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Int32,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Double,
-            Int64,
-            Int8,
-            Struct1ByteInt,
-            Int64,
-            Int8,
-            Struct4BytesHomogeneousInt16,
-            Int64,
-            Int8,
-            Struct8BytesInt,
-            Int64,
-            Int8,
-            Struct8BytesHomogeneousFloat,
-            Int64,
-            Int8,
-            Struct8BytesMixed,
-            Int64,
-            Int8,
-            StructAlignmentInt16,
-            Int64,
-            Int8,
-            StructAlignmentInt32,
-            Int64,
-            Int8,
-            StructAlignmentInt64),
-        double Function(
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            double,
-            int,
-            int,
-            Struct1ByteInt,
-            int,
-            int,
-            Struct4BytesHomogeneousInt16,
-            int,
-            int,
-            Struct8BytesInt,
-            int,
-            int,
-            Struct8BytesHomogeneousFloat,
-            int,
-            int,
-            Struct8BytesMixed,
-            int,
-            int,
-            StructAlignmentInt16,
-            int,
-            int,
-            StructAlignmentInt32,
-            int,
-            int,
-            StructAlignmentInt64)>("PassInt32x8Doublex8Int64Int8Struct1ByteIntInt64Int", isLeaf: true);
-
-/// Test alignment and padding of 16 byte int within struct.
-void testPassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  double a8;
-  double a9;
-  double a10;
-  double a11;
-  double a12;
-  double a13;
-  double a14;
-  double a15;
-  int a16;
-  int a17;
-  final a18Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a18 = a18Pointer.ref;
-  int a19;
-  int a20;
-  final a21Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a21 = a21Pointer.ref;
-  int a22;
-  int a23;
-  final a24Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a24 = a24Pointer.ref;
-  int a25;
-  int a26;
-  final a27Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a27 = a27Pointer.ref;
-  int a28;
-  int a29;
-  final a30Pointer = calloc<Struct8BytesMixed>();
-  final Struct8BytesMixed a30 = a30Pointer.ref;
-  int a31;
-  int a32;
-  final a33Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a33 = a33Pointer.ref;
-  int a34;
-  int a35;
-  final a36Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a36 = a36Pointer.ref;
-  int a37;
-  int a38;
-  final a39Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a39 = a39Pointer.ref;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-  a5 = 6;
-  a6 = -7;
-  a7 = 8;
-  a8 = -9.0;
-  a9 = 10.0;
-  a10 = -11.0;
-  a11 = 12.0;
-  a12 = -13.0;
-  a13 = 14.0;
-  a14 = -15.0;
-  a15 = 16.0;
-  a16 = -17;
-  a17 = 18;
-  a18.a0 = -19;
-  a19 = 20;
-  a20 = -21;
-  a21.a0 = 22;
-  a21.a1 = -23;
-  a22 = 24;
-  a23 = -25;
-  a24.a0 = 26;
-  a24.a1 = -27;
-  a24.a2 = 28;
-  a25 = -29;
-  a26 = 30;
-  a27.a0 = -31.0;
-  a27.a1 = 32.0;
-  a28 = -33;
-  a29 = 34;
-  a30.a0 = -35.0;
-  a30.a1 = 36;
-  a30.a2 = -37;
-  a31 = 38;
-  a32 = -39;
-  a33.a0 = 40;
-  a33.a1 = -41;
-  a33.a2 = 42;
-  a34 = -43;
-  a35 = 44;
-  a36.a0 = -45;
-  a36.a1 = 46;
-  a36.a2 = -47;
-  a37 = 48;
-  a38 = -49;
-  a39.a0 = 50;
-  a39.a1 = -51;
-  a39.a2 = 52;
-
-  final result = passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntLeaf(
-      a0,
-      a1,
-      a2,
-      a3,
-      a4,
-      a5,
-      a6,
-      a7,
-      a8,
-      a9,
-      a10,
-      a11,
-      a12,
-      a13,
-      a14,
-      a15,
-      a16,
-      a17,
-      a18,
-      a19,
-      a20,
-      a21,
-      a22,
-      a23,
-      a24,
-      a25,
-      a26,
-      a27,
-      a28,
-      a29,
-      a30,
-      a31,
-      a32,
-      a33,
-      a34,
-      a35,
-      a36,
-      a37,
-      a38,
-      a39);
-
-  print("result = $result");
-
-  Expect.approxEquals(26.0, result);
-
-  calloc.free(a18Pointer);
-  calloc.free(a21Pointer);
-  calloc.free(a24Pointer);
-  calloc.free(a27Pointer);
-  calloc.free(a30Pointer);
-  calloc.free(a33Pointer);
-  calloc.free(a36Pointer);
-  calloc.free(a39Pointer);
-}
-
-final passStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(StructAlignmentInt16),
-    int Function(
-        StructAlignmentInt16)>("PassStructAlignmentInt16", isLeaf: true);
-
-/// Test alignment and padding of 16 byte int within struct.
-void testPassStructAlignmentInt16Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = passStructAlignmentInt16Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(-2, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(StructAlignmentInt32),
-    int Function(
-        StructAlignmentInt32)>("PassStructAlignmentInt32", isLeaf: true);
-
-/// Test alignment and padding of 32 byte int within struct.
-void testPassStructAlignmentInt32Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = passStructAlignmentInt32Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(-2, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(StructAlignmentInt64),
-    int Function(
-        StructAlignmentInt64)>("PassStructAlignmentInt64", isLeaf: true);
-
-/// Test alignment and padding of 64 byte int within struct.
-void testPassStructAlignmentInt64Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = passStructAlignmentInt64Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(-2, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct8BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt),
-    int Function(
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt,
-        Struct8BytesNestedInt)>("PassStruct8BytesNestedIntx10", isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust registers on all platforms.
-void testPassStruct8BytesNestedIntx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a1.a0 = -3;
-  a0.a1.a1 = 4;
-  a1.a0.a0 = -5;
-  a1.a0.a1 = 6;
-  a1.a1.a0 = -7;
-  a1.a1.a1 = 8;
-  a2.a0.a0 = -9;
-  a2.a0.a1 = 10;
-  a2.a1.a0 = -11;
-  a2.a1.a1 = 12;
-  a3.a0.a0 = -13;
-  a3.a0.a1 = 14;
-  a3.a1.a0 = -15;
-  a3.a1.a1 = 16;
-  a4.a0.a0 = -17;
-  a4.a0.a1 = 18;
-  a4.a1.a0 = -19;
-  a4.a1.a1 = 20;
-  a5.a0.a0 = -21;
-  a5.a0.a1 = 22;
-  a5.a1.a0 = -23;
-  a5.a1.a1 = 24;
-  a6.a0.a0 = -25;
-  a6.a0.a1 = 26;
-  a6.a1.a0 = -27;
-  a6.a1.a1 = 28;
-  a7.a0.a0 = -29;
-  a7.a0.a1 = 30;
-  a7.a1.a0 = -31;
-  a7.a1.a1 = 32;
-  a8.a0.a0 = -33;
-  a8.a0.a1 = 34;
-  a8.a1.a0 = -35;
-  a8.a1.a1 = 36;
-  a9.a0.a0 = -37;
-  a9.a0.a1 = 38;
-  a9.a1.a0 = -39;
-  a9.a1.a1 = 40;
-
-  final result =
-      passStruct8BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(20, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat),
-        double Function(
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat,
-            Struct8BytesNestedFloat)>("PassStruct8BytesNestedFloatx10",
-    isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust fpu registers on all platforms.
-void testPassStruct8BytesNestedFloatx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedFloat>();
-  final Struct8BytesNestedFloat a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1.a0 = 2.0;
-  a1.a0.a0 = -3.0;
-  a1.a1.a0 = 4.0;
-  a2.a0.a0 = -5.0;
-  a2.a1.a0 = 6.0;
-  a3.a0.a0 = -7.0;
-  a3.a1.a0 = 8.0;
-  a4.a0.a0 = -9.0;
-  a4.a1.a0 = 10.0;
-  a5.a0.a0 = -11.0;
-  a5.a1.a0 = 12.0;
-  a6.a0.a0 = -13.0;
-  a6.a1.a0 = 14.0;
-  a7.a0.a0 = -15.0;
-  a7.a1.a0 = 16.0;
-  a8.a0.a0 = -17.0;
-  a8.a1.a0 = 18.0;
-  a9.a0.a0 = -19.0;
-  a9.a1.a0 = 20.0;
-
-  final result = passStruct8BytesNestedFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesNestedFloat2x10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2),
-        double Function(
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2,
-            Struct8BytesNestedFloat2)>("PassStruct8BytesNestedFloat2x10",
-    isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust fpu registers on all platforms.
-/// The nesting is irregular, testing homogenous float rules on arm and arm64,
-/// and the fpu register usage on x64.
-void testPassStruct8BytesNestedFloat2x10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedFloat2>();
-  final Struct8BytesNestedFloat2 a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1 = 2.0;
-  a1.a0.a0 = -3.0;
-  a1.a1 = 4.0;
-  a2.a0.a0 = -5.0;
-  a2.a1 = 6.0;
-  a3.a0.a0 = -7.0;
-  a3.a1 = 8.0;
-  a4.a0.a0 = -9.0;
-  a4.a1 = 10.0;
-  a5.a0.a0 = -11.0;
-  a5.a1 = 12.0;
-  a6.a0.a0 = -13.0;
-  a6.a1 = 14.0;
-  a7.a0.a0 = -15.0;
-  a7.a1 = 16.0;
-  a8.a0.a0 = -17.0;
-  a8.a1 = 18.0;
-  a9.a0.a0 = -19.0;
-  a9.a1 = 20.0;
-
-  final result = passStruct8BytesNestedFloat2x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesNestedMixedx10Leaf = ffiTestFunctions.lookupFunction<
-        Double Function(
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed),
-        double Function(
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed,
-            Struct8BytesNestedMixed)>("PassStruct8BytesNestedMixedx10",
-    isLeaf: true);
-
-/// Simple nested struct. No alignment gaps on any architectures.
-/// 10 arguments exhaust all registers on all platforms.
-void testPassStruct8BytesNestedMixedx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesNestedMixed>();
-  final Struct8BytesNestedMixed a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a1.a0 = -3.0;
-  a1.a0.a0 = 4;
-  a1.a0.a1 = -5;
-  a1.a1.a0 = 6.0;
-  a2.a0.a0 = -7;
-  a2.a0.a1 = 8;
-  a2.a1.a0 = -9.0;
-  a3.a0.a0 = 10;
-  a3.a0.a1 = -11;
-  a3.a1.a0 = 12.0;
-  a4.a0.a0 = -13;
-  a4.a0.a1 = 14;
-  a4.a1.a0 = -15.0;
-  a5.a0.a0 = 16;
-  a5.a0.a1 = -17;
-  a5.a1.a0 = 18.0;
-  a6.a0.a0 = -19;
-  a6.a0.a1 = 20;
-  a6.a1.a0 = -21.0;
-  a7.a0.a0 = 22;
-  a7.a0.a1 = -23;
-  a7.a1.a0 = 24.0;
-  a8.a0.a0 = -25;
-  a8.a0.a1 = 26;
-  a8.a1.a0 = -27.0;
-  a9.a0.a0 = 28;
-  a9.a0.a1 = -29;
-  a9.a1.a0 = 30.0;
-
-  final result = passStruct8BytesNestedMixedx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(15.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct16BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(Struct16BytesNestedInt, Struct16BytesNestedInt),
-    int Function(Struct16BytesNestedInt,
-        Struct16BytesNestedInt)>("PassStruct16BytesNestedIntx2", isLeaf: true);
-
-/// Deeper nested struct to test recursive member access.
-void testPassStruct16BytesNestedIntx2Leaf() {
-  final a0Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0.a0 = -1;
-  a0.a0.a0.a1 = 2;
-  a0.a0.a1.a0 = -3;
-  a0.a0.a1.a1 = 4;
-  a0.a1.a0.a0 = -5;
-  a0.a1.a0.a1 = 6;
-  a0.a1.a1.a0 = -7;
-  a0.a1.a1.a1 = 8;
-  a1.a0.a0.a0 = -9;
-  a1.a0.a0.a1 = 10;
-  a1.a0.a1.a0 = -11;
-  a1.a0.a1.a1 = 12;
-  a1.a1.a0.a0 = -13;
-  a1.a1.a0.a1 = 14;
-  a1.a1.a1.a0 = -15;
-  a1.a1.a1.a1 = 16;
-
-  final result = passStruct16BytesNestedIntx2Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(8, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final passStruct32BytesNestedIntx2Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(Struct32BytesNestedInt, Struct32BytesNestedInt),
-    int Function(Struct32BytesNestedInt,
-        Struct32BytesNestedInt)>("PassStruct32BytesNestedIntx2", isLeaf: true);
-
-/// Even deeper nested struct to test recursive member access.
-void testPassStruct32BytesNestedIntx2Leaf() {
-  final a0Pointer = calloc<Struct32BytesNestedInt>();
-  final Struct32BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct32BytesNestedInt>();
-  final Struct32BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0.a0.a0 = -1;
-  a0.a0.a0.a0.a1 = 2;
-  a0.a0.a0.a1.a0 = -3;
-  a0.a0.a0.a1.a1 = 4;
-  a0.a0.a1.a0.a0 = -5;
-  a0.a0.a1.a0.a1 = 6;
-  a0.a0.a1.a1.a0 = -7;
-  a0.a0.a1.a1.a1 = 8;
-  a0.a1.a0.a0.a0 = -9;
-  a0.a1.a0.a0.a1 = 10;
-  a0.a1.a0.a1.a0 = -11;
-  a0.a1.a0.a1.a1 = 12;
-  a0.a1.a1.a0.a0 = -13;
-  a0.a1.a1.a0.a1 = 14;
-  a0.a1.a1.a1.a0 = -15;
-  a0.a1.a1.a1.a1 = 16;
-  a1.a0.a0.a0.a0 = -17;
-  a1.a0.a0.a0.a1 = 18;
-  a1.a0.a0.a1.a0 = -19;
-  a1.a0.a0.a1.a1 = 20;
-  a1.a0.a1.a0.a0 = -21;
-  a1.a0.a1.a0.a1 = 22;
-  a1.a0.a1.a1.a0 = -23;
-  a1.a0.a1.a1.a1 = 24;
-  a1.a1.a0.a0.a0 = -25;
-  a1.a1.a0.a0.a1 = 26;
-  a1.a1.a0.a1.a0 = -27;
-  a1.a1.a0.a1.a1 = 28;
-  a1.a1.a1.a0.a0 = -29;
-  a1.a1.a1.a0.a1 = 30;
-  a1.a1.a1.a1.a0 = -31;
-  a1.a1.a1.a1.a1 = 32;
-
-  final result = passStruct32BytesNestedIntx2Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(16, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final passStructNestedIntStructAlignmentInt16Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(StructNestedIntStructAlignmentInt16),
-            int Function(StructNestedIntStructAlignmentInt16)>(
-        "PassStructNestedIntStructAlignmentInt16",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 16 byte int.
-void testPassStructNestedIntStructAlignmentInt16Leaf() {
-  final a0Pointer = calloc<StructNestedIntStructAlignmentInt16>();
-  final StructNestedIntStructAlignmentInt16 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a0.a1.a0 = 4;
-  a0.a1.a1 = -5;
-  a0.a1.a2 = 6;
-
-  final result = passStructNestedIntStructAlignmentInt16Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(3, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedIntStructAlignmentInt32Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(StructNestedIntStructAlignmentInt32),
-            int Function(StructNestedIntStructAlignmentInt32)>(
-        "PassStructNestedIntStructAlignmentInt32",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 32 byte int.
-void testPassStructNestedIntStructAlignmentInt32Leaf() {
-  final a0Pointer = calloc<StructNestedIntStructAlignmentInt32>();
-  final StructNestedIntStructAlignmentInt32 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a0.a1.a0 = 4;
-  a0.a1.a1 = -5;
-  a0.a1.a2 = 6;
-
-  final result = passStructNestedIntStructAlignmentInt32Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(3, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedIntStructAlignmentInt64Leaf =
-    ffiTestFunctions.lookupFunction<
-            Int64 Function(StructNestedIntStructAlignmentInt64),
-            int Function(StructNestedIntStructAlignmentInt64)>(
-        "PassStructNestedIntStructAlignmentInt64",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 64 byte int.
-void testPassStructNestedIntStructAlignmentInt64Leaf() {
-  final a0Pointer = calloc<StructNestedIntStructAlignmentInt64>();
-  final StructNestedIntStructAlignmentInt64 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a0.a1.a0 = 4;
-  a0.a1.a1 = -5;
-  a0.a1.a2 = 6;
-
-  final result = passStructNestedIntStructAlignmentInt64Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(3, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedIrregularEvenBiggerx4Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger),
-            double Function(
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger,
-                StructNestedIrregularEvenBigger)>(
-        "PassStructNestedIrregularEvenBiggerx4",
-        isLeaf: true);
-
-/// Return big irregular struct as smoke test.
-void testPassStructNestedIrregularEvenBiggerx4Leaf() {
-  final a0Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructNestedIrregularEvenBigger>();
-  final StructNestedIrregularEvenBigger a3 = a3Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1.a0.a0 = 2;
-  a0.a1.a0.a1.a0.a0 = -3;
-  a0.a1.a0.a1.a0.a1 = 4;
-  a0.a1.a0.a1.a1.a0 = -5.0;
-  a0.a1.a0.a2 = 6;
-  a0.a1.a0.a3.a0.a0 = -7.0;
-  a0.a1.a0.a3.a1 = 8.0;
-  a0.a1.a0.a4 = 9;
-  a0.a1.a0.a5.a0.a0 = 10.0;
-  a0.a1.a0.a5.a1.a0 = -11.0;
-  a0.a1.a0.a6 = 12;
-  a0.a1.a1.a0.a0 = -13;
-  a0.a1.a1.a0.a1 = 14;
-  a0.a1.a1.a1.a0 = -15.0;
-  a0.a1.a2 = 16.0;
-  a0.a1.a3 = -17.0;
-  a0.a2.a0.a0 = 18;
-  a0.a2.a0.a1.a0.a0 = -19;
-  a0.a2.a0.a1.a0.a1 = 20;
-  a0.a2.a0.a1.a1.a0 = -21.0;
-  a0.a2.a0.a2 = 22;
-  a0.a2.a0.a3.a0.a0 = -23.0;
-  a0.a2.a0.a3.a1 = 24.0;
-  a0.a2.a0.a4 = 25;
-  a0.a2.a0.a5.a0.a0 = 26.0;
-  a0.a2.a0.a5.a1.a0 = -27.0;
-  a0.a2.a0.a6 = 28;
-  a0.a2.a1.a0.a0 = -29;
-  a0.a2.a1.a0.a1 = 30;
-  a0.a2.a1.a1.a0 = -31.0;
-  a0.a2.a2 = 32.0;
-  a0.a2.a3 = -33.0;
-  a0.a3 = 34.0;
-  a1.a0 = 35;
-  a1.a1.a0.a0 = 36;
-  a1.a1.a0.a1.a0.a0 = -37;
-  a1.a1.a0.a1.a0.a1 = 38;
-  a1.a1.a0.a1.a1.a0 = -39.0;
-  a1.a1.a0.a2 = 40;
-  a1.a1.a0.a3.a0.a0 = -41.0;
-  a1.a1.a0.a3.a1 = 42.0;
-  a1.a1.a0.a4 = 43;
-  a1.a1.a0.a5.a0.a0 = 44.0;
-  a1.a1.a0.a5.a1.a0 = -45.0;
-  a1.a1.a0.a6 = 46;
-  a1.a1.a1.a0.a0 = -47;
-  a1.a1.a1.a0.a1 = 48;
-  a1.a1.a1.a1.a0 = -49.0;
-  a1.a1.a2 = 50.0;
-  a1.a1.a3 = -51.0;
-  a1.a2.a0.a0 = 52;
-  a1.a2.a0.a1.a0.a0 = -53;
-  a1.a2.a0.a1.a0.a1 = 54;
-  a1.a2.a0.a1.a1.a0 = -55.0;
-  a1.a2.a0.a2 = 56;
-  a1.a2.a0.a3.a0.a0 = -57.0;
-  a1.a2.a0.a3.a1 = 58.0;
-  a1.a2.a0.a4 = 59;
-  a1.a2.a0.a5.a0.a0 = 60.0;
-  a1.a2.a0.a5.a1.a0 = -61.0;
-  a1.a2.a0.a6 = 62;
-  a1.a2.a1.a0.a0 = -63;
-  a1.a2.a1.a0.a1 = 64;
-  a1.a2.a1.a1.a0 = -65.0;
-  a1.a2.a2 = 66.0;
-  a1.a2.a3 = -67.0;
-  a1.a3 = 68.0;
-  a2.a0 = 69;
-  a2.a1.a0.a0 = 70;
-  a2.a1.a0.a1.a0.a0 = -71;
-  a2.a1.a0.a1.a0.a1 = 72;
-  a2.a1.a0.a1.a1.a0 = -73.0;
-  a2.a1.a0.a2 = 74;
-  a2.a1.a0.a3.a0.a0 = -75.0;
-  a2.a1.a0.a3.a1 = 76.0;
-  a2.a1.a0.a4 = 77;
-  a2.a1.a0.a5.a0.a0 = 78.0;
-  a2.a1.a0.a5.a1.a0 = -79.0;
-  a2.a1.a0.a6 = 80;
-  a2.a1.a1.a0.a0 = -81;
-  a2.a1.a1.a0.a1 = 82;
-  a2.a1.a1.a1.a0 = -83.0;
-  a2.a1.a2 = 84.0;
-  a2.a1.a3 = -85.0;
-  a2.a2.a0.a0 = 86;
-  a2.a2.a0.a1.a0.a0 = -87;
-  a2.a2.a0.a1.a0.a1 = 88;
-  a2.a2.a0.a1.a1.a0 = -89.0;
-  a2.a2.a0.a2 = 90;
-  a2.a2.a0.a3.a0.a0 = -91.0;
-  a2.a2.a0.a3.a1 = 92.0;
-  a2.a2.a0.a4 = 93;
-  a2.a2.a0.a5.a0.a0 = 94.0;
-  a2.a2.a0.a5.a1.a0 = -95.0;
-  a2.a2.a0.a6 = 96;
-  a2.a2.a1.a0.a0 = -97;
-  a2.a2.a1.a0.a1 = 98;
-  a2.a2.a1.a1.a0 = -99.0;
-  a2.a2.a2 = 100.0;
-  a2.a2.a3 = -101.0;
-  a2.a3 = 102.0;
-  a3.a0 = 103;
-  a3.a1.a0.a0 = 104;
-  a3.a1.a0.a1.a0.a0 = -105;
-  a3.a1.a0.a1.a0.a1 = 106;
-  a3.a1.a0.a1.a1.a0 = -107.0;
-  a3.a1.a0.a2 = 108;
-  a3.a1.a0.a3.a0.a0 = -109.0;
-  a3.a1.a0.a3.a1 = 110.0;
-  a3.a1.a0.a4 = 111;
-  a3.a1.a0.a5.a0.a0 = 112.0;
-  a3.a1.a0.a5.a1.a0 = -113.0;
-  a3.a1.a0.a6 = 114;
-  a3.a1.a1.a0.a0 = -115;
-  a3.a1.a1.a0.a1 = 116;
-  a3.a1.a1.a1.a0 = -117.0;
-  a3.a1.a2 = 118.0;
-  a3.a1.a3 = -119.0;
-  a3.a2.a0.a0 = 120;
-  a3.a2.a0.a1.a0.a0 = -121;
-  a3.a2.a0.a1.a0.a1 = 122;
-  a3.a2.a0.a1.a1.a0 = -123.0;
-  a3.a2.a0.a2 = 124;
-  a3.a2.a0.a3.a0.a0 = -125.0;
-  a3.a2.a0.a3.a1 = 126.0;
-  a3.a2.a0.a4 = 127;
-  a3.a2.a0.a5.a0.a0 = 128.0;
-  a3.a2.a0.a5.a1.a0 = -129.0;
-  a3.a2.a0.a6 = 130;
-  a3.a2.a1.a0.a0 = -131;
-  a3.a2.a1.a0.a1 = 132;
-  a3.a2.a1.a1.a0 = -133.0;
-  a3.a2.a2 = 134.0;
-  a3.a2.a3 = -135.0;
-  a3.a3 = 136.0;
-
-  final result = passStructNestedIrregularEvenBiggerx4Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(1572.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-}
-
-final passStruct8BytesInlineArrayIntx4Leaf = ffiTestFunctions.lookupFunction<
-        Int32 Function(Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt, Struct8BytesInlineArrayInt),
-        int Function(
-            Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt,
-            Struct8BytesInlineArrayInt)>("PassStruct8BytesInlineArrayIntx4",
-    isLeaf: true);
-
-/// Simple struct with inline array.
-void testPassStruct8BytesInlineArrayIntx4Leaf() {
-  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a3 = a3Pointer.ref;
-
-  a0.a0[0] = 1;
-  a0.a0[1] = 2;
-  a0.a0[2] = 3;
-  a0.a0[3] = 4;
-  a0.a0[4] = 5;
-  a0.a0[5] = 6;
-  a0.a0[6] = 7;
-  a0.a0[7] = 8;
-  a1.a0[0] = 9;
-  a1.a0[1] = 10;
-  a1.a0[2] = 11;
-  a1.a0[3] = 12;
-  a1.a0[4] = 13;
-  a1.a0[5] = 14;
-  a1.a0[6] = 15;
-  a1.a0[7] = 16;
-  a2.a0[0] = 17;
-  a2.a0[1] = 18;
-  a2.a0[2] = 19;
-  a2.a0[3] = 20;
-  a2.a0[4] = 21;
-  a2.a0[5] = 22;
-  a2.a0[6] = 23;
-  a2.a0[7] = 24;
-  a3.a0[0] = 25;
-  a3.a0[1] = 26;
-  a3.a0[2] = 27;
-  a3.a0[3] = 28;
-  a3.a0[4] = 29;
-  a3.a0[5] = 30;
-  a3.a0[6] = 31;
-  a3.a0[7] = 32;
-
-  final result = passStruct8BytesInlineArrayIntx4Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.equals(528, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-}
-
-final passStructInlineArrayIrregularx4Leaf = ffiTestFunctions.lookupFunction<
-        Int32 Function(StructInlineArrayIrregular, StructInlineArrayIrregular,
-            StructInlineArrayIrregular, StructInlineArrayIrregular),
-        int Function(
-            StructInlineArrayIrregular,
-            StructInlineArrayIrregular,
-            StructInlineArrayIrregular,
-            StructInlineArrayIrregular)>("PassStructInlineArrayIrregularx4",
-    isLeaf: true);
-
-/// Irregular struct with inline array.
-void testPassStructInlineArrayIrregularx4Leaf() {
-  final a0Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructInlineArrayIrregular>();
-  final StructInlineArrayIrregular a3 = a3Pointer.ref;
-
-  a0.a0[0].a0 = -1;
-  a0.a0[0].a1 = 2;
-  a0.a0[1].a0 = -3;
-  a0.a0[1].a1 = 4;
-  a0.a1 = 5;
-  a1.a0[0].a0 = 6;
-  a1.a0[0].a1 = -7;
-  a1.a0[1].a0 = 8;
-  a1.a0[1].a1 = -9;
-  a1.a1 = 10;
-  a2.a0[0].a0 = -11;
-  a2.a0[0].a1 = 12;
-  a2.a0[1].a0 = -13;
-  a2.a0[1].a1 = 14;
-  a2.a1 = 15;
-  a3.a0[0].a0 = 16;
-  a3.a0[0].a1 = -17;
-  a3.a0[1].a0 = 18;
-  a3.a0[1].a1 = -19;
-  a3.a1 = 20;
-
-  final result = passStructInlineArrayIrregularx4Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.equals(50, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-}
-
-final passStructInlineArray100BytesLeaf = ffiTestFunctions.lookupFunction<
-        Int32 Function(StructInlineArray100Bytes),
-        int Function(StructInlineArray100Bytes)>(
-    "PassStructInlineArray100Bytes",
-    isLeaf: true);
-
-/// Regular larger struct with inline array.
-void testPassStructInlineArray100BytesLeaf() {
-  final a0Pointer = calloc<StructInlineArray100Bytes>();
-  final StructInlineArray100Bytes a0 = a0Pointer.ref;
-
-  a0.a0[0] = 1;
-  a0.a0[1] = 2;
-  a0.a0[2] = 3;
-  a0.a0[3] = 4;
-  a0.a0[4] = 5;
-  a0.a0[5] = 6;
-  a0.a0[6] = 7;
-  a0.a0[7] = 8;
-  a0.a0[8] = 9;
-  a0.a0[9] = 10;
-  a0.a0[10] = 11;
-  a0.a0[11] = 12;
-  a0.a0[12] = 13;
-  a0.a0[13] = 14;
-  a0.a0[14] = 15;
-  a0.a0[15] = 16;
-  a0.a0[16] = 17;
-  a0.a0[17] = 18;
-  a0.a0[18] = 19;
-  a0.a0[19] = 20;
-  a0.a0[20] = 21;
-  a0.a0[21] = 22;
-  a0.a0[22] = 23;
-  a0.a0[23] = 24;
-  a0.a0[24] = 25;
-  a0.a0[25] = 26;
-  a0.a0[26] = 27;
-  a0.a0[27] = 28;
-  a0.a0[28] = 29;
-  a0.a0[29] = 30;
-  a0.a0[30] = 31;
-  a0.a0[31] = 32;
-  a0.a0[32] = 33;
-  a0.a0[33] = 34;
-  a0.a0[34] = 35;
-  a0.a0[35] = 36;
-  a0.a0[36] = 37;
-  a0.a0[37] = 38;
-  a0.a0[38] = 39;
-  a0.a0[39] = 40;
-  a0.a0[40] = 41;
-  a0.a0[41] = 42;
-  a0.a0[42] = 43;
-  a0.a0[43] = 44;
-  a0.a0[44] = 45;
-  a0.a0[45] = 46;
-  a0.a0[46] = 47;
-  a0.a0[47] = 48;
-  a0.a0[48] = 49;
-  a0.a0[49] = 50;
-  a0.a0[50] = 51;
-  a0.a0[51] = 52;
-  a0.a0[52] = 53;
-  a0.a0[53] = 54;
-  a0.a0[54] = 55;
-  a0.a0[55] = 56;
-  a0.a0[56] = 57;
-  a0.a0[57] = 58;
-  a0.a0[58] = 59;
-  a0.a0[59] = 60;
-  a0.a0[60] = 61;
-  a0.a0[61] = 62;
-  a0.a0[62] = 63;
-  a0.a0[63] = 64;
-  a0.a0[64] = 65;
-  a0.a0[65] = 66;
-  a0.a0[66] = 67;
-  a0.a0[67] = 68;
-  a0.a0[68] = 69;
-  a0.a0[69] = 70;
-  a0.a0[70] = 71;
-  a0.a0[71] = 72;
-  a0.a0[72] = 73;
-  a0.a0[73] = 74;
-  a0.a0[74] = 75;
-  a0.a0[75] = 76;
-  a0.a0[76] = 77;
-  a0.a0[77] = 78;
-  a0.a0[78] = 79;
-  a0.a0[79] = 80;
-  a0.a0[80] = 81;
-  a0.a0[81] = 82;
-  a0.a0[82] = 83;
-  a0.a0[83] = 84;
-  a0.a0[84] = 85;
-  a0.a0[85] = 86;
-  a0.a0[86] = 87;
-  a0.a0[87] = 88;
-  a0.a0[88] = 89;
-  a0.a0[89] = 90;
-  a0.a0[90] = 91;
-  a0.a0[91] = 92;
-  a0.a0[92] = 93;
-  a0.a0[93] = 94;
-  a0.a0[94] = 95;
-  a0.a0[95] = 96;
-  a0.a0[96] = 97;
-  a0.a0[97] = 98;
-  a0.a0[98] = 99;
-  a0.a0[99] = 100;
-
-  final result = passStructInlineArray100BytesLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(5050, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructStruct16BytesHomogeneousFloat2x5Leaf =
-    ffiTestFunctions.lookupFunction<
-            Float Function(
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2),
-            double Function(
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2,
-                StructStruct16BytesHomogeneousFloat2)>(
-        "PassStructStruct16BytesHomogeneousFloat2x5",
-        isLeaf: true);
-
-/// Arguments in FPU registers on arm hardfp and arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStructStruct16BytesHomogeneousFloat2x5Leaf() {
-  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a4 = a4Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-  a1.a0.a0 = -5.0;
-  a1.a1[0].a0 = 6.0;
-  a1.a1[1].a0 = -7.0;
-  a1.a2 = 8.0;
-  a2.a0.a0 = -9.0;
-  a2.a1[0].a0 = 10.0;
-  a2.a1[1].a0 = -11.0;
-  a2.a2 = 12.0;
-  a3.a0.a0 = -13.0;
-  a3.a1[0].a0 = 14.0;
-  a3.a1[1].a0 = -15.0;
-  a3.a2 = 16.0;
-  a4.a0.a0 = -17.0;
-  a4.a1[0].a0 = 18.0;
-  a4.a1[1].a0 = -19.0;
-  a4.a2 = 20.0;
-
-  final result =
-      passStructStruct16BytesHomogeneousFloat2x5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStructStruct32BytesHomogeneousDouble2x5Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2),
-            double Function(
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2,
-                StructStruct32BytesHomogeneousDouble2)>(
-        "PassStructStruct32BytesHomogeneousDouble2x5",
-        isLeaf: true);
-
-/// Arguments in FPU registers on arm64.
-/// 5 struct arguments will exhaust available registers.
-void testPassStructStruct32BytesHomogeneousDouble2x5Leaf() {
-  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a4 = a4Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-  a1.a0.a0 = -5.0;
-  a1.a1[0].a0 = 6.0;
-  a1.a1[1].a0 = -7.0;
-  a1.a2 = 8.0;
-  a2.a0.a0 = -9.0;
-  a2.a1[0].a0 = 10.0;
-  a2.a1[1].a0 = -11.0;
-  a2.a2 = 12.0;
-  a3.a0.a0 = -13.0;
-  a3.a1[0].a0 = 14.0;
-  a3.a1[1].a0 = -15.0;
-  a3.a2 = 16.0;
-  a4.a0.a0 = -17.0;
-  a4.a1[0].a0 = 18.0;
-  a4.a1[1].a0 = -19.0;
-  a4.a2 = 20.0;
-
-  final result =
-      passStructStruct32BytesHomogeneousDouble2x5Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-}
-
-final passStructStruct16BytesMixed3x10Leaf = ffiTestFunctions.lookupFunction<
-        Float Function(
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3),
-        double Function(
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3,
-            StructStruct16BytesMixed3)>("PassStructStruct16BytesMixed3x10",
-    isLeaf: true);
-
-/// On x64, arguments are split over FP and int registers.
-/// On x64, it will exhaust the integer registers with the 6th argument.
-/// The rest goes on the stack.
-/// On arm, arguments are 4 byte aligned.
-void testPassStructStruct16BytesMixed3x10Leaf() {
-  final a0Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a2 = a2Pointer.ref;
-  final a3Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a3 = a3Pointer.ref;
-  final a4Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a4 = a4Pointer.ref;
-  final a5Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a5 = a5Pointer.ref;
-  final a6Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a6 = a6Pointer.ref;
-  final a7Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a7 = a7Pointer.ref;
-  final a8Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a8 = a8Pointer.ref;
-  final a9Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[0].a1 = -3;
-  a0.a1[0].a2 = 4;
-  a0.a2[0] = -5;
-  a0.a2[1] = 6;
-  a1.a0.a0 = -7.0;
-  a1.a1[0].a0 = 8.0;
-  a1.a1[0].a1 = -9;
-  a1.a1[0].a2 = 10;
-  a1.a2[0] = -11;
-  a1.a2[1] = 12;
-  a2.a0.a0 = -13.0;
-  a2.a1[0].a0 = 14.0;
-  a2.a1[0].a1 = -15;
-  a2.a1[0].a2 = 16;
-  a2.a2[0] = -17;
-  a2.a2[1] = 18;
-  a3.a0.a0 = -19.0;
-  a3.a1[0].a0 = 20.0;
-  a3.a1[0].a1 = -21;
-  a3.a1[0].a2 = 22;
-  a3.a2[0] = -23;
-  a3.a2[1] = 24;
-  a4.a0.a0 = -25.0;
-  a4.a1[0].a0 = 26.0;
-  a4.a1[0].a1 = -27;
-  a4.a1[0].a2 = 28;
-  a4.a2[0] = -29;
-  a4.a2[1] = 30;
-  a5.a0.a0 = -31.0;
-  a5.a1[0].a0 = 32.0;
-  a5.a1[0].a1 = -33;
-  a5.a1[0].a2 = 34;
-  a5.a2[0] = -35;
-  a5.a2[1] = 36;
-  a6.a0.a0 = -37.0;
-  a6.a1[0].a0 = 38.0;
-  a6.a1[0].a1 = -39;
-  a6.a1[0].a2 = 40;
-  a6.a2[0] = -41;
-  a6.a2[1] = 42;
-  a7.a0.a0 = -43.0;
-  a7.a1[0].a0 = 44.0;
-  a7.a1[0].a1 = -45;
-  a7.a1[0].a2 = 46;
-  a7.a2[0] = -47;
-  a7.a2[1] = 48;
-  a8.a0.a0 = -49.0;
-  a8.a1[0].a0 = 50.0;
-  a8.a1[0].a1 = -51;
-  a8.a1[0].a2 = 52;
-  a8.a2[0] = -53;
-  a8.a2[1] = 54;
-  a9.a0.a0 = -55.0;
-  a9.a1[0].a0 = 56.0;
-  a9.a1[0].a1 = -57;
-  a9.a1[0].a2 = 58;
-  a9.a2[0] = -59;
-  a9.a2[1] = 60;
-
-  final result = passStructStruct16BytesMixed3x10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(30.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUint8Struct32BytesInlineArrayMultiDimensionalILeaf =
-    ffiTestFunctions.lookupFunction<
-            Uint32 Function(
-                Uint8,
-                Struct32BytesInlineArrayMultiDimensionalInt,
-                Uint8,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                Uint8,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                Uint8),
-            int Function(
-                int,
-                Struct32BytesInlineArrayMultiDimensionalInt,
-                int,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                int,
-                Struct8BytesInlineArrayMultiDimensionalInt,
-                int)>("PassUint8Struct32BytesInlineArrayMultiDimensionalI",
-        isLeaf: true);
-
-/// Test multi dimensional inline array struct as argument.
-void testPassUint8Struct32BytesInlineArrayMultiDimensionalILeaf() {
-  int a0;
-  final a1Pointer = calloc<Struct32BytesInlineArrayMultiDimensionalInt>();
-  final Struct32BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
-  int a2;
-  final a3Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
-  final Struct8BytesInlineArrayMultiDimensionalInt a3 = a3Pointer.ref;
-  int a4;
-  final a5Pointer = calloc<Struct8BytesInlineArrayMultiDimensionalInt>();
-  final Struct8BytesInlineArrayMultiDimensionalInt a5 = a5Pointer.ref;
-  int a6;
-
-  a0 = 1;
-  a1.a0[0][0][0][0][0] = 2;
-  a1.a0[0][0][0][0][1] = 3;
-  a1.a0[0][0][0][1][0] = 4;
-  a1.a0[0][0][0][1][1] = 5;
-  a1.a0[0][0][1][0][0] = 6;
-  a1.a0[0][0][1][0][1] = 7;
-  a1.a0[0][0][1][1][0] = 8;
-  a1.a0[0][0][1][1][1] = 9;
-  a1.a0[0][1][0][0][0] = 10;
-  a1.a0[0][1][0][0][1] = 11;
-  a1.a0[0][1][0][1][0] = 12;
-  a1.a0[0][1][0][1][1] = 13;
-  a1.a0[0][1][1][0][0] = 14;
-  a1.a0[0][1][1][0][1] = 15;
-  a1.a0[0][1][1][1][0] = 16;
-  a1.a0[0][1][1][1][1] = 17;
-  a1.a0[1][0][0][0][0] = 18;
-  a1.a0[1][0][0][0][1] = 19;
-  a1.a0[1][0][0][1][0] = 20;
-  a1.a0[1][0][0][1][1] = 21;
-  a1.a0[1][0][1][0][0] = 22;
-  a1.a0[1][0][1][0][1] = 23;
-  a1.a0[1][0][1][1][0] = 24;
-  a1.a0[1][0][1][1][1] = 25;
-  a1.a0[1][1][0][0][0] = 26;
-  a1.a0[1][1][0][0][1] = 27;
-  a1.a0[1][1][0][1][0] = 28;
-  a1.a0[1][1][0][1][1] = 29;
-  a1.a0[1][1][1][0][0] = 30;
-  a1.a0[1][1][1][0][1] = 31;
-  a1.a0[1][1][1][1][0] = 32;
-  a1.a0[1][1][1][1][1] = 33;
-  a2 = 34;
-  a3.a0[0][0][0] = 35;
-  a3.a0[0][0][1] = 36;
-  a3.a0[0][1][0] = 37;
-  a3.a0[0][1][1] = 38;
-  a3.a0[1][0][0] = 39;
-  a3.a0[1][0][1] = 40;
-  a3.a0[1][1][0] = 41;
-  a3.a0[1][1][1] = 42;
-  a4 = 43;
-  a5.a0[0][0][0] = 44;
-  a5.a0[0][0][1] = 45;
-  a5.a0[0][1][0] = 46;
-  a5.a0[0][1][1] = 47;
-  a5.a0[1][0][0] = 48;
-  a5.a0[1][0][1] = 49;
-  a5.a0[1][1][0] = 50;
-  a5.a0[1][1][1] = 51;
-  a6 = 52;
-
-  final result = passUint8Struct32BytesInlineArrayMultiDimensionalILeaf(
-      a0, a1, a2, a3, a4, a5, a6);
-
-  print("result = $result");
-
-  Expect.equals(1378, result);
-
-  calloc.free(a1Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a5Pointer);
-}
-
-final passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf =
-    ffiTestFunctions.lookupFunction<
-            Uint32 Function(
-                Uint8, Struct4BytesInlineArrayMultiDimensionalInt, Uint8),
-            int Function(int, Struct4BytesInlineArrayMultiDimensionalInt, int)>(
-        "PassUint8Struct4BytesInlineArrayMultiDimensionalIn",
-        isLeaf: true);
-
-/// Test struct in multi dimensional inline array.
-void testPassUint8Struct4BytesInlineArrayMultiDimensionalInLeaf() {
-  int a0;
-  final a1Pointer = calloc<Struct4BytesInlineArrayMultiDimensionalInt>();
-  final Struct4BytesInlineArrayMultiDimensionalInt a1 = a1Pointer.ref;
-  int a2;
-
-  a0 = 1;
-  a1.a0[0][0].a0 = 2;
-  a1.a0[0][1].a0 = -3;
-  a1.a0[1][0].a0 = 4;
-  a1.a0[1][1].a0 = -5;
-  a2 = 6;
-
-  final result =
-      passUint8Struct4BytesInlineArrayMultiDimensionalInLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(5, result);
-
-  calloc.free(a1Pointer);
-}
-
-final passStruct3BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt),
-    int Function(
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt,
-        Struct3BytesPackedInt)>("PassStruct3BytesPackedIntx10", isLeaf: true);
-
-/// Small struct with mis-aligned member.
-void testPassStruct3BytesPackedIntx10Leaf() {
-  final a0Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct3BytesPackedInt>();
-  final Struct3BytesPackedInt a9 = a9Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-  a2.a0 = -5;
-  a2.a1 = 6;
-  a3.a0 = -7;
-  a3.a1 = 8;
-  a4.a0 = -9;
-  a4.a1 = 10;
-  a5.a0 = -11;
-  a5.a1 = 12;
-  a6.a0 = -13;
-  a6.a1 = 14;
-  a7.a0 = -15;
-  a7.a1 = 16;
-  a8.a0 = -17;
-  a8.a1 = 18;
-  a9.a0 = -19;
-  a9.a1 = 20;
-
-  final result =
-      passStruct3BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(10, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct8BytesPackedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Int64 Function(
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt),
-    int Function(
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt,
-        Struct8BytesPackedInt)>("PassStruct8BytesPackedIntx10", isLeaf: true);
-
-/// Struct with mis-aligned member.
-void testPassStruct8BytesPackedIntx10Leaf() {
-  final a0Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct8BytesPackedInt>();
-  final Struct8BytesPackedInt a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1 = 2;
-  a0.a2 = 3;
-  a0.a3 = 4;
-  a0.a4 = 5;
-  a1.a0 = 6;
-  a1.a1 = 7;
-  a1.a2 = 8;
-  a1.a3 = 9;
-  a1.a4 = 10;
-  a2.a0 = 11;
-  a2.a1 = 12;
-  a2.a2 = 13;
-  a2.a3 = 14;
-  a2.a4 = 15;
-  a3.a0 = 16;
-  a3.a1 = 17;
-  a3.a2 = 18;
-  a3.a3 = 19;
-  a3.a4 = 20;
-  a4.a0 = 21;
-  a4.a1 = 22;
-  a4.a2 = 23;
-  a4.a3 = 24;
-  a4.a4 = 25;
-  a5.a0 = 26;
-  a5.a1 = 27;
-  a5.a2 = 28;
-  a5.a3 = 29;
-  a5.a4 = 30;
-  a6.a0 = 31;
-  a6.a1 = 32;
-  a6.a2 = 33;
-  a6.a3 = 34;
-  a6.a4 = 35;
-  a7.a0 = 36;
-  a7.a1 = 37;
-  a7.a2 = 38;
-  a7.a3 = 39;
-  a7.a4 = 40;
-  a8.a0 = 41;
-  a8.a1 = 42;
-  a8.a2 = 43;
-  a8.a3 = 44;
-  a8.a4 = 45;
-  a9.a0 = 46;
-  a9.a1 = 47;
-  a9.a2 = 48;
-  a9.a3 = 49;
-  a9.a4 = 50;
-
-  final result =
-      passStruct8BytesPackedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.equals(1275, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct9BytesPackedMixedx10DoubleInt32x2Leaf =
-    ffiTestFunctions.lookupFunction<
-        Double Function(
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Double,
-            Int32,
-            Int32),
-        double Function(
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            Struct9BytesPackedMixed,
-            double,
-            int,
-            int)>("PassStruct9BytesPackedMixedx10DoubleInt32x2", isLeaf: true);
-
-/// Struct with mis-aligned member.
-/// Tests backfilling of CPU and FPU registers.
-void testPassStruct9BytesPackedMixedx10DoubleInt32x2Leaf() {
-  final a0Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Struct9BytesPackedMixed>();
-  final Struct9BytesPackedMixed a9 = a9Pointer.ref;
-  double a10;
-  int a11;
-  int a12;
-
-  a0.a0 = 1;
-  a0.a1 = 2.0;
-  a1.a0 = 3;
-  a1.a1 = 4.0;
-  a2.a0 = 5;
-  a2.a1 = 6.0;
-  a3.a0 = 7;
-  a3.a1 = 8.0;
-  a4.a0 = 9;
-  a4.a1 = 10.0;
-  a5.a0 = 11;
-  a5.a1 = 12.0;
-  a6.a0 = 13;
-  a6.a1 = 14.0;
-  a7.a0 = 15;
-  a7.a1 = 16.0;
-  a8.a0 = 17;
-  a8.a1 = 18.0;
-  a9.a0 = 19;
-  a9.a1 = 20.0;
-  a10 = -21.0;
-  a11 = 22;
-  a12 = -23;
-
-  final result = passStruct9BytesPackedMixedx10DoubleInt32x2Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
-
-  print("result = $result");
-
-  Expect.approxEquals(188.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passStruct5BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
-    Double Function(Struct5BytesPackedMixed),
-    double Function(
-        Struct5BytesPackedMixed)>("PassStruct5BytesPackedMixed", isLeaf: true);
-
-/// This packed struct happens to have only aligned members.
-void testPassStruct5BytesPackedMixedLeaf() {
-  final a0Pointer = calloc<Struct5BytesPackedMixed>();
-  final Struct5BytesPackedMixed a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2;
-
-  final result = passStruct5BytesPackedMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(1.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStructNestedAlignmentStruct5BytesPackedMixedLeaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(StructNestedAlignmentStruct5BytesPackedMixed),
-            double Function(StructNestedAlignmentStruct5BytesPackedMixed)>(
-        "PassStructNestedAlignmentStruct5BytesPackedMixed",
-        isLeaf: true);
-
-/// Check alignment of packed struct in non-packed struct.
-void testPassStructNestedAlignmentStruct5BytesPackedMixedLeaf() {
-  final a0Pointer = calloc<StructNestedAlignmentStruct5BytesPackedMixed>();
-  final StructNestedAlignmentStruct5BytesPackedMixed a0 = a0Pointer.ref;
-
-  a0.a0 = 1;
-  a0.a1.a0 = 2.0;
-  a0.a1.a1 = 3;
-
-  final result = passStructNestedAlignmentStruct5BytesPackedMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(6.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct6BytesInlineArrayIntLeaf = ffiTestFunctions.lookupFunction<
-        Double Function(Struct6BytesInlineArrayInt),
-        double Function(Struct6BytesInlineArrayInt)>(
-    "PassStruct6BytesInlineArrayInt",
-    isLeaf: true);
-
-/// Check alignment of packed struct array in non-packed struct.
-void testPassStruct6BytesInlineArrayIntLeaf() {
-  final a0Pointer = calloc<Struct6BytesInlineArrayInt>();
-  final Struct6BytesInlineArrayInt a0 = a0Pointer.ref;
-
-  a0.a0[0].a0 = -1;
-  a0.a0[0].a1 = 2;
-  a0.a0[1].a0 = -3;
-  a0.a0[1].a1 = 4;
-
-  final result = passStruct6BytesInlineArrayIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(2.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passStruct15BytesInlineArrayMixedLeaf = ffiTestFunctions.lookupFunction<
-        Double Function(Struct15BytesInlineArrayMixed),
-        double Function(Struct15BytesInlineArrayMixed)>(
-    "PassStruct15BytesInlineArrayMixed",
-    isLeaf: true);
-
-/// Check alignment of packed struct array in non-packed struct.
-void testPassStruct15BytesInlineArrayMixedLeaf() {
-  final a0Pointer = calloc<Struct15BytesInlineArrayMixed>();
-  final Struct15BytesInlineArrayMixed a0 = a0Pointer.ref;
-
-  a0.a0[0].a0 = -1.0;
-  a0.a0[0].a1 = 2;
-  a0.a0[1].a0 = -3.0;
-  a0.a0[1].a1 = 4;
-  a0.a0[2].a0 = -5.0;
-  a0.a0[2].a1 = 6;
-
-  final result = passStruct15BytesInlineArrayMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(3.0, result);
-
-  calloc.free(a0Pointer);
-}
-
-final passUnion4BytesMixedx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed),
-    double Function(
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed,
-        Union4BytesMixed)>("PassUnion4BytesMixedx10", isLeaf: true);
-
-/// Check placement of mixed integer/float union.
-void testPassUnion4BytesMixedx10Leaf() {
-  final a0Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union4BytesMixed>();
-  final Union4BytesMixed a9 = a9Pointer.ref;
-
-  a0.a0 = 1;
-  a1.a0 = 2;
-  a2.a0 = 3;
-  a3.a0 = 4;
-  a4.a0 = 5;
-  a5.a0 = 6;
-  a6.a0 = 7;
-  a7.a0 = 8;
-  a8.a0 = 9;
-  a9.a0 = 10;
-
-  final result =
-      passUnion4BytesMixedx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(55.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion8BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat),
-    double Function(
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat,
-        Union8BytesNestedFloat)>("PassUnion8BytesNestedFloatx10", isLeaf: true);
-
-/// Check placement of mixed floats union.
-void testPassUnion8BytesNestedFloatx10Leaf() {
-  final a0Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union8BytesNestedFloat>();
-  final Union8BytesNestedFloat a9 = a9Pointer.ref;
-
-  a0.a0 = -1.0;
-  a1.a0 = 2.0;
-  a2.a0 = -3.0;
-  a3.a0 = 4.0;
-  a4.a0 = -5.0;
-  a5.a0 = 6.0;
-  a6.a0 = -7.0;
-  a7.a0 = 8.0;
-  a8.a0 = -9.0;
-  a9.a0 = 10.0;
-
-  final result =
-      passUnion8BytesNestedFloatx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(5.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion9BytesNestedIntx10Leaf = ffiTestFunctions.lookupFunction<
-    Double Function(
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt),
-    double Function(
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt,
-        Union9BytesNestedInt)>("PassUnion9BytesNestedIntx10", isLeaf: true);
-
-/// Mixed-size union argument.
-void testPassUnion9BytesNestedIntx10Leaf() {
-  final a0Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union9BytesNestedInt>();
-  final Union9BytesNestedInt a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a0.a2 = -3;
-  a1.a0.a0 = 4;
-  a1.a0.a1 = -5;
-  a1.a0.a2 = 6;
-  a2.a0.a0 = -7;
-  a2.a0.a1 = 8;
-  a2.a0.a2 = -9;
-  a3.a0.a0 = 10;
-  a3.a0.a1 = -11;
-  a3.a0.a2 = 12;
-  a4.a0.a0 = -13;
-  a4.a0.a1 = 14;
-  a4.a0.a2 = -15;
-  a5.a0.a0 = 16;
-  a5.a0.a1 = -17;
-  a5.a0.a2 = 18;
-  a6.a0.a0 = -19;
-  a6.a0.a1 = 20;
-  a6.a0.a2 = -21;
-  a7.a0.a0 = 22;
-  a7.a0.a1 = -23;
-  a7.a0.a2 = 24;
-  a8.a0.a0 = -25;
-  a8.a0.a1 = 26;
-  a8.a0.a2 = -27;
-  a9.a0.a0 = 28;
-  a9.a0.a1 = -29;
-  a9.a0.a2 = 30;
-
-  final result =
-      passUnion9BytesNestedIntx10Leaf(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(15.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion16BytesNestedInlineArrayFloatx10Leaf =
-    ffiTestFunctions.lookupFunction<
-            Double Function(
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat),
-            double Function(
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat,
-                Union16BytesNestedInlineArrayFloat)>(
-        "PassUnion16BytesNestedInlineArrayFloatx10",
-        isLeaf: true);
-
-/// Union with homogenous floats.
-void testPassUnion16BytesNestedInlineArrayFloatx10Leaf() {
-  final a0Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union16BytesNestedInlineArrayFloat>();
-  final Union16BytesNestedInlineArrayFloat a9 = a9Pointer.ref;
-
-  a0.a0[0] = -1.0;
-  a0.a0[1] = 2.0;
-  a0.a0[2] = -3.0;
-  a0.a0[3] = 4.0;
-  a1.a0[0] = -5.0;
-  a1.a0[1] = 6.0;
-  a1.a0[2] = -7.0;
-  a1.a0[3] = 8.0;
-  a2.a0[0] = -9.0;
-  a2.a0[1] = 10.0;
-  a2.a0[2] = -11.0;
-  a2.a0[3] = 12.0;
-  a3.a0[0] = -13.0;
-  a3.a0[1] = 14.0;
-  a3.a0[2] = -15.0;
-  a3.a0[3] = 16.0;
-  a4.a0[0] = -17.0;
-  a4.a0[1] = 18.0;
-  a4.a0[2] = -19.0;
-  a4.a0[3] = 20.0;
-  a5.a0[0] = -21.0;
-  a5.a0[1] = 22.0;
-  a5.a0[2] = -23.0;
-  a5.a0[3] = 24.0;
-  a6.a0[0] = -25.0;
-  a6.a0[1] = 26.0;
-  a6.a0[2] = -27.0;
-  a6.a0[3] = 28.0;
-  a7.a0[0] = -29.0;
-  a7.a0[1] = 30.0;
-  a7.a0[2] = -31.0;
-  a7.a0[3] = 32.0;
-  a8.a0[0] = -33.0;
-  a8.a0[1] = 34.0;
-  a8.a0[2] = -35.0;
-  a8.a0[3] = 36.0;
-  a9.a0[0] = -37.0;
-  a9.a0[1] = 38.0;
-  a9.a0[2] = -39.0;
-  a9.a0[3] = 40.0;
-
-  final result = passUnion16BytesNestedInlineArrayFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(20.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final passUnion16BytesNestedFloatx10Leaf = ffiTestFunctions.lookupFunction<
-        Double Function(
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat),
-        double Function(
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat,
-            Union16BytesNestedFloat)>("PassUnion16BytesNestedFloatx10",
-    isLeaf: true);
-
-/// Union with homogenous floats.
-void testPassUnion16BytesNestedFloatx10Leaf() {
-  final a0Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a1 = a1Pointer.ref;
-  final a2Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a2 = a2Pointer.ref;
-  final a3Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a3 = a3Pointer.ref;
-  final a4Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a4 = a4Pointer.ref;
-  final a5Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a5 = a5Pointer.ref;
-  final a6Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a6 = a6Pointer.ref;
-  final a7Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a7 = a7Pointer.ref;
-  final a8Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a8 = a8Pointer.ref;
-  final a9Pointer = calloc<Union16BytesNestedFloat>();
-  final Union16BytesNestedFloat a9 = a9Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a0.a1 = 2.0;
-  a1.a0.a0 = -3.0;
-  a1.a0.a1 = 4.0;
-  a2.a0.a0 = -5.0;
-  a2.a0.a1 = 6.0;
-  a3.a0.a0 = -7.0;
-  a3.a0.a1 = 8.0;
-  a4.a0.a0 = -9.0;
-  a4.a0.a1 = 10.0;
-  a5.a0.a0 = -11.0;
-  a5.a0.a1 = 12.0;
-  a6.a0.a0 = -13.0;
-  a6.a0.a1 = 14.0;
-  a7.a0.a0 = -15.0;
-  a7.a0.a1 = 16.0;
-  a8.a0.a0 = -17.0;
-  a8.a0.a1 = 18.0;
-  a9.a0.a0 = -19.0;
-  a9.a0.a1 = 20.0;
-
-  final result = passUnion16BytesNestedFloatx10Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-
-  print("result = $result");
-
-  Expect.approxEquals(10.0, result);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-  calloc.free(a3Pointer);
-  calloc.free(a4Pointer);
-  calloc.free(a5Pointer);
-  calloc.free(a6Pointer);
-  calloc.free(a7Pointer);
-  calloc.free(a8Pointer);
-  calloc.free(a9Pointer);
-}
-
-final returnStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct1ByteInt Function(Int8),
-    Struct1ByteInt Function(int)>("ReturnStruct1ByteInt", isLeaf: true);
-
-/// Smallest struct with data.
-void testReturnStruct1ByteIntLeaf() {
-  int a0;
-
-  a0 = -1;
-
-  final result = returnStruct1ByteIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-}
-
-final returnStruct3BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct3BytesHomogeneousUint8 Function(Uint8, Uint8, Uint8),
-    Struct3BytesHomogeneousUint8 Function(
-        int, int, int)>("ReturnStruct3BytesHomogeneousUint8", isLeaf: true);
-
-/// Smaller than word size return value on all architectures.
-void testReturnStruct3BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-
-  final result = returnStruct3BytesHomogeneousUint8Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct3BytesInt2ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
-    Struct3BytesInt2ByteAligned Function(Int16, Int8),
-    Struct3BytesInt2ByteAligned Function(
-        int, int)>("ReturnStruct3BytesInt2ByteAligned", isLeaf: true);
-
-/// Smaller than word size return value on all architectures.
-/// With alignment rules taken into account size is 4 bytes.
-void testReturnStruct3BytesInt2ByteAlignedLeaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct3BytesInt2ByteAlignedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct4BytesHomogeneousInt16Leaf = ffiTestFunctions.lookupFunction<
-    Struct4BytesHomogeneousInt16 Function(Int16, Int16),
-    Struct4BytesHomogeneousInt16 Function(
-        int, int)>("ReturnStruct4BytesHomogeneousInt16", isLeaf: true);
-
-/// Word size return value on 32 bit architectures..
-void testReturnStruct4BytesHomogeneousInt16Leaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct4BytesHomogeneousInt16Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct7BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct7BytesHomogeneousUint8 Function(
-        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
-    Struct7BytesHomogeneousUint8 Function(int, int, int, int, int, int,
-        int)>("ReturnStruct7BytesHomogeneousUint8", isLeaf: true);
-
-/// Non-wordsize return value.
-void testReturnStruct7BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-
-  final result =
-      returnStruct7BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5, a6);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-}
-
-final returnStruct7BytesInt4ByteAlignedLeaf = ffiTestFunctions.lookupFunction<
-    Struct7BytesInt4ByteAligned Function(Int32, Int16, Int8),
-    Struct7BytesInt4ByteAligned Function(
-        int, int, int)>("ReturnStruct7BytesInt4ByteAligned", isLeaf: true);
-
-/// Non-wordsize return value.
-/// With alignment rules taken into account size is 8 bytes.
-void testReturnStruct7BytesInt4ByteAlignedLeaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct7BytesInt4ByteAlignedLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct8BytesIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesInt Function(Int16, Int16, Int32),
-    Struct8BytesInt Function(
-        int, int, int)>("ReturnStruct8BytesInt", isLeaf: true);
-
-/// Return value in integer registers on many architectures.
-void testReturnStruct8BytesIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct8BytesIntLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct8BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesHomogeneousFloat Function(Float, Float),
-    Struct8BytesHomogeneousFloat Function(
-        double, double)>("ReturnStruct8BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value in FP registers on many architectures.
-void testReturnStruct8BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-
-  a0 = -1.0;
-  a1 = 2.0;
-
-  final result = returnStruct8BytesHomogeneousFloatLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-}
-
-final returnStruct8BytesMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesMixed Function(Float, Int16, Int16),
-    Struct8BytesMixed Function(
-        double, int, int)>("ReturnStruct8BytesMixed", isLeaf: true);
-
-/// Return value split over FP and integer register in x64.
-void testReturnStruct8BytesMixedLeaf() {
-  double a0;
-  int a1;
-  int a2;
-
-  a0 = -1.0;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct8BytesMixedLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct9BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct9BytesHomogeneousUint8 Function(
-        Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8),
-    Struct9BytesHomogeneousUint8 Function(int, int, int, int, int, int, int,
-        int, int)>("ReturnStruct9BytesHomogeneousUint8", isLeaf: true);
-
-/// The minimum alignment of this struct is only 1 byte based on its fields.
-/// Test that the memory backing these structs is the right size and that
-/// dart:ffi trampolines do not write outside this size.
-void testReturnStruct9BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  int a8;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-  a7 = 8;
-  a8 = 9;
-
-  final result = returnStruct9BytesHomogeneousUint8Leaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-  Expect.equals(a7, result.a7);
-  Expect.equals(a8, result.a8);
-}
-
-final returnStruct9BytesInt4Or8ByteAlignedLeaf =
-    ffiTestFunctions.lookupFunction<
-        Struct9BytesInt4Or8ByteAligned Function(Int64, Int8),
-        Struct9BytesInt4Or8ByteAligned Function(
-            int, int)>("ReturnStruct9BytesInt4Or8ByteAligned", isLeaf: true);
-
-/// Return value in two integer registers on x64.
-/// With alignment rules taken into account size is 12 or 16 bytes.
-void testReturnStruct9BytesInt4Or8ByteAlignedLeaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct9BytesInt4Or8ByteAlignedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct12BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct12BytesHomogeneousFloat Function(Float, Float, Float),
-    Struct12BytesHomogeneousFloat Function(double, double,
-        double)>("ReturnStruct12BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value in FPU registers, but does not use all registers on arm hardfp
-/// and arm64.
-void testReturnStruct12BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-  double a2;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-
-  final result = returnStruct12BytesHomogeneousFloatLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-}
-
-final returnStruct16BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesHomogeneousFloat Function(Float, Float, Float, Float),
-    Struct16BytesHomogeneousFloat Function(double, double, double,
-        double)>("ReturnStruct16BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value in FPU registers on arm hardfp and arm64.
-void testReturnStruct16BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-
-  final result = returnStruct16BytesHomogeneousFloatLeaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-}
-
-final returnStruct16BytesMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesMixed Function(Double, Int64),
-    Struct16BytesMixed Function(
-        double, int)>("ReturnStruct16BytesMixed", isLeaf: true);
-
-/// Return value split over FP and integer register in x64.
-void testReturnStruct16BytesMixedLeaf() {
-  double a0;
-  int a1;
-
-  a0 = -1.0;
-  a1 = 2;
-
-  final result = returnStruct16BytesMixedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct16BytesMixed2Leaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesMixed2 Function(Float, Float, Float, Int32),
-    Struct16BytesMixed2 Function(double, double, double,
-        int)>("ReturnStruct16BytesMixed2", isLeaf: true);
-
-/// Return value split over FP and integer register in x64.
-/// The integer register contains half float half int.
-void testReturnStruct16BytesMixed2Leaf() {
-  double a0;
-  double a1;
-  double a2;
-  int a3;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4;
-
-  final result = returnStruct16BytesMixed2Leaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-}
-
-final returnStruct17BytesIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct17BytesInt Function(Int64, Int64, Int8),
-    Struct17BytesInt Function(
-        int, int, int)>("ReturnStruct17BytesInt", isLeaf: true);
-
-/// Rerturn value returned in preallocated space passed by pointer on most ABIs.
-/// Is non word size on purpose, to test that structs are rounded up to word size
-/// on all ABIs.
-void testReturnStruct17BytesIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStruct17BytesIntLeaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct19BytesHomogeneousUint8Leaf = ffiTestFunctions.lookupFunction<
-    Struct19BytesHomogeneousUint8 Function(
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8,
-        Uint8),
-    Struct19BytesHomogeneousUint8 Function(
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int,
-        int)>("ReturnStruct19BytesHomogeneousUint8", isLeaf: true);
-
-/// The minimum alignment of this struct is only 1 byte based on its fields.
-/// Test that the memory backing these structs is the right size and that
-/// dart:ffi trampolines do not write outside this size.
-void testReturnStruct19BytesHomogeneousUint8Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  int a8;
-  int a9;
-  int a10;
-  int a11;
-  int a12;
-  int a13;
-  int a14;
-  int a15;
-  int a16;
-  int a17;
-  int a18;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-  a7 = 8;
-  a8 = 9;
-  a9 = 10;
-  a10 = 11;
-  a11 = 12;
-  a12 = 13;
-  a13 = 14;
-  a14 = 15;
-  a15 = 16;
-  a16 = 17;
-  a17 = 18;
-  a18 = 19;
-
-  final result = returnStruct19BytesHomogeneousUint8Leaf(a0, a1, a2, a3, a4, a5,
-      a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-  Expect.equals(a7, result.a7);
-  Expect.equals(a8, result.a8);
-  Expect.equals(a9, result.a9);
-  Expect.equals(a10, result.a10);
-  Expect.equals(a11, result.a11);
-  Expect.equals(a12, result.a12);
-  Expect.equals(a13, result.a13);
-  Expect.equals(a14, result.a14);
-  Expect.equals(a15, result.a15);
-  Expect.equals(a16, result.a16);
-  Expect.equals(a17, result.a17);
-  Expect.equals(a18, result.a18);
-}
-
-final returnStruct20BytesHomogeneousInt32Leaf = ffiTestFunctions.lookupFunction<
-    Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32, Int32),
-    Struct20BytesHomogeneousInt32 Function(int, int, int, int,
-        int)>("ReturnStruct20BytesHomogeneousInt32", isLeaf: true);
-
-/// Return value too big to go in cpu registers on arm64.
-void testReturnStruct20BytesHomogeneousInt32Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-
-  final result = returnStruct20BytesHomogeneousInt32Leaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-}
-
-final returnStruct20BytesHomogeneousFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct20BytesHomogeneousFloat Function(Float, Float, Float, Float, Float),
-    Struct20BytesHomogeneousFloat Function(double, double, double, double,
-        double)>("ReturnStruct20BytesHomogeneousFloat", isLeaf: true);
-
-/// Return value too big to go in FPU registers on x64, arm hardfp and arm64.
-void testReturnStruct20BytesHomogeneousFloatLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-  double a4;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-  a4 = -5.0;
-
-  final result = returnStruct20BytesHomogeneousFloatLeaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-  Expect.approxEquals(a4, result.a4);
-}
-
-final returnStruct32BytesHomogeneousDoubleLeaf =
-    ffiTestFunctions.lookupFunction<
-        Struct32BytesHomogeneousDouble Function(Double, Double, Double, Double),
-        Struct32BytesHomogeneousDouble Function(double, double, double,
-            double)>("ReturnStruct32BytesHomogeneousDouble", isLeaf: true);
-
-/// Return value in FPU registers on arm64.
-void testReturnStruct32BytesHomogeneousDoubleLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-
-  final result = returnStruct32BytesHomogeneousDoubleLeaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-}
-
-final returnStruct40BytesHomogeneousDoubleLeaf =
-    ffiTestFunctions.lookupFunction<
-        Struct40BytesHomogeneousDouble Function(
-            Double, Double, Double, Double, Double),
-        Struct40BytesHomogeneousDouble Function(double, double, double, double,
-            double)>("ReturnStruct40BytesHomogeneousDouble", isLeaf: true);
-
-/// Return value too big to go in FPU registers on arm64.
-void testReturnStruct40BytesHomogeneousDoubleLeaf() {
-  double a0;
-  double a1;
-  double a2;
-  double a3;
-  double a4;
-
-  a0 = -1.0;
-  a1 = 2.0;
-  a2 = -3.0;
-  a3 = 4.0;
-  a4 = -5.0;
-
-  final result = returnStruct40BytesHomogeneousDoubleLeaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-  Expect.approxEquals(a2, result.a2);
-  Expect.approxEquals(a3, result.a3);
-  Expect.approxEquals(a4, result.a4);
-}
-
-final returnStruct1024BytesHomogeneousUint64Leaf =
-    ffiTestFunctions.lookupFunction<
-        Struct1024BytesHomogeneousUint64 Function(
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64,
-            Uint64),
-        Struct1024BytesHomogeneousUint64 Function(
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int,
-            int)>("ReturnStruct1024BytesHomogeneousUint64", isLeaf: true);
-
-/// Test 1kb struct.
-void testReturnStruct1024BytesHomogeneousUint64Leaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  int a8;
-  int a9;
-  int a10;
-  int a11;
-  int a12;
-  int a13;
-  int a14;
-  int a15;
-  int a16;
-  int a17;
-  int a18;
-  int a19;
-  int a20;
-  int a21;
-  int a22;
-  int a23;
-  int a24;
-  int a25;
-  int a26;
-  int a27;
-  int a28;
-  int a29;
-  int a30;
-  int a31;
-  int a32;
-  int a33;
-  int a34;
-  int a35;
-  int a36;
-  int a37;
-  int a38;
-  int a39;
-  int a40;
-  int a41;
-  int a42;
-  int a43;
-  int a44;
-  int a45;
-  int a46;
-  int a47;
-  int a48;
-  int a49;
-  int a50;
-  int a51;
-  int a52;
-  int a53;
-  int a54;
-  int a55;
-  int a56;
-  int a57;
-  int a58;
-  int a59;
-  int a60;
-  int a61;
-  int a62;
-  int a63;
-  int a64;
-  int a65;
-  int a66;
-  int a67;
-  int a68;
-  int a69;
-  int a70;
-  int a71;
-  int a72;
-  int a73;
-  int a74;
-  int a75;
-  int a76;
-  int a77;
-  int a78;
-  int a79;
-  int a80;
-  int a81;
-  int a82;
-  int a83;
-  int a84;
-  int a85;
-  int a86;
-  int a87;
-  int a88;
-  int a89;
-  int a90;
-  int a91;
-  int a92;
-  int a93;
-  int a94;
-  int a95;
-  int a96;
-  int a97;
-  int a98;
-  int a99;
-  int a100;
-  int a101;
-  int a102;
-  int a103;
-  int a104;
-  int a105;
-  int a106;
-  int a107;
-  int a108;
-  int a109;
-  int a110;
-  int a111;
-  int a112;
-  int a113;
-  int a114;
-  int a115;
-  int a116;
-  int a117;
-  int a118;
-  int a119;
-  int a120;
-  int a121;
-  int a122;
-  int a123;
-  int a124;
-  int a125;
-  int a126;
-  int a127;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-  a5 = 6;
-  a6 = 7;
-  a7 = 8;
-  a8 = 9;
-  a9 = 10;
-  a10 = 11;
-  a11 = 12;
-  a12 = 13;
-  a13 = 14;
-  a14 = 15;
-  a15 = 16;
-  a16 = 17;
-  a17 = 18;
-  a18 = 19;
-  a19 = 20;
-  a20 = 21;
-  a21 = 22;
-  a22 = 23;
-  a23 = 24;
-  a24 = 25;
-  a25 = 26;
-  a26 = 27;
-  a27 = 28;
-  a28 = 29;
-  a29 = 30;
-  a30 = 31;
-  a31 = 32;
-  a32 = 33;
-  a33 = 34;
-  a34 = 35;
-  a35 = 36;
-  a36 = 37;
-  a37 = 38;
-  a38 = 39;
-  a39 = 40;
-  a40 = 41;
-  a41 = 42;
-  a42 = 43;
-  a43 = 44;
-  a44 = 45;
-  a45 = 46;
-  a46 = 47;
-  a47 = 48;
-  a48 = 49;
-  a49 = 50;
-  a50 = 51;
-  a51 = 52;
-  a52 = 53;
-  a53 = 54;
-  a54 = 55;
-  a55 = 56;
-  a56 = 57;
-  a57 = 58;
-  a58 = 59;
-  a59 = 60;
-  a60 = 61;
-  a61 = 62;
-  a62 = 63;
-  a63 = 64;
-  a64 = 65;
-  a65 = 66;
-  a66 = 67;
-  a67 = 68;
-  a68 = 69;
-  a69 = 70;
-  a70 = 71;
-  a71 = 72;
-  a72 = 73;
-  a73 = 74;
-  a74 = 75;
-  a75 = 76;
-  a76 = 77;
-  a77 = 78;
-  a78 = 79;
-  a79 = 80;
-  a80 = 81;
-  a81 = 82;
-  a82 = 83;
-  a83 = 84;
-  a84 = 85;
-  a85 = 86;
-  a86 = 87;
-  a87 = 88;
-  a88 = 89;
-  a89 = 90;
-  a90 = 91;
-  a91 = 92;
-  a92 = 93;
-  a93 = 94;
-  a94 = 95;
-  a95 = 96;
-  a96 = 97;
-  a97 = 98;
-  a98 = 99;
-  a99 = 100;
-  a100 = 101;
-  a101 = 102;
-  a102 = 103;
-  a103 = 104;
-  a104 = 105;
-  a105 = 106;
-  a106 = 107;
-  a107 = 108;
-  a108 = 109;
-  a109 = 110;
-  a110 = 111;
-  a111 = 112;
-  a112 = 113;
-  a113 = 114;
-  a114 = 115;
-  a115 = 116;
-  a116 = 117;
-  a117 = 118;
-  a118 = 119;
-  a119 = 120;
-  a120 = 121;
-  a121 = 122;
-  a122 = 123;
-  a123 = 124;
-  a124 = 125;
-  a125 = 126;
-  a126 = 127;
-  a127 = 128;
-
-  final result = returnStruct1024BytesHomogeneousUint64Leaf(
-      a0,
-      a1,
-      a2,
-      a3,
-      a4,
-      a5,
-      a6,
-      a7,
-      a8,
-      a9,
-      a10,
-      a11,
-      a12,
-      a13,
-      a14,
-      a15,
-      a16,
-      a17,
-      a18,
-      a19,
-      a20,
-      a21,
-      a22,
-      a23,
-      a24,
-      a25,
-      a26,
-      a27,
-      a28,
-      a29,
-      a30,
-      a31,
-      a32,
-      a33,
-      a34,
-      a35,
-      a36,
-      a37,
-      a38,
-      a39,
-      a40,
-      a41,
-      a42,
-      a43,
-      a44,
-      a45,
-      a46,
-      a47,
-      a48,
-      a49,
-      a50,
-      a51,
-      a52,
-      a53,
-      a54,
-      a55,
-      a56,
-      a57,
-      a58,
-      a59,
-      a60,
-      a61,
-      a62,
-      a63,
-      a64,
-      a65,
-      a66,
-      a67,
-      a68,
-      a69,
-      a70,
-      a71,
-      a72,
-      a73,
-      a74,
-      a75,
-      a76,
-      a77,
-      a78,
-      a79,
-      a80,
-      a81,
-      a82,
-      a83,
-      a84,
-      a85,
-      a86,
-      a87,
-      a88,
-      a89,
-      a90,
-      a91,
-      a92,
-      a93,
-      a94,
-      a95,
-      a96,
-      a97,
-      a98,
-      a99,
-      a100,
-      a101,
-      a102,
-      a103,
-      a104,
-      a105,
-      a106,
-      a107,
-      a108,
-      a109,
-      a110,
-      a111,
-      a112,
-      a113,
-      a114,
-      a115,
-      a116,
-      a117,
-      a118,
-      a119,
-      a120,
-      a121,
-      a122,
-      a123,
-      a124,
-      a125,
-      a126,
-      a127);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-  Expect.equals(a5, result.a5);
-  Expect.equals(a6, result.a6);
-  Expect.equals(a7, result.a7);
-  Expect.equals(a8, result.a8);
-  Expect.equals(a9, result.a9);
-  Expect.equals(a10, result.a10);
-  Expect.equals(a11, result.a11);
-  Expect.equals(a12, result.a12);
-  Expect.equals(a13, result.a13);
-  Expect.equals(a14, result.a14);
-  Expect.equals(a15, result.a15);
-  Expect.equals(a16, result.a16);
-  Expect.equals(a17, result.a17);
-  Expect.equals(a18, result.a18);
-  Expect.equals(a19, result.a19);
-  Expect.equals(a20, result.a20);
-  Expect.equals(a21, result.a21);
-  Expect.equals(a22, result.a22);
-  Expect.equals(a23, result.a23);
-  Expect.equals(a24, result.a24);
-  Expect.equals(a25, result.a25);
-  Expect.equals(a26, result.a26);
-  Expect.equals(a27, result.a27);
-  Expect.equals(a28, result.a28);
-  Expect.equals(a29, result.a29);
-  Expect.equals(a30, result.a30);
-  Expect.equals(a31, result.a31);
-  Expect.equals(a32, result.a32);
-  Expect.equals(a33, result.a33);
-  Expect.equals(a34, result.a34);
-  Expect.equals(a35, result.a35);
-  Expect.equals(a36, result.a36);
-  Expect.equals(a37, result.a37);
-  Expect.equals(a38, result.a38);
-  Expect.equals(a39, result.a39);
-  Expect.equals(a40, result.a40);
-  Expect.equals(a41, result.a41);
-  Expect.equals(a42, result.a42);
-  Expect.equals(a43, result.a43);
-  Expect.equals(a44, result.a44);
-  Expect.equals(a45, result.a45);
-  Expect.equals(a46, result.a46);
-  Expect.equals(a47, result.a47);
-  Expect.equals(a48, result.a48);
-  Expect.equals(a49, result.a49);
-  Expect.equals(a50, result.a50);
-  Expect.equals(a51, result.a51);
-  Expect.equals(a52, result.a52);
-  Expect.equals(a53, result.a53);
-  Expect.equals(a54, result.a54);
-  Expect.equals(a55, result.a55);
-  Expect.equals(a56, result.a56);
-  Expect.equals(a57, result.a57);
-  Expect.equals(a58, result.a58);
-  Expect.equals(a59, result.a59);
-  Expect.equals(a60, result.a60);
-  Expect.equals(a61, result.a61);
-  Expect.equals(a62, result.a62);
-  Expect.equals(a63, result.a63);
-  Expect.equals(a64, result.a64);
-  Expect.equals(a65, result.a65);
-  Expect.equals(a66, result.a66);
-  Expect.equals(a67, result.a67);
-  Expect.equals(a68, result.a68);
-  Expect.equals(a69, result.a69);
-  Expect.equals(a70, result.a70);
-  Expect.equals(a71, result.a71);
-  Expect.equals(a72, result.a72);
-  Expect.equals(a73, result.a73);
-  Expect.equals(a74, result.a74);
-  Expect.equals(a75, result.a75);
-  Expect.equals(a76, result.a76);
-  Expect.equals(a77, result.a77);
-  Expect.equals(a78, result.a78);
-  Expect.equals(a79, result.a79);
-  Expect.equals(a80, result.a80);
-  Expect.equals(a81, result.a81);
-  Expect.equals(a82, result.a82);
-  Expect.equals(a83, result.a83);
-  Expect.equals(a84, result.a84);
-  Expect.equals(a85, result.a85);
-  Expect.equals(a86, result.a86);
-  Expect.equals(a87, result.a87);
-  Expect.equals(a88, result.a88);
-  Expect.equals(a89, result.a89);
-  Expect.equals(a90, result.a90);
-  Expect.equals(a91, result.a91);
-  Expect.equals(a92, result.a92);
-  Expect.equals(a93, result.a93);
-  Expect.equals(a94, result.a94);
-  Expect.equals(a95, result.a95);
-  Expect.equals(a96, result.a96);
-  Expect.equals(a97, result.a97);
-  Expect.equals(a98, result.a98);
-  Expect.equals(a99, result.a99);
-  Expect.equals(a100, result.a100);
-  Expect.equals(a101, result.a101);
-  Expect.equals(a102, result.a102);
-  Expect.equals(a103, result.a103);
-  Expect.equals(a104, result.a104);
-  Expect.equals(a105, result.a105);
-  Expect.equals(a106, result.a106);
-  Expect.equals(a107, result.a107);
-  Expect.equals(a108, result.a108);
-  Expect.equals(a109, result.a109);
-  Expect.equals(a110, result.a110);
-  Expect.equals(a111, result.a111);
-  Expect.equals(a112, result.a112);
-  Expect.equals(a113, result.a113);
-  Expect.equals(a114, result.a114);
-  Expect.equals(a115, result.a115);
-  Expect.equals(a116, result.a116);
-  Expect.equals(a117, result.a117);
-  Expect.equals(a118, result.a118);
-  Expect.equals(a119, result.a119);
-  Expect.equals(a120, result.a120);
-  Expect.equals(a121, result.a121);
-  Expect.equals(a122, result.a122);
-  Expect.equals(a123, result.a123);
-  Expect.equals(a124, result.a124);
-  Expect.equals(a125, result.a125);
-  Expect.equals(a126, result.a126);
-  Expect.equals(a127, result.a127);
-}
-
-final returnStruct3BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct3BytesPackedInt Function(Int8, Int16),
-    Struct3BytesPackedInt Function(
-        int, int)>("ReturnStruct3BytesPackedInt", isLeaf: true);
-
-/// Small struct with mis-aligned member.
-void testReturnStruct3BytesPackedIntLeaf() {
-  int a0;
-  int a1;
-
-  a0 = -1;
-  a1 = 2;
-
-  final result = returnStruct3BytesPackedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-}
-
-final returnStruct8BytesPackedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesPackedInt Function(Uint8, Uint32, Uint8, Uint8, Uint8),
-    Struct8BytesPackedInt Function(
-        int, int, int, int, int)>("ReturnStruct8BytesPackedInt", isLeaf: true);
-
-/// Struct with mis-aligned member.
-void testReturnStruct8BytesPackedIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-
-  a0 = 1;
-  a1 = 2;
-  a2 = 3;
-  a3 = 4;
-  a4 = 5;
-
-  final result = returnStruct8BytesPackedIntLeaf(a0, a1, a2, a3, a4);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-  Expect.equals(a3, result.a3);
-  Expect.equals(a4, result.a4);
-}
-
-final returnStruct9BytesPackedMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct9BytesPackedMixed Function(Uint8, Double),
-    Struct9BytesPackedMixed Function(
-        int, double)>("ReturnStruct9BytesPackedMixed", isLeaf: true);
-
-/// Struct with mis-aligned member.
-/// Tests backfilling of CPU and FPU registers.
-void testReturnStruct9BytesPackedMixedLeaf() {
-  int a0;
-  double a1;
-
-  a0 = 1;
-  a1 = 2.0;
-
-  final result = returnStruct9BytesPackedMixedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.approxEquals(a1, result.a1);
-}
-
-final returnUnion4BytesMixedLeaf = ffiTestFunctions.lookupFunction<
-    Union4BytesMixed Function(Uint32),
-    Union4BytesMixed Function(int)>("ReturnUnion4BytesMixed", isLeaf: true);
-
-/// Returning a mixed integer/float union.
-void testReturnUnion4BytesMixedLeaf() {
-  int a0;
-
-  a0 = 1;
-
-  final result = returnUnion4BytesMixedLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-}
-
-final returnUnion8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
-    Union8BytesNestedFloat Function(Double),
-    Union8BytesNestedFloat Function(
-        double)>("ReturnUnion8BytesNestedFloat", isLeaf: true);
-
-/// Returning a floating point only union.
-void testReturnUnion8BytesNestedFloatLeaf() {
-  double a0;
-
-  a0 = -1.0;
-
-  final result = returnUnion8BytesNestedFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0, result.a0);
-}
-
-final returnUnion9BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-    Union9BytesNestedInt Function(Struct8BytesInt),
-    Union9BytesNestedInt Function(
-        Struct8BytesInt)>("ReturnUnion9BytesNestedInt", isLeaf: true);
-
-/// Returning a mixed-size union.
-void testReturnUnion9BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct8BytesInt>();
-  final Struct8BytesInt a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-
-  final result = returnUnion9BytesNestedIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-
-  calloc.free(a0Pointer);
-}
-
-final returnUnion16BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
-        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat),
-        Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat)>(
-    "ReturnUnion16BytesNestedFloat",
-    isLeaf: true);
-
-/// Returning union with homogenous floats.
-void testReturnUnion16BytesNestedFloatLeaf() {
-  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-
-  final result = returnUnion16BytesNestedFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0.a0);
-  Expect.approxEquals(a0.a1, result.a0.a1);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStruct1ByteIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct1ByteInt Function(Struct1ByteInt),
-    Struct1ByteInt Function(
-        Struct1ByteInt)>("ReturnStructArgumentStruct1ByteInt", isLeaf: true);
-
-/// Test that a struct passed in as argument can be returned.
-/// Especially for ffi callbacks.
-/// Struct is passed in int registers in most ABIs.
-void testReturnStructArgumentStruct1ByteIntLeaf() {
-  final a0Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-
-  final result = returnStructArgumentStruct1ByteIntLeaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentInt32x8Struct1ByteIntLeaf =
-    ffiTestFunctions
-        .lookupFunction<
-                Struct1ByteInt Function(Int32, Int32, Int32, Int32, Int32, Int32,
-                    Int32, Int32, Struct1ByteInt),
-                Struct1ByteInt Function(
-                    int, int, int, int, int, int, int, int, Struct1ByteInt)>(
-            "ReturnStructArgumentInt32x8Struct1ByteInt",
-            isLeaf: true);
-
-/// Test that a struct passed in as argument can be returned.
-/// Especially for ffi callbacks.
-/// Struct is passed on stack on all ABIs.
-void testReturnStructArgumentInt32x8Struct1ByteIntLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  final a8Pointer = calloc<Struct1ByteInt>();
-  final Struct1ByteInt a8 = a8Pointer.ref;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-  a5 = 6;
-  a6 = -7;
-  a7 = 8;
-  a8.a0 = -9;
-
-  final result = returnStructArgumentInt32x8Struct1ByteIntLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.equals(a8.a0, result.a0);
-
-  calloc.free(a8Pointer);
-}
-
-final returnStructArgumentStruct8BytesHomogeneousFloatLeaf =
-    ffiTestFunctions.lookupFunction<
-            Struct8BytesHomogeneousFloat Function(Struct8BytesHomogeneousFloat),
-            Struct8BytesHomogeneousFloat Function(
-                Struct8BytesHomogeneousFloat)>(
-        "ReturnStructArgumentStruct8BytesHomogeneousFloat",
-        isLeaf: true);
-
-/// Test that a struct passed in as argument can be returned.
-/// Especially for ffi callbacks.
-/// Struct is passed in float registers in most ABIs.
-void testReturnStructArgumentStruct8BytesHomogeneousFloatLeaf() {
-  final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
-  final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
-
-  a0.a0 = -1.0;
-  a0.a1 = 2.0;
-
-  final result = returnStructArgumentStruct8BytesHomogeneousFloatLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0);
-  Expect.approxEquals(a0.a1, result.a1);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStruct20BytesHomogeneousInt32Leaf =
-    ffiTestFunctions
-        .lookupFunction<
-                Struct20BytesHomogeneousInt32 Function(
-                    Struct20BytesHomogeneousInt32),
-                Struct20BytesHomogeneousInt32 Function(
-                    Struct20BytesHomogeneousInt32)>(
-            "ReturnStructArgumentStruct20BytesHomogeneousInt32",
-            isLeaf: true);
-
-/// On arm64, both argument and return value are passed in by pointer.
-void testReturnStructArgumentStruct20BytesHomogeneousInt32Leaf() {
-  final a0Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a0 = a0Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a0.a3 = 4;
-  a0.a4 = -5;
-
-  final result = returnStructArgumentStruct20BytesHomogeneousInt32Leaf(a0);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0);
-  Expect.equals(a0.a1, result.a1);
-  Expect.equals(a0.a2, result.a2);
-  Expect.equals(a0.a3, result.a3);
-  Expect.equals(a0.a4, result.a4);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf =
-    ffiTestFunctions.lookupFunction<
-            Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32,
-                Int32, Int32, Int32, Int32, Struct20BytesHomogeneousInt32),
-            Struct20BytesHomogeneousInt32 Function(int, int, int, int, int, int,
-                int, int, Struct20BytesHomogeneousInt32)>(
-        "ReturnStructArgumentInt32x8Struct20BytesHomogeneou",
-        isLeaf: true);
-
-/// On arm64, both argument and return value are passed in by pointer.
-/// Ints exhaust registers, so that pointer is passed on stack.
-void testReturnStructArgumentInt32x8Struct20BytesHomogeneouLeaf() {
-  int a0;
-  int a1;
-  int a2;
-  int a3;
-  int a4;
-  int a5;
-  int a6;
-  int a7;
-  final a8Pointer = calloc<Struct20BytesHomogeneousInt32>();
-  final Struct20BytesHomogeneousInt32 a8 = a8Pointer.ref;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-  a3 = 4;
-  a4 = -5;
-  a5 = 6;
-  a6 = -7;
-  a7 = 8;
-  a8.a0 = -9;
-  a8.a1 = 10;
-  a8.a2 = -11;
-  a8.a3 = 12;
-  a8.a4 = -13;
-
-  final result = returnStructArgumentInt32x8Struct20BytesHomogeneouLeaf(
-      a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
-  print("result = $result");
-
-  Expect.equals(a8.a0, result.a0);
-  Expect.equals(a8.a1, result.a1);
-  Expect.equals(a8.a2, result.a2);
-  Expect.equals(a8.a3, result.a3);
-  Expect.equals(a8.a4, result.a4);
-
-  calloc.free(a8Pointer);
-}
-
-final returnStructArgumentStruct8BytesInlineArrayIntLeaf =
-    ffiTestFunctions.lookupFunction<
-            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt),
-            Struct8BytesInlineArrayInt Function(Struct8BytesInlineArrayInt)>(
-        "ReturnStructArgumentStruct8BytesInlineArrayInt",
-        isLeaf: true);
-
-/// Test returning struct with inline array.
-void testReturnStructArgumentStruct8BytesInlineArrayIntLeaf() {
-  final a0Pointer = calloc<Struct8BytesInlineArrayInt>();
-  final Struct8BytesInlineArrayInt a0 = a0Pointer.ref;
-
-  a0.a0[0] = 1;
-  a0.a0[1] = 2;
-  a0.a0[2] = 3;
-  a0.a0[3] = 4;
-  a0.a0[4] = 5;
-  a0.a0[5] = 6;
-  a0.a0[6] = 7;
-  a0.a0[7] = 8;
-
-  final result = returnStructArgumentStruct8BytesInlineArrayIntLeaf(a0);
-
-  print("result = $result");
-
-  for (int i = 0; i < 8; i++) {
-    Expect.equals(a0.a0[i], result.a0[i]);
-  }
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStructStruct16BytesHomogeneousLeaf =
-    ffiTestFunctions.lookupFunction<
-            StructStruct16BytesHomogeneousFloat2 Function(
-                StructStruct16BytesHomogeneousFloat2),
-            StructStruct16BytesHomogeneousFloat2 Function(
-                StructStruct16BytesHomogeneousFloat2)>(
-        "ReturnStructArgumentStructStruct16BytesHomogeneous",
-        isLeaf: true);
-
-/// Return value in FPU registers on arm hardfp and arm64.
-void testReturnStructArgumentStructStruct16BytesHomogeneousLeaf() {
-  final a0Pointer = calloc<StructStruct16BytesHomogeneousFloat2>();
-  final StructStruct16BytesHomogeneousFloat2 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-
-  final result = returnStructArgumentStructStruct16BytesHomogeneousLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0.a0, result.a0.a0);
-  for (int i = 0; i < 2; i++) {
-    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
-  }
-  Expect.approxEquals(a0.a2, result.a2);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStructStruct32BytesHomogeneousLeaf =
-    ffiTestFunctions.lookupFunction<
-            StructStruct32BytesHomogeneousDouble2 Function(
-                StructStruct32BytesHomogeneousDouble2),
-            StructStruct32BytesHomogeneousDouble2 Function(
-                StructStruct32BytesHomogeneousDouble2)>(
-        "ReturnStructArgumentStructStruct32BytesHomogeneous",
-        isLeaf: true);
-
-/// Return value in FPU registers on arm64.
-void testReturnStructArgumentStructStruct32BytesHomogeneousLeaf() {
-  final a0Pointer = calloc<StructStruct32BytesHomogeneousDouble2>();
-  final StructStruct32BytesHomogeneousDouble2 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[1].a0 = -3.0;
-  a0.a2 = 4.0;
-
-  final result = returnStructArgumentStructStruct32BytesHomogeneousLeaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0.a0, result.a0.a0);
-  for (int i = 0; i < 2; i++) {
-    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
-  }
-  Expect.approxEquals(a0.a2, result.a2);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructArgumentStructStruct16BytesMixed3Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3),
-            StructStruct16BytesMixed3 Function(StructStruct16BytesMixed3)>(
-        "ReturnStructArgumentStructStruct16BytesMixed3",
-        isLeaf: true);
-
-/// On x64 Linux, return value is split over FP and int registers.
-void testReturnStructArgumentStructStruct16BytesMixed3Leaf() {
-  final a0Pointer = calloc<StructStruct16BytesMixed3>();
-  final StructStruct16BytesMixed3 a0 = a0Pointer.ref;
-
-  a0.a0.a0 = -1.0;
-  a0.a1[0].a0 = 2.0;
-  a0.a1[0].a1 = -3;
-  a0.a1[0].a2 = 4;
-  a0.a2[0] = -5;
-  a0.a2[1] = 6;
-
-  final result = returnStructArgumentStructStruct16BytesMixed3Leaf(a0);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0.a0, result.a0.a0);
-  for (int i = 0; i < 1; i++) {
-    Expect.approxEquals(a0.a1[i].a0, result.a1[i].a0);
-    Expect.equals(a0.a1[i].a1, result.a1[i].a1);
-    Expect.equals(a0.a1[i].a2, result.a1[i].a2);
-  }
-  for (int i = 0; i < 2; i++) {
-    Expect.equals(a0.a2[i], result.a2[i]);
-  }
-
-  calloc.free(a0Pointer);
-}
-
-final returnStructAlignmentInt16Leaf = ffiTestFunctions.lookupFunction<
-    StructAlignmentInt16 Function(Int8, Int16, Int8),
-    StructAlignmentInt16 Function(
-        int, int, int)>("ReturnStructAlignmentInt16", isLeaf: true);
-
-/// Test alignment and padding of 16 byte int within struct.
-void testReturnStructAlignmentInt16Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStructAlignmentInt16Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStructAlignmentInt32Leaf = ffiTestFunctions.lookupFunction<
-    StructAlignmentInt32 Function(Int8, Int32, Int8),
-    StructAlignmentInt32 Function(
-        int, int, int)>("ReturnStructAlignmentInt32", isLeaf: true);
-
-/// Test alignment and padding of 32 byte int within struct.
-void testReturnStructAlignmentInt32Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStructAlignmentInt32Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStructAlignmentInt64Leaf = ffiTestFunctions.lookupFunction<
-    StructAlignmentInt64 Function(Int8, Int64, Int8),
-    StructAlignmentInt64 Function(
-        int, int, int)>("ReturnStructAlignmentInt64", isLeaf: true);
-
-/// Test alignment and padding of 64 byte int within struct.
-void testReturnStructAlignmentInt64Leaf() {
-  int a0;
-  int a1;
-  int a2;
-
-  a0 = -1;
-  a1 = 2;
-  a2 = -3;
-
-  final result = returnStructAlignmentInt64Leaf(a0, a1, a2);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1, result.a1);
-  Expect.equals(a2, result.a2);
-}
-
-final returnStruct8BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-        Struct8BytesNestedInt Function(
-            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16),
-        Struct8BytesNestedInt Function(
-            Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16)>(
-    "ReturnStruct8BytesNestedInt",
-    isLeaf: true);
-
-/// Simple nested struct.
-void testReturnStruct8BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3;
-  a1.a1 = 4;
-
-  final result = returnStruct8BytesNestedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct8BytesNestedFloatLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesNestedFloat Function(Struct4BytesFloat, Struct4BytesFloat),
-    Struct8BytesNestedFloat Function(Struct4BytesFloat,
-        Struct4BytesFloat)>("ReturnStruct8BytesNestedFloat", isLeaf: true);
-
-/// Simple nested struct with floats.
-void testReturnStruct8BytesNestedFloatLeaf() {
-  final a0Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a1 = a1Pointer.ref;
-
-  a0.a0 = -1.0;
-  a1.a0 = 2.0;
-
-  final result = returnStruct8BytesNestedFloatLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0.a0);
-  Expect.approxEquals(a1.a0, result.a1.a0);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct8BytesNestedFloat2Leaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesNestedFloat2 Function(Struct4BytesFloat, Float),
-    Struct8BytesNestedFloat2 Function(Struct4BytesFloat,
-        double)>("ReturnStruct8BytesNestedFloat2", isLeaf: true);
-
-/// The nesting is irregular, testing homogenous float rules on arm and arm64,
-/// and the fpu register usage on x64.
-void testReturnStruct8BytesNestedFloat2Leaf() {
-  final a0Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a0 = a0Pointer.ref;
-  double a1;
-
-  a0.a0 = -1.0;
-  a1 = 2.0;
-
-  final result = returnStruct8BytesNestedFloat2Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.approxEquals(a0.a0, result.a0.a0);
-  Expect.approxEquals(a1, result.a1);
-
-  calloc.free(a0Pointer);
-}
-
-final returnStruct8BytesNestedMixedLeaf = ffiTestFunctions.lookupFunction<
-    Struct8BytesNestedMixed Function(
-        Struct4BytesHomogeneousInt16, Struct4BytesFloat),
-    Struct8BytesNestedMixed Function(Struct4BytesHomogeneousInt16,
-        Struct4BytesFloat)>("ReturnStruct8BytesNestedMixed", isLeaf: true);
-
-/// Simple nested struct with mixed members.
-void testReturnStruct8BytesNestedMixedLeaf() {
-  final a0Pointer = calloc<Struct4BytesHomogeneousInt16>();
-  final Struct4BytesHomogeneousInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct4BytesFloat>();
-  final Struct4BytesFloat a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a1.a0 = -3.0;
-
-  final result = returnStruct8BytesNestedMixedLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.approxEquals(a1.a0, result.a1.a0);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct16BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct16BytesNestedInt Function(
-        Struct8BytesNestedInt, Struct8BytesNestedInt),
-    Struct16BytesNestedInt Function(Struct8BytesNestedInt,
-        Struct8BytesNestedInt)>("ReturnStruct16BytesNestedInt", isLeaf: true);
-
-/// Deeper nested struct to test recursive member access.
-void testReturnStruct16BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct8BytesNestedInt>();
-  final Struct8BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0 = -1;
-  a0.a0.a1 = 2;
-  a0.a1.a0 = -3;
-  a0.a1.a1 = 4;
-  a1.a0.a0 = -5;
-  a1.a0.a1 = 6;
-  a1.a1.a0 = -7;
-  a1.a1.a1 = 8;
-
-  final result = returnStruct16BytesNestedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0.a0, result.a0.a0.a0);
-  Expect.equals(a0.a0.a1, result.a0.a0.a1);
-  Expect.equals(a0.a1.a0, result.a0.a1.a0);
-  Expect.equals(a0.a1.a1, result.a0.a1.a1);
-  Expect.equals(a1.a0.a0, result.a1.a0.a0);
-  Expect.equals(a1.a0.a1, result.a1.a0.a1);
-  Expect.equals(a1.a1.a0, result.a1.a1.a0);
-  Expect.equals(a1.a1.a1, result.a1.a1.a1);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStruct32BytesNestedIntLeaf = ffiTestFunctions.lookupFunction<
-    Struct32BytesNestedInt Function(
-        Struct16BytesNestedInt, Struct16BytesNestedInt),
-    Struct32BytesNestedInt Function(Struct16BytesNestedInt,
-        Struct16BytesNestedInt)>("ReturnStruct32BytesNestedInt", isLeaf: true);
-
-/// Even deeper nested struct to test recursive member access.
-void testReturnStruct32BytesNestedIntLeaf() {
-  final a0Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a0 = a0Pointer.ref;
-  final a1Pointer = calloc<Struct16BytesNestedInt>();
-  final Struct16BytesNestedInt a1 = a1Pointer.ref;
-
-  a0.a0.a0.a0 = -1;
-  a0.a0.a0.a1 = 2;
-  a0.a0.a1.a0 = -3;
-  a0.a0.a1.a1 = 4;
-  a0.a1.a0.a0 = -5;
-  a0.a1.a0.a1 = 6;
-  a0.a1.a1.a0 = -7;
-  a0.a1.a1.a1 = 8;
-  a1.a0.a0.a0 = -9;
-  a1.a0.a0.a1 = 10;
-  a1.a0.a1.a0 = -11;
-  a1.a0.a1.a1 = 12;
-  a1.a1.a0.a0 = -13;
-  a1.a1.a0.a1 = 14;
-  a1.a1.a1.a0 = -15;
-  a1.a1.a1.a1 = 16;
-
-  final result = returnStruct32BytesNestedIntLeaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0.a0.a0, result.a0.a0.a0.a0);
-  Expect.equals(a0.a0.a0.a1, result.a0.a0.a0.a1);
-  Expect.equals(a0.a0.a1.a0, result.a0.a0.a1.a0);
-  Expect.equals(a0.a0.a1.a1, result.a0.a0.a1.a1);
-  Expect.equals(a0.a1.a0.a0, result.a0.a1.a0.a0);
-  Expect.equals(a0.a1.a0.a1, result.a0.a1.a0.a1);
-  Expect.equals(a0.a1.a1.a0, result.a0.a1.a1.a0);
-  Expect.equals(a0.a1.a1.a1, result.a0.a1.a1.a1);
-  Expect.equals(a1.a0.a0.a0, result.a1.a0.a0.a0);
-  Expect.equals(a1.a0.a0.a1, result.a1.a0.a0.a1);
-  Expect.equals(a1.a0.a1.a0, result.a1.a0.a1.a0);
-  Expect.equals(a1.a0.a1.a1, result.a1.a0.a1.a1);
-  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
-  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
-  Expect.equals(a1.a1.a1.a0, result.a1.a1.a1.a0);
-  Expect.equals(a1.a1.a1.a1, result.a1.a1.a1.a1);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIntStructAlignmentInt16Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructNestedIntStructAlignmentInt16 Function(
-                StructAlignmentInt16, StructAlignmentInt16),
-            StructNestedIntStructAlignmentInt16 Function(
-                StructAlignmentInt16, StructAlignmentInt16)>(
-        "ReturnStructNestedIntStructAlignmentInt16",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 16 byte int.
-void testReturnStructNestedIntStructAlignmentInt16Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructAlignmentInt16>();
-  final StructAlignmentInt16 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-
-  final result = returnStructNestedIntStructAlignmentInt16Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-  Expect.equals(a1.a2, result.a1.a2);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIntStructAlignmentInt32Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructNestedIntStructAlignmentInt32 Function(
-                StructAlignmentInt32, StructAlignmentInt32),
-            StructNestedIntStructAlignmentInt32 Function(
-                StructAlignmentInt32, StructAlignmentInt32)>(
-        "ReturnStructNestedIntStructAlignmentInt32",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 32 byte int.
-void testReturnStructNestedIntStructAlignmentInt32Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructAlignmentInt32>();
-  final StructAlignmentInt32 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-
-  final result = returnStructNestedIntStructAlignmentInt32Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-  Expect.equals(a1.a2, result.a1.a2);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIntStructAlignmentInt64Leaf =
-    ffiTestFunctions.lookupFunction<
-            StructNestedIntStructAlignmentInt64 Function(
-                StructAlignmentInt64, StructAlignmentInt64),
-            StructNestedIntStructAlignmentInt64 Function(
-                StructAlignmentInt64, StructAlignmentInt64)>(
-        "ReturnStructNestedIntStructAlignmentInt64",
-        isLeaf: true);
-
-/// Test alignment and padding of nested struct with 64 byte int.
-void testReturnStructNestedIntStructAlignmentInt64Leaf() {
-  final a0Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a0 = a0Pointer.ref;
-  final a1Pointer = calloc<StructAlignmentInt64>();
-  final StructAlignmentInt64 a1 = a1Pointer.ref;
-
-  a0.a0 = -1;
-  a0.a1 = 2;
-  a0.a2 = -3;
-  a1.a0 = 4;
-  a1.a1 = -5;
-  a1.a2 = 6;
-
-  final result = returnStructNestedIntStructAlignmentInt64Leaf(a0, a1);
-
-  print("result = $result");
-
-  Expect.equals(a0.a0, result.a0.a0);
-  Expect.equals(a0.a1, result.a0.a1);
-  Expect.equals(a0.a2, result.a0.a2);
-  Expect.equals(a1.a0, result.a1.a0);
-  Expect.equals(a1.a1, result.a1.a1);
-  Expect.equals(a1.a2, result.a1.a2);
-
-  calloc.free(a0Pointer);
-  calloc.free(a1Pointer);
-}
-
-final returnStructNestedIrregularEvenBiggerLeaf =
-    ffiTestFunctions.lookupFunction<
-        StructNestedIrregularEvenBigger Function(Uint64,
-            StructNestedIrregularBigger, StructNestedIrregularBigger, Double),
-        StructNestedIrregularEvenBigger Function(
-            int,
-            StructNestedIrregularBigger,
-            StructNestedIrregularBigger,
-            double)>("ReturnStructNestedIrregularEvenBigger", isLeaf: true);
-
-/// Return big irregular struct as smoke test.
-void testReturnStructNestedIrregularEvenBiggerLeaf() {
-  int a0;
-  final a1Pointer = calloc<StructNestedIrregularBigger>();
-  final StructNestedIrregularBigger a1 = a1Pointer.ref;
-  final a2Pointer = calloc<StructNestedIrregularBigger>();
-  final StructNestedIrregularBigger a2 = a2Pointer.ref;
-  double a3;
-
-  a0 = 1;
-  a1.a0.a0 = 2;
-  a1.a0.a1.a0.a0 = -3;
-  a1.a0.a1.a0.a1 = 4;
-  a1.a0.a1.a1.a0 = -5.0;
-  a1.a0.a2 = 6;
-  a1.a0.a3.a0.a0 = -7.0;
-  a1.a0.a3.a1 = 8.0;
-  a1.a0.a4 = 9;
-  a1.a0.a5.a0.a0 = 10.0;
-  a1.a0.a5.a1.a0 = -11.0;
-  a1.a0.a6 = 12;
-  a1.a1.a0.a0 = -13;
-  a1.a1.a0.a1 = 14;
-  a1.a1.a1.a0 = -15.0;
-  a1.a2 = 16.0;
-  a1.a3 = -17.0;
-  a2.a0.a0 = 18;
-  a2.a0.a1.a0.a0 = -19;
-  a2.a0.a1.a0.a1 = 20;
-  a2.a0.a1.a1.a0 = -21.0;
-  a2.a0.a2 = 22;
-  a2.a0.a3.a0.a0 = -23.0;
-  a2.a0.a3.a1 = 24.0;
-  a2.a0.a4 = 25;
-  a2.a0.a5.a0.a0 = 26.0;
-  a2.a0.a5.a1.a0 = -27.0;
-  a2.a0.a6 = 28;
-  a2.a1.a0.a0 = -29;
-  a2.a1.a0.a1 = 30;
-  a2.a1.a1.a0 = -31.0;
-  a2.a2 = 32.0;
-  a2.a3 = -33.0;
-  a3 = 34.0;
-
-  final result = returnStructNestedIrregularEvenBiggerLeaf(a0, a1, a2, a3);
-
-  print("result = $result");
-
-  Expect.equals(a0, result.a0);
-  Expect.equals(a1.a0.a0, result.a1.a0.a0);
-  Expect.equals(a1.a0.a1.a0.a0, result.a1.a0.a1.a0.a0);
-  Expect.equals(a1.a0.a1.a0.a1, result.a1.a0.a1.a0.a1);
-  Expect.approxEquals(a1.a0.a1.a1.a0, result.a1.a0.a1.a1.a0);
-  Expect.equals(a1.a0.a2, result.a1.a0.a2);
-  Expect.approxEquals(a1.a0.a3.a0.a0, result.a1.a0.a3.a0.a0);
-  Expect.approxEquals(a1.a0.a3.a1, result.a1.a0.a3.a1);
-  Expect.equals(a1.a0.a4, result.a1.a0.a4);
-  Expect.approxEquals(a1.a0.a5.a0.a0, result.a1.a0.a5.a0.a0);
-  Expect.approxEquals(a1.a0.a5.a1.a0, result.a1.a0.a5.a1.a0);
-  Expect.equals(a1.a0.a6, result.a1.a0.a6);
-  Expect.equals(a1.a1.a0.a0, result.a1.a1.a0.a0);
-  Expect.equals(a1.a1.a0.a1, result.a1.a1.a0.a1);
-  Expect.approxEquals(a1.a1.a1.a0, result.a1.a1.a1.a0);
-  Expect.approxEquals(a1.a2, result.a1.a2);
-  Expect.approxEquals(a1.a3, result.a1.a3);
-  Expect.equals(a2.a0.a0, result.a2.a0.a0);
-  Expect.equals(a2.a0.a1.a0.a0, result.a2.a0.a1.a0.a0);
-  Expect.equals(a2.a0.a1.a0.a1, result.a2.a0.a1.a0.a1);
-  Expect.approxEquals(a2.a0.a1.a1.a0, result.a2.a0.a1.a1.a0);
-  Expect.equals(a2.a0.a2, result.a2.a0.a2);
-  Expect.approxEquals(a2.a0.a3.a0.a0, result.a2.a0.a3.a0.a0);
-  Expect.approxEquals(a2.a0.a3.a1, result.a2.a0.a3.a1);
-  Expect.equals(a2.a0.a4, result.a2.a0.a4);
-  Expect.approxEquals(a2.a0.a5.a0.a0, result.a2.a0.a5.a0.a0);
-  Expect.approxEquals(a2.a0.a5.a1.a0, result.a2.a0.a5.a1.a0);
-  Expect.equals(a2.a0.a6, result.a2.a0.a6);
-  Expect.equals(a2.a1.a0.a0, result.a2.a1.a0.a0);
-  Expect.equals(a2.a1.a0.a1, result.a2.a1.a0.a1);
-  Expect.approxEquals(a2.a1.a1.a0, result.a2.a1.a1.a0);
-  Expect.approxEquals(a2.a2, result.a2.a2);
-  Expect.approxEquals(a2.a3, result.a2.a3);
-  Expect.approxEquals(a3, result.a3);
-
-  calloc.free(a1Pointer);
-  calloc.free(a2Pointer);
-}
diff --git a/tests/ffi_2/inline_array_multi_dimensional_test.dart b/tests/ffi_2/inline_array_multi_dimensional_test.dart
index 08a5e44..d3a7b40 100644
--- a/tests/ffi_2/inline_array_multi_dimensional_test.dart
+++ b/tests/ffi_2/inline_array_multi_dimensional_test.dart
@@ -11,8 +11,8 @@
 import "package:expect/expect.dart";
 import 'package:ffi/ffi.dart';
 
-// Reuse struct definitions.
-import 'function_structs_by_value_generated_test.dart';
+// Reuse compound definitions.
+import 'function_structs_by_value_generated_compounds.dart';
 
 void main() {
   testSizeOf();
diff --git a/tests/ffi_2/inline_array_test.dart b/tests/ffi_2/inline_array_test.dart
index 70872c3..f3ff6ba 100644
--- a/tests/ffi_2/inline_array_test.dart
+++ b/tests/ffi_2/inline_array_test.dart
@@ -11,8 +11,8 @@
 import "package:expect/expect.dart";
 import 'package:ffi/ffi.dart';
 
-// Reuse struct definitions.
-import 'function_structs_by_value_generated_test.dart';
+// Reuse compound definitions.
+import 'function_structs_by_value_generated_compounds.dart';
 
 void main() {
   testSizeOf();
diff --git a/tests/ffi_2/structs_packed_test.dart b/tests/ffi_2/structs_packed_test.dart
index b50e10c..6834ee7 100644
--- a/tests/ffi_2/structs_packed_test.dart
+++ b/tests/ffi_2/structs_packed_test.dart
@@ -12,8 +12,8 @@
 
 import 'dylib_utils.dart';
 
-// Reuse struct definitions.
-import 'function_structs_by_value_generated_test.dart';
+// Reuse compound definitions.
+import 'function_structs_by_value_generated_compounds.dart';
 
 void main() {
   testSizeOfC();
diff --git a/tools/VERSION b/tools/VERSION
index cfac96c..80892437 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 220
+PRERELEASE 221
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 50a38bb..bf28d56 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -122,6 +122,12 @@
   const-functions:
     help: "Allow more of the Dart language to be executed in const expressions."
 
+  enhanced-enums:
+    help: "Enhanced Enums"
+
+  named-arguments-anywhere:
+    help: "Named Arguments Anywhere"
+
 # Experiment flag only used for testing.
   test-experiment:
     help: >-
