// Copyright (c) 2023, 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=20
// VMOptions=--use-slow-path
// VMOptions=--use-slow-path --stacktrace-every=100

import 'dart:async';
import 'dart:ffi';

import 'package:expect/expect.dart';
// ignore: unused_import
import 'package:ffi/ffi.dart';

import 'async_callback_tests_utils.dart';

import 'dylib_utils.dart';

// Reuse the compound classes.
import 'function_structs_by_value_generated_compounds.dart';

final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");

Future<void> main() async {
  for (final t in testCases) {
    print("==== Running " + t.name);
    await t.run();
  }
}

final testCases = [
  AsyncCallbackTest(
      "PassStruct1ByteIntx10",
      Pointer.fromFunction<PassStruct1ByteIntx10Type>(passStruct1ByteIntx10),
      passStruct1ByteIntx10AfterCallback),
  AsyncCallbackTest(
      "PassStruct3BytesHomogeneousUint8x10",
      Pointer.fromFunction<PassStruct3BytesHomogeneousUint8x10Type>(
          passStruct3BytesHomogeneousUint8x10),
      passStruct3BytesHomogeneousUint8x10AfterCallback),
  AsyncCallbackTest(
      "PassStruct3BytesInt2ByteAlignedx10",
      Pointer.fromFunction<PassStruct3BytesInt2ByteAlignedx10Type>(
          passStruct3BytesInt2ByteAlignedx10),
      passStruct3BytesInt2ByteAlignedx10AfterCallback),
  AsyncCallbackTest(
      "PassStruct4BytesHomogeneousInt16x10",
      Pointer.fromFunction<PassStruct4BytesHomogeneousInt16x10Type>(
          passStruct4BytesHomogeneousInt16x10),
      passStruct4BytesHomogeneousInt16x10AfterCallback),
  AsyncCallbackTest(
      "PassStruct7BytesHomogeneousUint8x10",
      Pointer.fromFunction<PassStruct7BytesHomogeneousUint8x10Type>(
          passStruct7BytesHomogeneousUint8x10),
      passStruct7BytesHomogeneousUint8x10AfterCallback),
  AsyncCallbackTest(
      "PassStruct7BytesInt4ByteAlignedx10",
      Pointer.fromFunction<PassStruct7BytesInt4ByteAlignedx10Type>(
          passStruct7BytesInt4ByteAlignedx10),
      passStruct7BytesInt4ByteAlignedx10AfterCallback),
  AsyncCallbackTest(
      "PassStruct8BytesIntx10",
      Pointer.fromFunction<PassStruct8BytesIntx10Type>(passStruct8BytesIntx10),
      passStruct8BytesIntx10AfterCallback),
  AsyncCallbackTest(
      "PassStruct8BytesHomogeneousFloatx10",
      Pointer.fromFunction<PassStruct8BytesHomogeneousFloatx10Type>(
          passStruct8BytesHomogeneousFloatx10),
      passStruct8BytesHomogeneousFloatx10AfterCallback),
  AsyncCallbackTest(
      "PassStruct8BytesMixedx10",
      Pointer.fromFunction<PassStruct8BytesMixedx10Type>(
          passStruct8BytesMixedx10),
      passStruct8BytesMixedx10AfterCallback),
  AsyncCallbackTest(
      "PassStruct9BytesHomogeneousUint8x10",
      Pointer.fromFunction<PassStruct9BytesHomogeneousUint8x10Type>(
          passStruct9BytesHomogeneousUint8x10),
      passStruct9BytesHomogeneousUint8x10AfterCallback),
  AsyncCallbackTest(
      "PassStruct9BytesInt4Or8ByteAlignedx10",
      Pointer.fromFunction<PassStruct9BytesInt4Or8ByteAlignedx10Type>(
          passStruct9BytesInt4Or8ByteAlignedx10),
      passStruct9BytesInt4Or8ByteAlignedx10AfterCallback),
  AsyncCallbackTest(
      "PassStruct12BytesHomogeneousFloatx6",
      Pointer.fromFunction<PassStruct12BytesHomogeneousFloatx6Type>(
          passStruct12BytesHomogeneousFloatx6),
      passStruct12BytesHomogeneousFloatx6AfterCallback),
  AsyncCallbackTest(
      "PassStruct16BytesHomogeneousFloatx5",
      Pointer.fromFunction<PassStruct16BytesHomogeneousFloatx5Type>(
          passStruct16BytesHomogeneousFloatx5),
      passStruct16BytesHomogeneousFloatx5AfterCallback),
  AsyncCallbackTest(
      "PassStruct16BytesMixedx10",
      Pointer.fromFunction<PassStruct16BytesMixedx10Type>(
          passStruct16BytesMixedx10),
      passStruct16BytesMixedx10AfterCallback),
  AsyncCallbackTest(
      "PassStruct16BytesMixed2x10",
      Pointer.fromFunction<PassStruct16BytesMixed2x10Type>(
          passStruct16BytesMixed2x10),
      passStruct16BytesMixed2x10AfterCallback),
  AsyncCallbackTest(
      "PassStruct17BytesIntx10",
      Pointer.fromFunction<PassStruct17BytesIntx10Type>(
          passStruct17BytesIntx10),
      passStruct17BytesIntx10AfterCallback),
  AsyncCallbackTest(
      "PassStruct19BytesHomogeneousUint8x10",
      Pointer.fromFunction<PassStruct19BytesHomogeneousUint8x10Type>(
          passStruct19BytesHomogeneousUint8x10),
      passStruct19BytesHomogeneousUint8x10AfterCallback),
  AsyncCallbackTest(
      "PassStruct20BytesHomogeneousInt32x10",
      Pointer.fromFunction<PassStruct20BytesHomogeneousInt32x10Type>(
          passStruct20BytesHomogeneousInt32x10),
      passStruct20BytesHomogeneousInt32x10AfterCallback),
  AsyncCallbackTest(
      "PassStruct20BytesHomogeneousFloat",
      Pointer.fromFunction<PassStruct20BytesHomogeneousFloatType>(
          passStruct20BytesHomogeneousFloat),
      passStruct20BytesHomogeneousFloatAfterCallback),
  AsyncCallbackTest(
      "PassStruct32BytesHomogeneousDoublex5",
      Pointer.fromFunction<PassStruct32BytesHomogeneousDoublex5Type>(
          passStruct32BytesHomogeneousDoublex5),
      passStruct32BytesHomogeneousDoublex5AfterCallback),
  AsyncCallbackTest(
      "PassStruct40BytesHomogeneousDouble",
      Pointer.fromFunction<PassStruct40BytesHomogeneousDoubleType>(
          passStruct40BytesHomogeneousDouble),
      passStruct40BytesHomogeneousDoubleAfterCallback),
  AsyncCallbackTest(
      "PassStruct1024BytesHomogeneousUint64",
      Pointer.fromFunction<PassStruct1024BytesHomogeneousUint64Type>(
          passStruct1024BytesHomogeneousUint64),
      passStruct1024BytesHomogeneousUint64AfterCallback),
  AsyncCallbackTest(
      "PassFloatStruct16BytesHomogeneousFloatFloatStruct1",
      Pointer.fromFunction<
              PassFloatStruct16BytesHomogeneousFloatFloatStruct1Type>(
          passFloatStruct16BytesHomogeneousFloatFloatStruct1),
      passFloatStruct16BytesHomogeneousFloatFloatStruct1AfterCallback),
  AsyncCallbackTest(
      "PassFloatStruct32BytesHomogeneousDoubleFloatStruct",
      Pointer.fromFunction<
              PassFloatStruct32BytesHomogeneousDoubleFloatStructType>(
          passFloatStruct32BytesHomogeneousDoubleFloatStruct),
      passFloatStruct32BytesHomogeneousDoubleFloatStructAfterCallback),
  AsyncCallbackTest(
      "PassInt8Struct16BytesMixedInt8Struct16BytesMixedIn",
      Pointer.fromFunction<
              PassInt8Struct16BytesMixedInt8Struct16BytesMixedInType>(
          passInt8Struct16BytesMixedInt8Struct16BytesMixedIn),
      passInt8Struct16BytesMixedInt8Struct16BytesMixedInAfterCallback),
  AsyncCallbackTest(
      "PassDoublex6Struct16BytesMixedx4Int32",
      Pointer.fromFunction<PassDoublex6Struct16BytesMixedx4Int32Type>(
          passDoublex6Struct16BytesMixedx4Int32),
      passDoublex6Struct16BytesMixedx4Int32AfterCallback),
  AsyncCallbackTest(
      "PassInt32x4Struct16BytesMixedx4Double",
      Pointer.fromFunction<PassInt32x4Struct16BytesMixedx4DoubleType>(
          passInt32x4Struct16BytesMixedx4Double),
      passInt32x4Struct16BytesMixedx4DoubleAfterCallback),
  AsyncCallbackTest(
      "PassStruct40BytesHomogeneousDoubleStruct4BytesHomo",
      Pointer.fromFunction<
              PassStruct40BytesHomogeneousDoubleStruct4BytesHomoType>(
          passStruct40BytesHomogeneousDoubleStruct4BytesHomo),
      passStruct40BytesHomogeneousDoubleStruct4BytesHomoAfterCallback),
  AsyncCallbackTest(
      "PassInt32x8Doublex8Int64Int8Struct1ByteIntInt64Int",
      Pointer.fromFunction<
              PassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntType>(
          passInt32x8Doublex8Int64Int8Struct1ByteIntInt64Int),
      passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntAfterCallback),
  AsyncCallbackTest(
      "PassStructAlignmentInt16",
      Pointer.fromFunction<PassStructAlignmentInt16Type>(
          passStructAlignmentInt16),
      passStructAlignmentInt16AfterCallback),
  AsyncCallbackTest(
      "PassStructAlignmentInt32",
      Pointer.fromFunction<PassStructAlignmentInt32Type>(
          passStructAlignmentInt32),
      passStructAlignmentInt32AfterCallback),
  AsyncCallbackTest(
      "PassStructAlignmentInt64",
      Pointer.fromFunction<PassStructAlignmentInt64Type>(
          passStructAlignmentInt64),
      passStructAlignmentInt64AfterCallback),
  AsyncCallbackTest(
      "PassStruct8BytesNestedIntx10",
      Pointer.fromFunction<PassStruct8BytesNestedIntx10Type>(
          passStruct8BytesNestedIntx10),
      passStruct8BytesNestedIntx10AfterCallback),
  AsyncCallbackTest(
      "PassStruct8BytesNestedFloatx10",
      Pointer.fromFunction<PassStruct8BytesNestedFloatx10Type>(
          passStruct8BytesNestedFloatx10),
      passStruct8BytesNestedFloatx10AfterCallback),
  AsyncCallbackTest(
      "PassStruct8BytesNestedFloat2x10",
      Pointer.fromFunction<PassStruct8BytesNestedFloat2x10Type>(
          passStruct8BytesNestedFloat2x10),
      passStruct8BytesNestedFloat2x10AfterCallback),
  AsyncCallbackTest(
      "PassStruct8BytesNestedMixedx10",
      Pointer.fromFunction<PassStruct8BytesNestedMixedx10Type>(
          passStruct8BytesNestedMixedx10),
      passStruct8BytesNestedMixedx10AfterCallback),
  AsyncCallbackTest(
      "PassStruct16BytesNestedIntx2",
      Pointer.fromFunction<PassStruct16BytesNestedIntx2Type>(
          passStruct16BytesNestedIntx2),
      passStruct16BytesNestedIntx2AfterCallback),
  AsyncCallbackTest(
      "PassStruct32BytesNestedIntx2",
      Pointer.fromFunction<PassStruct32BytesNestedIntx2Type>(
          passStruct32BytesNestedIntx2),
      passStruct32BytesNestedIntx2AfterCallback),
  AsyncCallbackTest(
      "PassStructNestedIntStructAlignmentInt16",
      Pointer.fromFunction<PassStructNestedIntStructAlignmentInt16Type>(
          passStructNestedIntStructAlignmentInt16),
      passStructNestedIntStructAlignmentInt16AfterCallback),
  AsyncCallbackTest(
      "PassStructNestedIntStructAlignmentInt32",
      Pointer.fromFunction<PassStructNestedIntStructAlignmentInt32Type>(
          passStructNestedIntStructAlignmentInt32),
      passStructNestedIntStructAlignmentInt32AfterCallback),
  AsyncCallbackTest(
      "PassStructNestedIntStructAlignmentInt64",
      Pointer.fromFunction<PassStructNestedIntStructAlignmentInt64Type>(
          passStructNestedIntStructAlignmentInt64),
      passStructNestedIntStructAlignmentInt64AfterCallback),
  AsyncCallbackTest(
      "PassStructNestedIrregularEvenBiggerx4",
      Pointer.fromFunction<PassStructNestedIrregularEvenBiggerx4Type>(
          passStructNestedIrregularEvenBiggerx4),
      passStructNestedIrregularEvenBiggerx4AfterCallback),
  AsyncCallbackTest(
      "PassStruct8BytesInlineArrayIntx4",
      Pointer.fromFunction<PassStruct8BytesInlineArrayIntx4Type>(
          passStruct8BytesInlineArrayIntx4),
      passStruct8BytesInlineArrayIntx4AfterCallback),
  AsyncCallbackTest(
      "PassStructInlineArrayIrregularx4",
      Pointer.fromFunction<PassStructInlineArrayIrregularx4Type>(
          passStructInlineArrayIrregularx4),
      passStructInlineArrayIrregularx4AfterCallback),
  AsyncCallbackTest(
      "PassStructInlineArray100Bytes",
      Pointer.fromFunction<PassStructInlineArray100BytesType>(
          passStructInlineArray100Bytes),
      passStructInlineArray100BytesAfterCallback),
  AsyncCallbackTest(
      "PassStructStruct16BytesHomogeneousFloat2x5",
      Pointer.fromFunction<PassStructStruct16BytesHomogeneousFloat2x5Type>(
          passStructStruct16BytesHomogeneousFloat2x5),
      passStructStruct16BytesHomogeneousFloat2x5AfterCallback),
  AsyncCallbackTest(
      "PassStructStruct32BytesHomogeneousDouble2x5",
      Pointer.fromFunction<PassStructStruct32BytesHomogeneousDouble2x5Type>(
          passStructStruct32BytesHomogeneousDouble2x5),
      passStructStruct32BytesHomogeneousDouble2x5AfterCallback),
  AsyncCallbackTest(
      "PassStructStruct16BytesMixed3x10",
      Pointer.fromFunction<PassStructStruct16BytesMixed3x10Type>(
          passStructStruct16BytesMixed3x10),
      passStructStruct16BytesMixed3x10AfterCallback),
  AsyncCallbackTest(
      "PassUint8Struct32BytesInlineArrayMultiDimensionalI",
      Pointer.fromFunction<
              PassUint8Struct32BytesInlineArrayMultiDimensionalIType>(
          passUint8Struct32BytesInlineArrayMultiDimensionalI),
      passUint8Struct32BytesInlineArrayMultiDimensionalIAfterCallback),
  AsyncCallbackTest(
      "PassUint8Struct4BytesInlineArrayMultiDimensionalIn",
      Pointer.fromFunction<
              PassUint8Struct4BytesInlineArrayMultiDimensionalInType>(
          passUint8Struct4BytesInlineArrayMultiDimensionalIn),
      passUint8Struct4BytesInlineArrayMultiDimensionalInAfterCallback),
  AsyncCallbackTest(
      "PassStruct3BytesPackedIntx10",
      Pointer.fromFunction<PassStruct3BytesPackedIntx10Type>(
          passStruct3BytesPackedIntx10),
      passStruct3BytesPackedIntx10AfterCallback),
  AsyncCallbackTest(
      "PassStruct8BytesPackedIntx10",
      Pointer.fromFunction<PassStruct8BytesPackedIntx10Type>(
          passStruct8BytesPackedIntx10),
      passStruct8BytesPackedIntx10AfterCallback),
  AsyncCallbackTest(
      "PassStruct9BytesPackedMixedx10DoubleInt32x2",
      Pointer.fromFunction<PassStruct9BytesPackedMixedx10DoubleInt32x2Type>(
          passStruct9BytesPackedMixedx10DoubleInt32x2),
      passStruct9BytesPackedMixedx10DoubleInt32x2AfterCallback),
  AsyncCallbackTest(
      "PassStruct5BytesPackedMixed",
      Pointer.fromFunction<PassStruct5BytesPackedMixedType>(
          passStruct5BytesPackedMixed),
      passStruct5BytesPackedMixedAfterCallback),
  AsyncCallbackTest(
      "PassStructNestedAlignmentStruct5BytesPackedMixed",
      Pointer.fromFunction<
              PassStructNestedAlignmentStruct5BytesPackedMixedType>(
          passStructNestedAlignmentStruct5BytesPackedMixed),
      passStructNestedAlignmentStruct5BytesPackedMixedAfterCallback),
  AsyncCallbackTest(
      "PassStruct6BytesInlineArrayInt",
      Pointer.fromFunction<PassStruct6BytesInlineArrayIntType>(
          passStruct6BytesInlineArrayInt),
      passStruct6BytesInlineArrayIntAfterCallback),
  AsyncCallbackTest(
      "PassStruct15BytesInlineArrayMixed",
      Pointer.fromFunction<PassStruct15BytesInlineArrayMixedType>(
          passStruct15BytesInlineArrayMixed),
      passStruct15BytesInlineArrayMixedAfterCallback),
  AsyncCallbackTest(
      "PassUnion4BytesMixedx10",
      Pointer.fromFunction<PassUnion4BytesMixedx10Type>(
          passUnion4BytesMixedx10),
      passUnion4BytesMixedx10AfterCallback),
  AsyncCallbackTest(
      "PassUnion8BytesNestedFloatx10",
      Pointer.fromFunction<PassUnion8BytesNestedFloatx10Type>(
          passUnion8BytesNestedFloatx10),
      passUnion8BytesNestedFloatx10AfterCallback),
  AsyncCallbackTest(
      "PassUnion9BytesNestedIntx10",
      Pointer.fromFunction<PassUnion9BytesNestedIntx10Type>(
          passUnion9BytesNestedIntx10),
      passUnion9BytesNestedIntx10AfterCallback),
  AsyncCallbackTest(
      "PassUnion16BytesNestedInlineArrayFloatx10",
      Pointer.fromFunction<PassUnion16BytesNestedInlineArrayFloatx10Type>(
          passUnion16BytesNestedInlineArrayFloatx10),
      passUnion16BytesNestedInlineArrayFloatx10AfterCallback),
  AsyncCallbackTest(
      "PassUnion16BytesNestedFloatx10",
      Pointer.fromFunction<PassUnion16BytesNestedFloatx10Type>(
          passUnion16BytesNestedFloatx10),
      passUnion16BytesNestedFloatx10AfterCallback),
  AsyncCallbackTest(
      "PassUint8Boolx9Struct10BytesHomogeneousBoolBool",
      Pointer.fromFunction<PassUint8Boolx9Struct10BytesHomogeneousBoolBoolType>(
          passUint8Boolx9Struct10BytesHomogeneousBoolBool),
      passUint8Boolx9Struct10BytesHomogeneousBoolBoolAfterCallback),
  AsyncCallbackTest(
      "PassUint8Boolx9Struct10BytesInlineArrayBoolBool",
      Pointer.fromFunction<PassUint8Boolx9Struct10BytesInlineArrayBoolBoolType>(
          passUint8Boolx9Struct10BytesInlineArrayBoolBool),
      passUint8Boolx9Struct10BytesInlineArrayBoolBoolAfterCallback),
  AsyncCallbackTest(
      "PassUint8Struct1ByteBool",
      Pointer.fromFunction<PassUint8Struct1ByteBoolType>(
          passUint8Struct1ByteBool),
      passUint8Struct1ByteBoolAfterCallback),
  AsyncCallbackTest(
      "PassWCharStructInlineArrayIntUintPtrx2LongUnsigned",
      Pointer.fromFunction<
              PassWCharStructInlineArrayIntUintPtrx2LongUnsignedType>(
          passWCharStructInlineArrayIntUintPtrx2LongUnsigned),
      passWCharStructInlineArrayIntUintPtrx2LongUnsignedAfterCallback),
  AsyncCallbackTest(
      "PassInt64x7Struct12BytesHomogeneousInt32",
      Pointer.fromFunction<PassInt64x7Struct12BytesHomogeneousInt32Type>(
          passInt64x7Struct12BytesHomogeneousInt32),
      passInt64x7Struct12BytesHomogeneousInt32AfterCallback),
  AsyncCallbackTest(
      "ReturnStruct1ByteInt",
      Pointer.fromFunction<ReturnStruct1ByteIntType>(returnStruct1ByteInt),
      returnStruct1ByteIntAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct3BytesHomogeneousUint8",
      Pointer.fromFunction<ReturnStruct3BytesHomogeneousUint8Type>(
          returnStruct3BytesHomogeneousUint8),
      returnStruct3BytesHomogeneousUint8AfterCallback),
  AsyncCallbackTest(
      "ReturnStruct3BytesInt2ByteAligned",
      Pointer.fromFunction<ReturnStruct3BytesInt2ByteAlignedType>(
          returnStruct3BytesInt2ByteAligned),
      returnStruct3BytesInt2ByteAlignedAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct4BytesHomogeneousInt16",
      Pointer.fromFunction<ReturnStruct4BytesHomogeneousInt16Type>(
          returnStruct4BytesHomogeneousInt16),
      returnStruct4BytesHomogeneousInt16AfterCallback),
  AsyncCallbackTest(
      "ReturnStruct7BytesHomogeneousUint8",
      Pointer.fromFunction<ReturnStruct7BytesHomogeneousUint8Type>(
          returnStruct7BytesHomogeneousUint8),
      returnStruct7BytesHomogeneousUint8AfterCallback),
  AsyncCallbackTest(
      "ReturnStruct7BytesInt4ByteAligned",
      Pointer.fromFunction<ReturnStruct7BytesInt4ByteAlignedType>(
          returnStruct7BytesInt4ByteAligned),
      returnStruct7BytesInt4ByteAlignedAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct8BytesInt",
      Pointer.fromFunction<ReturnStruct8BytesIntType>(returnStruct8BytesInt),
      returnStruct8BytesIntAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct8BytesHomogeneousFloat",
      Pointer.fromFunction<ReturnStruct8BytesHomogeneousFloatType>(
          returnStruct8BytesHomogeneousFloat),
      returnStruct8BytesHomogeneousFloatAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct8BytesMixed",
      Pointer.fromFunction<ReturnStruct8BytesMixedType>(
          returnStruct8BytesMixed),
      returnStruct8BytesMixedAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct9BytesHomogeneousUint8",
      Pointer.fromFunction<ReturnStruct9BytesHomogeneousUint8Type>(
          returnStruct9BytesHomogeneousUint8),
      returnStruct9BytesHomogeneousUint8AfterCallback),
  AsyncCallbackTest(
      "ReturnStruct9BytesInt4Or8ByteAligned",
      Pointer.fromFunction<ReturnStruct9BytesInt4Or8ByteAlignedType>(
          returnStruct9BytesInt4Or8ByteAligned),
      returnStruct9BytesInt4Or8ByteAlignedAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct12BytesHomogeneousFloat",
      Pointer.fromFunction<ReturnStruct12BytesHomogeneousFloatType>(
          returnStruct12BytesHomogeneousFloat),
      returnStruct12BytesHomogeneousFloatAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct16BytesHomogeneousFloat",
      Pointer.fromFunction<ReturnStruct16BytesHomogeneousFloatType>(
          returnStruct16BytesHomogeneousFloat),
      returnStruct16BytesHomogeneousFloatAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct16BytesMixed",
      Pointer.fromFunction<ReturnStruct16BytesMixedType>(
          returnStruct16BytesMixed),
      returnStruct16BytesMixedAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct16BytesMixed2",
      Pointer.fromFunction<ReturnStruct16BytesMixed2Type>(
          returnStruct16BytesMixed2),
      returnStruct16BytesMixed2AfterCallback),
  AsyncCallbackTest(
      "ReturnStruct17BytesInt",
      Pointer.fromFunction<ReturnStruct17BytesIntType>(returnStruct17BytesInt),
      returnStruct17BytesIntAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct19BytesHomogeneousUint8",
      Pointer.fromFunction<ReturnStruct19BytesHomogeneousUint8Type>(
          returnStruct19BytesHomogeneousUint8),
      returnStruct19BytesHomogeneousUint8AfterCallback),
  AsyncCallbackTest(
      "ReturnStruct20BytesHomogeneousInt32",
      Pointer.fromFunction<ReturnStruct20BytesHomogeneousInt32Type>(
          returnStruct20BytesHomogeneousInt32),
      returnStruct20BytesHomogeneousInt32AfterCallback),
  AsyncCallbackTest(
      "ReturnStruct20BytesHomogeneousFloat",
      Pointer.fromFunction<ReturnStruct20BytesHomogeneousFloatType>(
          returnStruct20BytesHomogeneousFloat),
      returnStruct20BytesHomogeneousFloatAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct32BytesHomogeneousDouble",
      Pointer.fromFunction<ReturnStruct32BytesHomogeneousDoubleType>(
          returnStruct32BytesHomogeneousDouble),
      returnStruct32BytesHomogeneousDoubleAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct40BytesHomogeneousDouble",
      Pointer.fromFunction<ReturnStruct40BytesHomogeneousDoubleType>(
          returnStruct40BytesHomogeneousDouble),
      returnStruct40BytesHomogeneousDoubleAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct1024BytesHomogeneousUint64",
      Pointer.fromFunction<ReturnStruct1024BytesHomogeneousUint64Type>(
          returnStruct1024BytesHomogeneousUint64),
      returnStruct1024BytesHomogeneousUint64AfterCallback),
  AsyncCallbackTest(
      "ReturnStruct3BytesPackedInt",
      Pointer.fromFunction<ReturnStruct3BytesPackedIntType>(
          returnStruct3BytesPackedInt),
      returnStruct3BytesPackedIntAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct8BytesPackedInt",
      Pointer.fromFunction<ReturnStruct8BytesPackedIntType>(
          returnStruct8BytesPackedInt),
      returnStruct8BytesPackedIntAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct9BytesPackedMixed",
      Pointer.fromFunction<ReturnStruct9BytesPackedMixedType>(
          returnStruct9BytesPackedMixed),
      returnStruct9BytesPackedMixedAfterCallback),
  AsyncCallbackTest(
      "ReturnUnion4BytesMixed",
      Pointer.fromFunction<ReturnUnion4BytesMixedType>(returnUnion4BytesMixed),
      returnUnion4BytesMixedAfterCallback),
  AsyncCallbackTest(
      "ReturnUnion8BytesNestedFloat",
      Pointer.fromFunction<ReturnUnion8BytesNestedFloatType>(
          returnUnion8BytesNestedFloat),
      returnUnion8BytesNestedFloatAfterCallback),
  AsyncCallbackTest(
      "ReturnUnion9BytesNestedInt",
      Pointer.fromFunction<ReturnUnion9BytesNestedIntType>(
          returnUnion9BytesNestedInt),
      returnUnion9BytesNestedIntAfterCallback),
  AsyncCallbackTest(
      "ReturnUnion16BytesNestedFloat",
      Pointer.fromFunction<ReturnUnion16BytesNestedFloatType>(
          returnUnion16BytesNestedFloat),
      returnUnion16BytesNestedFloatAfterCallback),
  AsyncCallbackTest(
      "ReturnStructArgumentStruct1ByteInt",
      Pointer.fromFunction<ReturnStructArgumentStruct1ByteIntType>(
          returnStructArgumentStruct1ByteInt),
      returnStructArgumentStruct1ByteIntAfterCallback),
  AsyncCallbackTest(
      "ReturnStructArgumentInt32x8Struct1ByteInt",
      Pointer.fromFunction<ReturnStructArgumentInt32x8Struct1ByteIntType>(
          returnStructArgumentInt32x8Struct1ByteInt),
      returnStructArgumentInt32x8Struct1ByteIntAfterCallback),
  AsyncCallbackTest(
      "ReturnStructArgumentStruct8BytesHomogeneousFloat",
      Pointer.fromFunction<
              ReturnStructArgumentStruct8BytesHomogeneousFloatType>(
          returnStructArgumentStruct8BytesHomogeneousFloat),
      returnStructArgumentStruct8BytesHomogeneousFloatAfterCallback),
  AsyncCallbackTest(
      "ReturnStructArgumentStruct20BytesHomogeneousInt32",
      Pointer.fromFunction<
              ReturnStructArgumentStruct20BytesHomogeneousInt32Type>(
          returnStructArgumentStruct20BytesHomogeneousInt32),
      returnStructArgumentStruct20BytesHomogeneousInt32AfterCallback),
  AsyncCallbackTest(
      "ReturnStructArgumentInt32x8Struct20BytesHomogeneou",
      Pointer.fromFunction<
              ReturnStructArgumentInt32x8Struct20BytesHomogeneouType>(
          returnStructArgumentInt32x8Struct20BytesHomogeneou),
      returnStructArgumentInt32x8Struct20BytesHomogeneouAfterCallback),
  AsyncCallbackTest(
      "ReturnStructArgumentStruct8BytesInlineArrayInt",
      Pointer.fromFunction<ReturnStructArgumentStruct8BytesInlineArrayIntType>(
          returnStructArgumentStruct8BytesInlineArrayInt),
      returnStructArgumentStruct8BytesInlineArrayIntAfterCallback),
  AsyncCallbackTest(
      "ReturnStructArgumentStructStruct16BytesHomogeneous",
      Pointer.fromFunction<
              ReturnStructArgumentStructStruct16BytesHomogeneousType>(
          returnStructArgumentStructStruct16BytesHomogeneous),
      returnStructArgumentStructStruct16BytesHomogeneousAfterCallback),
  AsyncCallbackTest(
      "ReturnStructArgumentStructStruct32BytesHomogeneous",
      Pointer.fromFunction<
              ReturnStructArgumentStructStruct32BytesHomogeneousType>(
          returnStructArgumentStructStruct32BytesHomogeneous),
      returnStructArgumentStructStruct32BytesHomogeneousAfterCallback),
  AsyncCallbackTest(
      "ReturnStructArgumentStructStruct16BytesMixed3",
      Pointer.fromFunction<ReturnStructArgumentStructStruct16BytesMixed3Type>(
          returnStructArgumentStructStruct16BytesMixed3),
      returnStructArgumentStructStruct16BytesMixed3AfterCallback),
  AsyncCallbackTest(
      "ReturnStructAlignmentInt16",
      Pointer.fromFunction<ReturnStructAlignmentInt16Type>(
          returnStructAlignmentInt16),
      returnStructAlignmentInt16AfterCallback),
  AsyncCallbackTest(
      "ReturnStructAlignmentInt32",
      Pointer.fromFunction<ReturnStructAlignmentInt32Type>(
          returnStructAlignmentInt32),
      returnStructAlignmentInt32AfterCallback),
  AsyncCallbackTest(
      "ReturnStructAlignmentInt64",
      Pointer.fromFunction<ReturnStructAlignmentInt64Type>(
          returnStructAlignmentInt64),
      returnStructAlignmentInt64AfterCallback),
  AsyncCallbackTest(
      "ReturnStruct8BytesNestedInt",
      Pointer.fromFunction<ReturnStruct8BytesNestedIntType>(
          returnStruct8BytesNestedInt),
      returnStruct8BytesNestedIntAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct8BytesNestedFloat",
      Pointer.fromFunction<ReturnStruct8BytesNestedFloatType>(
          returnStruct8BytesNestedFloat),
      returnStruct8BytesNestedFloatAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct8BytesNestedFloat2",
      Pointer.fromFunction<ReturnStruct8BytesNestedFloat2Type>(
          returnStruct8BytesNestedFloat2),
      returnStruct8BytesNestedFloat2AfterCallback),
  AsyncCallbackTest(
      "ReturnStruct8BytesNestedMixed",
      Pointer.fromFunction<ReturnStruct8BytesNestedMixedType>(
          returnStruct8BytesNestedMixed),
      returnStruct8BytesNestedMixedAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct16BytesNestedInt",
      Pointer.fromFunction<ReturnStruct16BytesNestedIntType>(
          returnStruct16BytesNestedInt),
      returnStruct16BytesNestedIntAfterCallback),
  AsyncCallbackTest(
      "ReturnStruct32BytesNestedInt",
      Pointer.fromFunction<ReturnStruct32BytesNestedIntType>(
          returnStruct32BytesNestedInt),
      returnStruct32BytesNestedIntAfterCallback),
  AsyncCallbackTest(
      "ReturnStructNestedIntStructAlignmentInt16",
      Pointer.fromFunction<ReturnStructNestedIntStructAlignmentInt16Type>(
          returnStructNestedIntStructAlignmentInt16),
      returnStructNestedIntStructAlignmentInt16AfterCallback),
  AsyncCallbackTest(
      "ReturnStructNestedIntStructAlignmentInt32",
      Pointer.fromFunction<ReturnStructNestedIntStructAlignmentInt32Type>(
          returnStructNestedIntStructAlignmentInt32),
      returnStructNestedIntStructAlignmentInt32AfterCallback),
  AsyncCallbackTest(
      "ReturnStructNestedIntStructAlignmentInt64",
      Pointer.fromFunction<ReturnStructNestedIntStructAlignmentInt64Type>(
          returnStructNestedIntStructAlignmentInt64),
      returnStructNestedIntStructAlignmentInt64AfterCallback),
  AsyncCallbackTest(
      "ReturnStructNestedIrregularEvenBigger",
      Pointer.fromFunction<ReturnStructNestedIrregularEvenBiggerType>(
          returnStructNestedIrregularEvenBigger),
      returnStructNestedIrregularEvenBiggerAfterCallback),
];
typedef PassStruct1ByteIntx10Type = Void Function(
    Struct1ByteInt,
    Struct1ByteInt,
    Struct1ByteInt,
    Struct1ByteInt,
    Struct1ByteInt,
    Struct1ByteInt,
    Struct1ByteInt,
    Struct1ByteInt,
    Struct1ByteInt,
    Struct1ByteInt);

// Global variable that stores the result.
final PassStruct1ByteIntx10Result = Completer<double>();

/// Smallest struct with data.
/// 10 struct arguments will exhaust available registers.
void passStruct1ByteIntx10(
    Struct1ByteInt a0,
    Struct1ByteInt a1,
    Struct1ByteInt a2,
    Struct1ByteInt a3,
    Struct1ByteInt a4,
    Struct1ByteInt a5,
    Struct1ByteInt a6,
    Struct1ByteInt a7,
    Struct1ByteInt a8,
    Struct1ByteInt a9) {
  print(
      "passStruct1ByteIntx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a1.a0;
  result += a2.a0;
  result += a3.a0;
  result += a4.a0;
  result += a5.a0;
  result += a6.a0;
  result += a7.a0;
  result += a8.a0;
  result += a9.a0;

  print("result = $result");
  PassStruct1ByteIntx10Result.complete(result);
}

Future<void> passStruct1ByteIntx10AfterCallback() async {
  final result = await PassStruct1ByteIntx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(5, result);
}

typedef PassStruct3BytesHomogeneousUint8x10Type = Void Function(
    Struct3BytesHomogeneousUint8,
    Struct3BytesHomogeneousUint8,
    Struct3BytesHomogeneousUint8,
    Struct3BytesHomogeneousUint8,
    Struct3BytesHomogeneousUint8,
    Struct3BytesHomogeneousUint8,
    Struct3BytesHomogeneousUint8,
    Struct3BytesHomogeneousUint8,
    Struct3BytesHomogeneousUint8,
    Struct3BytesHomogeneousUint8);

// Global variable that stores the result.
final PassStruct3BytesHomogeneousUint8x10Result = Completer<double>();

/// Not a multiple of word size, not a power of two.
/// 10 struct arguments will exhaust available registers.
void passStruct3BytesHomogeneousUint8x10(
    Struct3BytesHomogeneousUint8 a0,
    Struct3BytesHomogeneousUint8 a1,
    Struct3BytesHomogeneousUint8 a2,
    Struct3BytesHomogeneousUint8 a3,
    Struct3BytesHomogeneousUint8 a4,
    Struct3BytesHomogeneousUint8 a5,
    Struct3BytesHomogeneousUint8 a6,
    Struct3BytesHomogeneousUint8 a7,
    Struct3BytesHomogeneousUint8 a8,
    Struct3BytesHomogeneousUint8 a9) {
  print(
      "passStruct3BytesHomogeneousUint8x10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a2.a0;
  result += a2.a1;
  result += a2.a2;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a4.a0;
  result += a4.a1;
  result += a4.a2;
  result += a5.a0;
  result += a5.a1;
  result += a5.a2;
  result += a6.a0;
  result += a6.a1;
  result += a6.a2;
  result += a7.a0;
  result += a7.a1;
  result += a7.a2;
  result += a8.a0;
  result += a8.a1;
  result += a8.a2;
  result += a9.a0;
  result += a9.a1;
  result += a9.a2;

  print("result = $result");
  PassStruct3BytesHomogeneousUint8x10Result.complete(result);
}

Future<void> passStruct3BytesHomogeneousUint8x10AfterCallback() async {
  final result = await PassStruct3BytesHomogeneousUint8x10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(465, result);
}

typedef PassStruct3BytesInt2ByteAlignedx10Type = Void Function(
    Struct3BytesInt2ByteAligned,
    Struct3BytesInt2ByteAligned,
    Struct3BytesInt2ByteAligned,
    Struct3BytesInt2ByteAligned,
    Struct3BytesInt2ByteAligned,
    Struct3BytesInt2ByteAligned,
    Struct3BytesInt2ByteAligned,
    Struct3BytesInt2ByteAligned,
    Struct3BytesInt2ByteAligned,
    Struct3BytesInt2ByteAligned);

// Global variable that stores the result.
final PassStruct3BytesInt2ByteAlignedx10Result = Completer<double>();

/// 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 passStruct3BytesInt2ByteAlignedx10(
    Struct3BytesInt2ByteAligned a0,
    Struct3BytesInt2ByteAligned a1,
    Struct3BytesInt2ByteAligned a2,
    Struct3BytesInt2ByteAligned a3,
    Struct3BytesInt2ByteAligned a4,
    Struct3BytesInt2ByteAligned a5,
    Struct3BytesInt2ByteAligned a6,
    Struct3BytesInt2ByteAligned a7,
    Struct3BytesInt2ByteAligned a8,
    Struct3BytesInt2ByteAligned a9) {
  print(
      "passStruct3BytesInt2ByteAlignedx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a1.a0;
  result += a1.a1;
  result += a2.a0;
  result += a2.a1;
  result += a3.a0;
  result += a3.a1;
  result += a4.a0;
  result += a4.a1;
  result += a5.a0;
  result += a5.a1;
  result += a6.a0;
  result += a6.a1;
  result += a7.a0;
  result += a7.a1;
  result += a8.a0;
  result += a8.a1;
  result += a9.a0;
  result += a9.a1;

  print("result = $result");
  PassStruct3BytesInt2ByteAlignedx10Result.complete(result);
}

Future<void> passStruct3BytesInt2ByteAlignedx10AfterCallback() async {
  final result = await PassStruct3BytesInt2ByteAlignedx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(10, result);
}

typedef PassStruct4BytesHomogeneousInt16x10Type = Void Function(
    Struct4BytesHomogeneousInt16,
    Struct4BytesHomogeneousInt16,
    Struct4BytesHomogeneousInt16,
    Struct4BytesHomogeneousInt16,
    Struct4BytesHomogeneousInt16,
    Struct4BytesHomogeneousInt16,
    Struct4BytesHomogeneousInt16,
    Struct4BytesHomogeneousInt16,
    Struct4BytesHomogeneousInt16,
    Struct4BytesHomogeneousInt16);

// Global variable that stores the result.
final PassStruct4BytesHomogeneousInt16x10Result = Completer<double>();

/// Exactly word size on 32-bit architectures.
/// 10 struct arguments will exhaust available registers.
void passStruct4BytesHomogeneousInt16x10(
    Struct4BytesHomogeneousInt16 a0,
    Struct4BytesHomogeneousInt16 a1,
    Struct4BytesHomogeneousInt16 a2,
    Struct4BytesHomogeneousInt16 a3,
    Struct4BytesHomogeneousInt16 a4,
    Struct4BytesHomogeneousInt16 a5,
    Struct4BytesHomogeneousInt16 a6,
    Struct4BytesHomogeneousInt16 a7,
    Struct4BytesHomogeneousInt16 a8,
    Struct4BytesHomogeneousInt16 a9) {
  print(
      "passStruct4BytesHomogeneousInt16x10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a1.a0;
  result += a1.a1;
  result += a2.a0;
  result += a2.a1;
  result += a3.a0;
  result += a3.a1;
  result += a4.a0;
  result += a4.a1;
  result += a5.a0;
  result += a5.a1;
  result += a6.a0;
  result += a6.a1;
  result += a7.a0;
  result += a7.a1;
  result += a8.a0;
  result += a8.a1;
  result += a9.a0;
  result += a9.a1;

  print("result = $result");
  PassStruct4BytesHomogeneousInt16x10Result.complete(result);
}

Future<void> passStruct4BytesHomogeneousInt16x10AfterCallback() async {
  final result = await PassStruct4BytesHomogeneousInt16x10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(10, result);
}

typedef PassStruct7BytesHomogeneousUint8x10Type = Void Function(
    Struct7BytesHomogeneousUint8,
    Struct7BytesHomogeneousUint8,
    Struct7BytesHomogeneousUint8,
    Struct7BytesHomogeneousUint8,
    Struct7BytesHomogeneousUint8,
    Struct7BytesHomogeneousUint8,
    Struct7BytesHomogeneousUint8,
    Struct7BytesHomogeneousUint8,
    Struct7BytesHomogeneousUint8,
    Struct7BytesHomogeneousUint8);

// Global variable that stores the result.
final PassStruct7BytesHomogeneousUint8x10Result = Completer<double>();

/// Sub word size on 64 bit architectures.
/// 10 struct arguments will exhaust available registers.
void passStruct7BytesHomogeneousUint8x10(
    Struct7BytesHomogeneousUint8 a0,
    Struct7BytesHomogeneousUint8 a1,
    Struct7BytesHomogeneousUint8 a2,
    Struct7BytesHomogeneousUint8 a3,
    Struct7BytesHomogeneousUint8 a4,
    Struct7BytesHomogeneousUint8 a5,
    Struct7BytesHomogeneousUint8 a6,
    Struct7BytesHomogeneousUint8 a7,
    Struct7BytesHomogeneousUint8 a8,
    Struct7BytesHomogeneousUint8 a9) {
  print(
      "passStruct7BytesHomogeneousUint8x10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a0.a3;
  result += a0.a4;
  result += a0.a5;
  result += a0.a6;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a1.a3;
  result += a1.a4;
  result += a1.a5;
  result += a1.a6;
  result += a2.a0;
  result += a2.a1;
  result += a2.a2;
  result += a2.a3;
  result += a2.a4;
  result += a2.a5;
  result += a2.a6;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a3.a3;
  result += a3.a4;
  result += a3.a5;
  result += a3.a6;
  result += a4.a0;
  result += a4.a1;
  result += a4.a2;
  result += a4.a3;
  result += a4.a4;
  result += a4.a5;
  result += a4.a6;
  result += a5.a0;
  result += a5.a1;
  result += a5.a2;
  result += a5.a3;
  result += a5.a4;
  result += a5.a5;
  result += a5.a6;
  result += a6.a0;
  result += a6.a1;
  result += a6.a2;
  result += a6.a3;
  result += a6.a4;
  result += a6.a5;
  result += a6.a6;
  result += a7.a0;
  result += a7.a1;
  result += a7.a2;
  result += a7.a3;
  result += a7.a4;
  result += a7.a5;
  result += a7.a6;
  result += a8.a0;
  result += a8.a1;
  result += a8.a2;
  result += a8.a3;
  result += a8.a4;
  result += a8.a5;
  result += a8.a6;
  result += a9.a0;
  result += a9.a1;
  result += a9.a2;
  result += a9.a3;
  result += a9.a4;
  result += a9.a5;
  result += a9.a6;

  print("result = $result");
  PassStruct7BytesHomogeneousUint8x10Result.complete(result);
}

Future<void> passStruct7BytesHomogeneousUint8x10AfterCallback() async {
  final result = await PassStruct7BytesHomogeneousUint8x10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(2485, result);
}

typedef PassStruct7BytesInt4ByteAlignedx10Type = Void Function(
    Struct7BytesInt4ByteAligned,
    Struct7BytesInt4ByteAligned,
    Struct7BytesInt4ByteAligned,
    Struct7BytesInt4ByteAligned,
    Struct7BytesInt4ByteAligned,
    Struct7BytesInt4ByteAligned,
    Struct7BytesInt4ByteAligned,
    Struct7BytesInt4ByteAligned,
    Struct7BytesInt4ByteAligned,
    Struct7BytesInt4ByteAligned);

// Global variable that stores the result.
final PassStruct7BytesInt4ByteAlignedx10Result = Completer<double>();

/// 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 passStruct7BytesInt4ByteAlignedx10(
    Struct7BytesInt4ByteAligned a0,
    Struct7BytesInt4ByteAligned a1,
    Struct7BytesInt4ByteAligned a2,
    Struct7BytesInt4ByteAligned a3,
    Struct7BytesInt4ByteAligned a4,
    Struct7BytesInt4ByteAligned a5,
    Struct7BytesInt4ByteAligned a6,
    Struct7BytesInt4ByteAligned a7,
    Struct7BytesInt4ByteAligned a8,
    Struct7BytesInt4ByteAligned a9) {
  print(
      "passStruct7BytesInt4ByteAlignedx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a2.a0;
  result += a2.a1;
  result += a2.a2;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a4.a0;
  result += a4.a1;
  result += a4.a2;
  result += a5.a0;
  result += a5.a1;
  result += a5.a2;
  result += a6.a0;
  result += a6.a1;
  result += a6.a2;
  result += a7.a0;
  result += a7.a1;
  result += a7.a2;
  result += a8.a0;
  result += a8.a1;
  result += a8.a2;
  result += a9.a0;
  result += a9.a1;
  result += a9.a2;

  print("result = $result");
  PassStruct7BytesInt4ByteAlignedx10Result.complete(result);
}

Future<void> passStruct7BytesInt4ByteAlignedx10AfterCallback() async {
  final result = await PassStruct7BytesInt4ByteAlignedx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(15, result);
}

typedef PassStruct8BytesIntx10Type = Void Function(
    Struct8BytesInt,
    Struct8BytesInt,
    Struct8BytesInt,
    Struct8BytesInt,
    Struct8BytesInt,
    Struct8BytesInt,
    Struct8BytesInt,
    Struct8BytesInt,
    Struct8BytesInt,
    Struct8BytesInt);

// Global variable that stores the result.
final PassStruct8BytesIntx10Result = Completer<double>();

/// Exactly word size struct on 64bit architectures.
/// 10 struct arguments will exhaust available registers.
void passStruct8BytesIntx10(
    Struct8BytesInt a0,
    Struct8BytesInt a1,
    Struct8BytesInt a2,
    Struct8BytesInt a3,
    Struct8BytesInt a4,
    Struct8BytesInt a5,
    Struct8BytesInt a6,
    Struct8BytesInt a7,
    Struct8BytesInt a8,
    Struct8BytesInt a9) {
  print(
      "passStruct8BytesIntx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a2.a0;
  result += a2.a1;
  result += a2.a2;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a4.a0;
  result += a4.a1;
  result += a4.a2;
  result += a5.a0;
  result += a5.a1;
  result += a5.a2;
  result += a6.a0;
  result += a6.a1;
  result += a6.a2;
  result += a7.a0;
  result += a7.a1;
  result += a7.a2;
  result += a8.a0;
  result += a8.a1;
  result += a8.a2;
  result += a9.a0;
  result += a9.a1;
  result += a9.a2;

  print("result = $result");
  PassStruct8BytesIntx10Result.complete(result);
}

Future<void> passStruct8BytesIntx10AfterCallback() async {
  final result = await PassStruct8BytesIntx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(15, result);
}

typedef PassStruct8BytesHomogeneousFloatx10Type = Void Function(
    Struct8BytesHomogeneousFloat,
    Struct8BytesHomogeneousFloat,
    Struct8BytesHomogeneousFloat,
    Struct8BytesHomogeneousFloat,
    Struct8BytesHomogeneousFloat,
    Struct8BytesHomogeneousFloat,
    Struct8BytesHomogeneousFloat,
    Struct8BytesHomogeneousFloat,
    Struct8BytesHomogeneousFloat,
    Struct8BytesHomogeneousFloat);

// Global variable that stores the result.
final PassStruct8BytesHomogeneousFloatx10Result = Completer<double>();

/// Arguments passed in FP registers as long as they fit.
/// 10 struct arguments will exhaust available registers.
void passStruct8BytesHomogeneousFloatx10(
    Struct8BytesHomogeneousFloat a0,
    Struct8BytesHomogeneousFloat a1,
    Struct8BytesHomogeneousFloat a2,
    Struct8BytesHomogeneousFloat a3,
    Struct8BytesHomogeneousFloat a4,
    Struct8BytesHomogeneousFloat a5,
    Struct8BytesHomogeneousFloat a6,
    Struct8BytesHomogeneousFloat a7,
    Struct8BytesHomogeneousFloat a8,
    Struct8BytesHomogeneousFloat a9) {
  print(
      "passStruct8BytesHomogeneousFloatx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a1.a0;
  result += a1.a1;
  result += a2.a0;
  result += a2.a1;
  result += a3.a0;
  result += a3.a1;
  result += a4.a0;
  result += a4.a1;
  result += a5.a0;
  result += a5.a1;
  result += a6.a0;
  result += a6.a1;
  result += a7.a0;
  result += a7.a1;
  result += a8.a0;
  result += a8.a1;
  result += a9.a0;
  result += a9.a1;

  print("result = $result");
  PassStruct8BytesHomogeneousFloatx10Result.complete(result);
}

Future<void> passStruct8BytesHomogeneousFloatx10AfterCallback() async {
  final result = await PassStruct8BytesHomogeneousFloatx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(10, result);
}

typedef PassStruct8BytesMixedx10Type = Void Function(
    Struct8BytesMixed,
    Struct8BytesMixed,
    Struct8BytesMixed,
    Struct8BytesMixed,
    Struct8BytesMixed,
    Struct8BytesMixed,
    Struct8BytesMixed,
    Struct8BytesMixed,
    Struct8BytesMixed,
    Struct8BytesMixed);

// Global variable that stores the result.
final PassStruct8BytesMixedx10Result = Completer<double>();

/// On x64, arguments go in int registers because it is not only float.
/// 10 struct arguments will exhaust available registers.
void passStruct8BytesMixedx10(
    Struct8BytesMixed a0,
    Struct8BytesMixed a1,
    Struct8BytesMixed a2,
    Struct8BytesMixed a3,
    Struct8BytesMixed a4,
    Struct8BytesMixed a5,
    Struct8BytesMixed a6,
    Struct8BytesMixed a7,
    Struct8BytesMixed a8,
    Struct8BytesMixed a9) {
  print(
      "passStruct8BytesMixedx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a2.a0;
  result += a2.a1;
  result += a2.a2;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a4.a0;
  result += a4.a1;
  result += a4.a2;
  result += a5.a0;
  result += a5.a1;
  result += a5.a2;
  result += a6.a0;
  result += a6.a1;
  result += a6.a2;
  result += a7.a0;
  result += a7.a1;
  result += a7.a2;
  result += a8.a0;
  result += a8.a1;
  result += a8.a2;
  result += a9.a0;
  result += a9.a1;
  result += a9.a2;

  print("result = $result");
  PassStruct8BytesMixedx10Result.complete(result);
}

Future<void> passStruct8BytesMixedx10AfterCallback() async {
  final result = await PassStruct8BytesMixedx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(15, result);
}

typedef PassStruct9BytesHomogeneousUint8x10Type = Void Function(
    Struct9BytesHomogeneousUint8,
    Struct9BytesHomogeneousUint8,
    Struct9BytesHomogeneousUint8,
    Struct9BytesHomogeneousUint8,
    Struct9BytesHomogeneousUint8,
    Struct9BytesHomogeneousUint8,
    Struct9BytesHomogeneousUint8,
    Struct9BytesHomogeneousUint8,
    Struct9BytesHomogeneousUint8,
    Struct9BytesHomogeneousUint8);

// Global variable that stores the result.
final PassStruct9BytesHomogeneousUint8x10Result = Completer<double>();

/// 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 passStruct9BytesHomogeneousUint8x10(
    Struct9BytesHomogeneousUint8 a0,
    Struct9BytesHomogeneousUint8 a1,
    Struct9BytesHomogeneousUint8 a2,
    Struct9BytesHomogeneousUint8 a3,
    Struct9BytesHomogeneousUint8 a4,
    Struct9BytesHomogeneousUint8 a5,
    Struct9BytesHomogeneousUint8 a6,
    Struct9BytesHomogeneousUint8 a7,
    Struct9BytesHomogeneousUint8 a8,
    Struct9BytesHomogeneousUint8 a9) {
  print(
      "passStruct9BytesHomogeneousUint8x10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a0.a3;
  result += a0.a4;
  result += a0.a5;
  result += a0.a6;
  result += a0.a7;
  result += a0.a8;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a1.a3;
  result += a1.a4;
  result += a1.a5;
  result += a1.a6;
  result += a1.a7;
  result += a1.a8;
  result += a2.a0;
  result += a2.a1;
  result += a2.a2;
  result += a2.a3;
  result += a2.a4;
  result += a2.a5;
  result += a2.a6;
  result += a2.a7;
  result += a2.a8;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a3.a3;
  result += a3.a4;
  result += a3.a5;
  result += a3.a6;
  result += a3.a7;
  result += a3.a8;
  result += a4.a0;
  result += a4.a1;
  result += a4.a2;
  result += a4.a3;
  result += a4.a4;
  result += a4.a5;
  result += a4.a6;
  result += a4.a7;
  result += a4.a8;
  result += a5.a0;
  result += a5.a1;
  result += a5.a2;
  result += a5.a3;
  result += a5.a4;
  result += a5.a5;
  result += a5.a6;
  result += a5.a7;
  result += a5.a8;
  result += a6.a0;
  result += a6.a1;
  result += a6.a2;
  result += a6.a3;
  result += a6.a4;
  result += a6.a5;
  result += a6.a6;
  result += a6.a7;
  result += a6.a8;
  result += a7.a0;
  result += a7.a1;
  result += a7.a2;
  result += a7.a3;
  result += a7.a4;
  result += a7.a5;
  result += a7.a6;
  result += a7.a7;
  result += a7.a8;
  result += a8.a0;
  result += a8.a1;
  result += a8.a2;
  result += a8.a3;
  result += a8.a4;
  result += a8.a5;
  result += a8.a6;
  result += a8.a7;
  result += a8.a8;
  result += a9.a0;
  result += a9.a1;
  result += a9.a2;
  result += a9.a3;
  result += a9.a4;
  result += a9.a5;
  result += a9.a6;
  result += a9.a7;
  result += a9.a8;

  print("result = $result");
  PassStruct9BytesHomogeneousUint8x10Result.complete(result);
}

Future<void> passStruct9BytesHomogeneousUint8x10AfterCallback() async {
  final result = await PassStruct9BytesHomogeneousUint8x10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(4095, result);
}

typedef PassStruct9BytesInt4Or8ByteAlignedx10Type = Void Function(
    Struct9BytesInt4Or8ByteAligned,
    Struct9BytesInt4Or8ByteAligned,
    Struct9BytesInt4Or8ByteAligned,
    Struct9BytesInt4Or8ByteAligned,
    Struct9BytesInt4Or8ByteAligned,
    Struct9BytesInt4Or8ByteAligned,
    Struct9BytesInt4Or8ByteAligned,
    Struct9BytesInt4Or8ByteAligned,
    Struct9BytesInt4Or8ByteAligned,
    Struct9BytesInt4Or8ByteAligned);

// Global variable that stores the result.
final PassStruct9BytesInt4Or8ByteAlignedx10Result = Completer<double>();

/// 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 passStruct9BytesInt4Or8ByteAlignedx10(
    Struct9BytesInt4Or8ByteAligned a0,
    Struct9BytesInt4Or8ByteAligned a1,
    Struct9BytesInt4Or8ByteAligned a2,
    Struct9BytesInt4Or8ByteAligned a3,
    Struct9BytesInt4Or8ByteAligned a4,
    Struct9BytesInt4Or8ByteAligned a5,
    Struct9BytesInt4Or8ByteAligned a6,
    Struct9BytesInt4Or8ByteAligned a7,
    Struct9BytesInt4Or8ByteAligned a8,
    Struct9BytesInt4Or8ByteAligned a9) {
  print(
      "passStruct9BytesInt4Or8ByteAlignedx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a1.a0;
  result += a1.a1;
  result += a2.a0;
  result += a2.a1;
  result += a3.a0;
  result += a3.a1;
  result += a4.a0;
  result += a4.a1;
  result += a5.a0;
  result += a5.a1;
  result += a6.a0;
  result += a6.a1;
  result += a7.a0;
  result += a7.a1;
  result += a8.a0;
  result += a8.a1;
  result += a9.a0;
  result += a9.a1;

  print("result = $result");
  PassStruct9BytesInt4Or8ByteAlignedx10Result.complete(result);
}

Future<void> passStruct9BytesInt4Or8ByteAlignedx10AfterCallback() async {
  final result = await PassStruct9BytesInt4Or8ByteAlignedx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(10, result);
}

typedef PassStruct12BytesHomogeneousFloatx6Type = Void Function(
    Struct12BytesHomogeneousFloat,
    Struct12BytesHomogeneousFloat,
    Struct12BytesHomogeneousFloat,
    Struct12BytesHomogeneousFloat,
    Struct12BytesHomogeneousFloat,
    Struct12BytesHomogeneousFloat);

// Global variable that stores the result.
final PassStruct12BytesHomogeneousFloatx6Result = Completer<double>();

/// 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 passStruct12BytesHomogeneousFloatx6(
    Struct12BytesHomogeneousFloat a0,
    Struct12BytesHomogeneousFloat a1,
    Struct12BytesHomogeneousFloat a2,
    Struct12BytesHomogeneousFloat a3,
    Struct12BytesHomogeneousFloat a4,
    Struct12BytesHomogeneousFloat a5) {
  print(
      "passStruct12BytesHomogeneousFloatx6(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a2.a0;
  result += a2.a1;
  result += a2.a2;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a4.a0;
  result += a4.a1;
  result += a4.a2;
  result += a5.a0;
  result += a5.a1;
  result += a5.a2;

  print("result = $result");
  PassStruct12BytesHomogeneousFloatx6Result.complete(result);
}

Future<void> passStruct12BytesHomogeneousFloatx6AfterCallback() async {
  final result = await PassStruct12BytesHomogeneousFloatx6Result.future;
  print("after callback result = $result");
  Expect.approxEquals(9, result);
}

typedef PassStruct16BytesHomogeneousFloatx5Type = Void Function(
    Struct16BytesHomogeneousFloat,
    Struct16BytesHomogeneousFloat,
    Struct16BytesHomogeneousFloat,
    Struct16BytesHomogeneousFloat,
    Struct16BytesHomogeneousFloat);

// Global variable that stores the result.
final PassStruct16BytesHomogeneousFloatx5Result = Completer<double>();

/// 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 passStruct16BytesHomogeneousFloatx5(
    Struct16BytesHomogeneousFloat a0,
    Struct16BytesHomogeneousFloat a1,
    Struct16BytesHomogeneousFloat a2,
    Struct16BytesHomogeneousFloat a3,
    Struct16BytesHomogeneousFloat a4) {
  print(
      "passStruct16BytesHomogeneousFloatx5(${a0}, ${a1}, ${a2}, ${a3}, ${a4})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a0.a3;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a1.a3;
  result += a2.a0;
  result += a2.a1;
  result += a2.a2;
  result += a2.a3;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a3.a3;
  result += a4.a0;
  result += a4.a1;
  result += a4.a2;
  result += a4.a3;

  print("result = $result");
  PassStruct16BytesHomogeneousFloatx5Result.complete(result);
}

Future<void> passStruct16BytesHomogeneousFloatx5AfterCallback() async {
  final result = await PassStruct16BytesHomogeneousFloatx5Result.future;
  print("after callback result = $result");
  Expect.approxEquals(10, result);
}

typedef PassStruct16BytesMixedx10Type = Void Function(
    Struct16BytesMixed,
    Struct16BytesMixed,
    Struct16BytesMixed,
    Struct16BytesMixed,
    Struct16BytesMixed,
    Struct16BytesMixed,
    Struct16BytesMixed,
    Struct16BytesMixed,
    Struct16BytesMixed,
    Struct16BytesMixed);

// Global variable that stores the result.
final PassStruct16BytesMixedx10Result = Completer<double>();

/// 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 passStruct16BytesMixedx10(
    Struct16BytesMixed a0,
    Struct16BytesMixed a1,
    Struct16BytesMixed a2,
    Struct16BytesMixed a3,
    Struct16BytesMixed a4,
    Struct16BytesMixed a5,
    Struct16BytesMixed a6,
    Struct16BytesMixed a7,
    Struct16BytesMixed a8,
    Struct16BytesMixed a9) {
  print(
      "passStruct16BytesMixedx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a1.a0;
  result += a1.a1;
  result += a2.a0;
  result += a2.a1;
  result += a3.a0;
  result += a3.a1;
  result += a4.a0;
  result += a4.a1;
  result += a5.a0;
  result += a5.a1;
  result += a6.a0;
  result += a6.a1;
  result += a7.a0;
  result += a7.a1;
  result += a8.a0;
  result += a8.a1;
  result += a9.a0;
  result += a9.a1;

  print("result = $result");
  PassStruct16BytesMixedx10Result.complete(result);
}

Future<void> passStruct16BytesMixedx10AfterCallback() async {
  final result = await PassStruct16BytesMixedx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(10, result);
}

typedef PassStruct16BytesMixed2x10Type = Void Function(
    Struct16BytesMixed2,
    Struct16BytesMixed2,
    Struct16BytesMixed2,
    Struct16BytesMixed2,
    Struct16BytesMixed2,
    Struct16BytesMixed2,
    Struct16BytesMixed2,
    Struct16BytesMixed2,
    Struct16BytesMixed2,
    Struct16BytesMixed2);

// Global variable that stores the result.
final PassStruct16BytesMixed2x10Result = Completer<double>();

/// 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 passStruct16BytesMixed2x10(
    Struct16BytesMixed2 a0,
    Struct16BytesMixed2 a1,
    Struct16BytesMixed2 a2,
    Struct16BytesMixed2 a3,
    Struct16BytesMixed2 a4,
    Struct16BytesMixed2 a5,
    Struct16BytesMixed2 a6,
    Struct16BytesMixed2 a7,
    Struct16BytesMixed2 a8,
    Struct16BytesMixed2 a9) {
  print(
      "passStruct16BytesMixed2x10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a0.a3;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a1.a3;
  result += a2.a0;
  result += a2.a1;
  result += a2.a2;
  result += a2.a3;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a3.a3;
  result += a4.a0;
  result += a4.a1;
  result += a4.a2;
  result += a4.a3;
  result += a5.a0;
  result += a5.a1;
  result += a5.a2;
  result += a5.a3;
  result += a6.a0;
  result += a6.a1;
  result += a6.a2;
  result += a6.a3;
  result += a7.a0;
  result += a7.a1;
  result += a7.a2;
  result += a7.a3;
  result += a8.a0;
  result += a8.a1;
  result += a8.a2;
  result += a8.a3;
  result += a9.a0;
  result += a9.a1;
  result += a9.a2;
  result += a9.a3;

  print("result = $result");
  PassStruct16BytesMixed2x10Result.complete(result);
}

Future<void> passStruct16BytesMixed2x10AfterCallback() async {
  final result = await PassStruct16BytesMixed2x10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(20, result);
}

typedef PassStruct17BytesIntx10Type = Void Function(
    Struct17BytesInt,
    Struct17BytesInt,
    Struct17BytesInt,
    Struct17BytesInt,
    Struct17BytesInt,
    Struct17BytesInt,
    Struct17BytesInt,
    Struct17BytesInt,
    Struct17BytesInt,
    Struct17BytesInt);

// Global variable that stores the result.
final PassStruct17BytesIntx10Result = Completer<double>();

/// Arguments are passed as pointer to copy on arm64.
/// Tests that the memory allocated for copies are rounded up to word size.
void passStruct17BytesIntx10(
    Struct17BytesInt a0,
    Struct17BytesInt a1,
    Struct17BytesInt a2,
    Struct17BytesInt a3,
    Struct17BytesInt a4,
    Struct17BytesInt a5,
    Struct17BytesInt a6,
    Struct17BytesInt a7,
    Struct17BytesInt a8,
    Struct17BytesInt a9) {
  print(
      "passStruct17BytesIntx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a2.a0;
  result += a2.a1;
  result += a2.a2;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a4.a0;
  result += a4.a1;
  result += a4.a2;
  result += a5.a0;
  result += a5.a1;
  result += a5.a2;
  result += a6.a0;
  result += a6.a1;
  result += a6.a2;
  result += a7.a0;
  result += a7.a1;
  result += a7.a2;
  result += a8.a0;
  result += a8.a1;
  result += a8.a2;
  result += a9.a0;
  result += a9.a1;
  result += a9.a2;

  print("result = $result");
  PassStruct17BytesIntx10Result.complete(result);
}

Future<void> passStruct17BytesIntx10AfterCallback() async {
  final result = await PassStruct17BytesIntx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(15, result);
}

typedef PassStruct19BytesHomogeneousUint8x10Type = Void Function(
    Struct19BytesHomogeneousUint8,
    Struct19BytesHomogeneousUint8,
    Struct19BytesHomogeneousUint8,
    Struct19BytesHomogeneousUint8,
    Struct19BytesHomogeneousUint8,
    Struct19BytesHomogeneousUint8,
    Struct19BytesHomogeneousUint8,
    Struct19BytesHomogeneousUint8,
    Struct19BytesHomogeneousUint8,
    Struct19BytesHomogeneousUint8);

// Global variable that stores the result.
final PassStruct19BytesHomogeneousUint8x10Result = Completer<double>();

/// 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 passStruct19BytesHomogeneousUint8x10(
    Struct19BytesHomogeneousUint8 a0,
    Struct19BytesHomogeneousUint8 a1,
    Struct19BytesHomogeneousUint8 a2,
    Struct19BytesHomogeneousUint8 a3,
    Struct19BytesHomogeneousUint8 a4,
    Struct19BytesHomogeneousUint8 a5,
    Struct19BytesHomogeneousUint8 a6,
    Struct19BytesHomogeneousUint8 a7,
    Struct19BytesHomogeneousUint8 a8,
    Struct19BytesHomogeneousUint8 a9) {
  print(
      "passStruct19BytesHomogeneousUint8x10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a0.a3;
  result += a0.a4;
  result += a0.a5;
  result += a0.a6;
  result += a0.a7;
  result += a0.a8;
  result += a0.a9;
  result += a0.a10;
  result += a0.a11;
  result += a0.a12;
  result += a0.a13;
  result += a0.a14;
  result += a0.a15;
  result += a0.a16;
  result += a0.a17;
  result += a0.a18;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a1.a3;
  result += a1.a4;
  result += a1.a5;
  result += a1.a6;
  result += a1.a7;
  result += a1.a8;
  result += a1.a9;
  result += a1.a10;
  result += a1.a11;
  result += a1.a12;
  result += a1.a13;
  result += a1.a14;
  result += a1.a15;
  result += a1.a16;
  result += a1.a17;
  result += a1.a18;
  result += a2.a0;
  result += a2.a1;
  result += a2.a2;
  result += a2.a3;
  result += a2.a4;
  result += a2.a5;
  result += a2.a6;
  result += a2.a7;
  result += a2.a8;
  result += a2.a9;
  result += a2.a10;
  result += a2.a11;
  result += a2.a12;
  result += a2.a13;
  result += a2.a14;
  result += a2.a15;
  result += a2.a16;
  result += a2.a17;
  result += a2.a18;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a3.a3;
  result += a3.a4;
  result += a3.a5;
  result += a3.a6;
  result += a3.a7;
  result += a3.a8;
  result += a3.a9;
  result += a3.a10;
  result += a3.a11;
  result += a3.a12;
  result += a3.a13;
  result += a3.a14;
  result += a3.a15;
  result += a3.a16;
  result += a3.a17;
  result += a3.a18;
  result += a4.a0;
  result += a4.a1;
  result += a4.a2;
  result += a4.a3;
  result += a4.a4;
  result += a4.a5;
  result += a4.a6;
  result += a4.a7;
  result += a4.a8;
  result += a4.a9;
  result += a4.a10;
  result += a4.a11;
  result += a4.a12;
  result += a4.a13;
  result += a4.a14;
  result += a4.a15;
  result += a4.a16;
  result += a4.a17;
  result += a4.a18;
  result += a5.a0;
  result += a5.a1;
  result += a5.a2;
  result += a5.a3;
  result += a5.a4;
  result += a5.a5;
  result += a5.a6;
  result += a5.a7;
  result += a5.a8;
  result += a5.a9;
  result += a5.a10;
  result += a5.a11;
  result += a5.a12;
  result += a5.a13;
  result += a5.a14;
  result += a5.a15;
  result += a5.a16;
  result += a5.a17;
  result += a5.a18;
  result += a6.a0;
  result += a6.a1;
  result += a6.a2;
  result += a6.a3;
  result += a6.a4;
  result += a6.a5;
  result += a6.a6;
  result += a6.a7;
  result += a6.a8;
  result += a6.a9;
  result += a6.a10;
  result += a6.a11;
  result += a6.a12;
  result += a6.a13;
  result += a6.a14;
  result += a6.a15;
  result += a6.a16;
  result += a6.a17;
  result += a6.a18;
  result += a7.a0;
  result += a7.a1;
  result += a7.a2;
  result += a7.a3;
  result += a7.a4;
  result += a7.a5;
  result += a7.a6;
  result += a7.a7;
  result += a7.a8;
  result += a7.a9;
  result += a7.a10;
  result += a7.a11;
  result += a7.a12;
  result += a7.a13;
  result += a7.a14;
  result += a7.a15;
  result += a7.a16;
  result += a7.a17;
  result += a7.a18;
  result += a8.a0;
  result += a8.a1;
  result += a8.a2;
  result += a8.a3;
  result += a8.a4;
  result += a8.a5;
  result += a8.a6;
  result += a8.a7;
  result += a8.a8;
  result += a8.a9;
  result += a8.a10;
  result += a8.a11;
  result += a8.a12;
  result += a8.a13;
  result += a8.a14;
  result += a8.a15;
  result += a8.a16;
  result += a8.a17;
  result += a8.a18;
  result += a9.a0;
  result += a9.a1;
  result += a9.a2;
  result += a9.a3;
  result += a9.a4;
  result += a9.a5;
  result += a9.a6;
  result += a9.a7;
  result += a9.a8;
  result += a9.a9;
  result += a9.a10;
  result += a9.a11;
  result += a9.a12;
  result += a9.a13;
  result += a9.a14;
  result += a9.a15;
  result += a9.a16;
  result += a9.a17;
  result += a9.a18;

  print("result = $result");
  PassStruct19BytesHomogeneousUint8x10Result.complete(result);
}

Future<void> passStruct19BytesHomogeneousUint8x10AfterCallback() async {
  final result = await PassStruct19BytesHomogeneousUint8x10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(18145, result);
}

typedef PassStruct20BytesHomogeneousInt32x10Type = Void Function(
    Struct20BytesHomogeneousInt32,
    Struct20BytesHomogeneousInt32,
    Struct20BytesHomogeneousInt32,
    Struct20BytesHomogeneousInt32,
    Struct20BytesHomogeneousInt32,
    Struct20BytesHomogeneousInt32,
    Struct20BytesHomogeneousInt32,
    Struct20BytesHomogeneousInt32,
    Struct20BytesHomogeneousInt32,
    Struct20BytesHomogeneousInt32);

// Global variable that stores the result.
final PassStruct20BytesHomogeneousInt32x10Result = Completer<double>();

/// 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 passStruct20BytesHomogeneousInt32x10(
    Struct20BytesHomogeneousInt32 a0,
    Struct20BytesHomogeneousInt32 a1,
    Struct20BytesHomogeneousInt32 a2,
    Struct20BytesHomogeneousInt32 a3,
    Struct20BytesHomogeneousInt32 a4,
    Struct20BytesHomogeneousInt32 a5,
    Struct20BytesHomogeneousInt32 a6,
    Struct20BytesHomogeneousInt32 a7,
    Struct20BytesHomogeneousInt32 a8,
    Struct20BytesHomogeneousInt32 a9) {
  print(
      "passStruct20BytesHomogeneousInt32x10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a0.a3;
  result += a0.a4;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a1.a3;
  result += a1.a4;
  result += a2.a0;
  result += a2.a1;
  result += a2.a2;
  result += a2.a3;
  result += a2.a4;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a3.a3;
  result += a3.a4;
  result += a4.a0;
  result += a4.a1;
  result += a4.a2;
  result += a4.a3;
  result += a4.a4;
  result += a5.a0;
  result += a5.a1;
  result += a5.a2;
  result += a5.a3;
  result += a5.a4;
  result += a6.a0;
  result += a6.a1;
  result += a6.a2;
  result += a6.a3;
  result += a6.a4;
  result += a7.a0;
  result += a7.a1;
  result += a7.a2;
  result += a7.a3;
  result += a7.a4;
  result += a8.a0;
  result += a8.a1;
  result += a8.a2;
  result += a8.a3;
  result += a8.a4;
  result += a9.a0;
  result += a9.a1;
  result += a9.a2;
  result += a9.a3;
  result += a9.a4;

  print("result = $result");
  PassStruct20BytesHomogeneousInt32x10Result.complete(result);
}

Future<void> passStruct20BytesHomogeneousInt32x10AfterCallback() async {
  final result = await PassStruct20BytesHomogeneousInt32x10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(25, result);
}

typedef PassStruct20BytesHomogeneousFloatType = Void Function(
    Struct20BytesHomogeneousFloat);

// Global variable that stores the result.
final PassStruct20BytesHomogeneousFloatResult = Completer<double>();

/// Argument too big to go into FPU registers in hardfp and arm64.
void passStruct20BytesHomogeneousFloat(Struct20BytesHomogeneousFloat a0) {
  print("passStruct20BytesHomogeneousFloat(${a0})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a0.a3;
  result += a0.a4;

  print("result = $result");
  PassStruct20BytesHomogeneousFloatResult.complete(result);
}

Future<void> passStruct20BytesHomogeneousFloatAfterCallback() async {
  final result = await PassStruct20BytesHomogeneousFloatResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-3, result);
}

typedef PassStruct32BytesHomogeneousDoublex5Type = Void Function(
    Struct32BytesHomogeneousDouble,
    Struct32BytesHomogeneousDouble,
    Struct32BytesHomogeneousDouble,
    Struct32BytesHomogeneousDouble,
    Struct32BytesHomogeneousDouble);

// Global variable that stores the result.
final PassStruct32BytesHomogeneousDoublex5Result = Completer<double>();

/// Arguments in FPU registers on arm64.
/// 5 struct arguments will exhaust available registers.
void passStruct32BytesHomogeneousDoublex5(
    Struct32BytesHomogeneousDouble a0,
    Struct32BytesHomogeneousDouble a1,
    Struct32BytesHomogeneousDouble a2,
    Struct32BytesHomogeneousDouble a3,
    Struct32BytesHomogeneousDouble a4) {
  print(
      "passStruct32BytesHomogeneousDoublex5(${a0}, ${a1}, ${a2}, ${a3}, ${a4})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a0.a3;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a1.a3;
  result += a2.a0;
  result += a2.a1;
  result += a2.a2;
  result += a2.a3;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a3.a3;
  result += a4.a0;
  result += a4.a1;
  result += a4.a2;
  result += a4.a3;

  print("result = $result");
  PassStruct32BytesHomogeneousDoublex5Result.complete(result);
}

Future<void> passStruct32BytesHomogeneousDoublex5AfterCallback() async {
  final result = await PassStruct32BytesHomogeneousDoublex5Result.future;
  print("after callback result = $result");
  Expect.approxEquals(10, result);
}

typedef PassStruct40BytesHomogeneousDoubleType = Void Function(
    Struct40BytesHomogeneousDouble);

// Global variable that stores the result.
final PassStruct40BytesHomogeneousDoubleResult = Completer<double>();

/// Argument too big to go into FPU registers in arm64.
void passStruct40BytesHomogeneousDouble(Struct40BytesHomogeneousDouble a0) {
  print("passStruct40BytesHomogeneousDouble(${a0})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a0.a3;
  result += a0.a4;

  print("result = $result");
  PassStruct40BytesHomogeneousDoubleResult.complete(result);
}

Future<void> passStruct40BytesHomogeneousDoubleAfterCallback() async {
  final result = await PassStruct40BytesHomogeneousDoubleResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-3, result);
}

typedef PassStruct1024BytesHomogeneousUint64Type = Void Function(
    Struct1024BytesHomogeneousUint64);

// Global variable that stores the result.
final PassStruct1024BytesHomogeneousUint64Result = Completer<double>();

/// Test 1kb struct.
void passStruct1024BytesHomogeneousUint64(Struct1024BytesHomogeneousUint64 a0) {
  print("passStruct1024BytesHomogeneousUint64(${a0})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a0.a3;
  result += a0.a4;
  result += a0.a5;
  result += a0.a6;
  result += a0.a7;
  result += a0.a8;
  result += a0.a9;
  result += a0.a10;
  result += a0.a11;
  result += a0.a12;
  result += a0.a13;
  result += a0.a14;
  result += a0.a15;
  result += a0.a16;
  result += a0.a17;
  result += a0.a18;
  result += a0.a19;
  result += a0.a20;
  result += a0.a21;
  result += a0.a22;
  result += a0.a23;
  result += a0.a24;
  result += a0.a25;
  result += a0.a26;
  result += a0.a27;
  result += a0.a28;
  result += a0.a29;
  result += a0.a30;
  result += a0.a31;
  result += a0.a32;
  result += a0.a33;
  result += a0.a34;
  result += a0.a35;
  result += a0.a36;
  result += a0.a37;
  result += a0.a38;
  result += a0.a39;
  result += a0.a40;
  result += a0.a41;
  result += a0.a42;
  result += a0.a43;
  result += a0.a44;
  result += a0.a45;
  result += a0.a46;
  result += a0.a47;
  result += a0.a48;
  result += a0.a49;
  result += a0.a50;
  result += a0.a51;
  result += a0.a52;
  result += a0.a53;
  result += a0.a54;
  result += a0.a55;
  result += a0.a56;
  result += a0.a57;
  result += a0.a58;
  result += a0.a59;
  result += a0.a60;
  result += a0.a61;
  result += a0.a62;
  result += a0.a63;
  result += a0.a64;
  result += a0.a65;
  result += a0.a66;
  result += a0.a67;
  result += a0.a68;
  result += a0.a69;
  result += a0.a70;
  result += a0.a71;
  result += a0.a72;
  result += a0.a73;
  result += a0.a74;
  result += a0.a75;
  result += a0.a76;
  result += a0.a77;
  result += a0.a78;
  result += a0.a79;
  result += a0.a80;
  result += a0.a81;
  result += a0.a82;
  result += a0.a83;
  result += a0.a84;
  result += a0.a85;
  result += a0.a86;
  result += a0.a87;
  result += a0.a88;
  result += a0.a89;
  result += a0.a90;
  result += a0.a91;
  result += a0.a92;
  result += a0.a93;
  result += a0.a94;
  result += a0.a95;
  result += a0.a96;
  result += a0.a97;
  result += a0.a98;
  result += a0.a99;
  result += a0.a100;
  result += a0.a101;
  result += a0.a102;
  result += a0.a103;
  result += a0.a104;
  result += a0.a105;
  result += a0.a106;
  result += a0.a107;
  result += a0.a108;
  result += a0.a109;
  result += a0.a110;
  result += a0.a111;
  result += a0.a112;
  result += a0.a113;
  result += a0.a114;
  result += a0.a115;
  result += a0.a116;
  result += a0.a117;
  result += a0.a118;
  result += a0.a119;
  result += a0.a120;
  result += a0.a121;
  result += a0.a122;
  result += a0.a123;
  result += a0.a124;
  result += a0.a125;
  result += a0.a126;
  result += a0.a127;

  print("result = $result");
  PassStruct1024BytesHomogeneousUint64Result.complete(result);
}

Future<void> passStruct1024BytesHomogeneousUint64AfterCallback() async {
  final result = await PassStruct1024BytesHomogeneousUint64Result.future;
  print("after callback result = $result");
  Expect.approxEquals(8256, result);
}

typedef PassFloatStruct16BytesHomogeneousFloatFloatStruct1Type = Void Function(
    Float,
    Struct16BytesHomogeneousFloat,
    Float,
    Struct16BytesHomogeneousFloat,
    Float,
    Struct16BytesHomogeneousFloat,
    Float,
    Struct16BytesHomogeneousFloat,
    Float);

// Global variable that stores the result.
final PassFloatStruct16BytesHomogeneousFloatFloatStruct1Result =
    Completer<double>();

/// Tests the alignment of structs in FPU registers and backfilling.
void passFloatStruct16BytesHomogeneousFloatFloatStruct1(
    double a0,
    Struct16BytesHomogeneousFloat a1,
    double a2,
    Struct16BytesHomogeneousFloat a3,
    double a4,
    Struct16BytesHomogeneousFloat a5,
    double a6,
    Struct16BytesHomogeneousFloat a7,
    double a8) {
  print(
      "passFloatStruct16BytesHomogeneousFloatFloatStruct1(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})");

  double result = 0;

  result += a0;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a1.a3;
  result += a2;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a3.a3;
  result += a4;
  result += a5.a0;
  result += a5.a1;
  result += a5.a2;
  result += a5.a3;
  result += a6;
  result += a7.a0;
  result += a7.a1;
  result += a7.a2;
  result += a7.a3;
  result += a8;

  print("result = $result");
  PassFloatStruct16BytesHomogeneousFloatFloatStruct1Result.complete(result);
}

Future<void>
    passFloatStruct16BytesHomogeneousFloatFloatStruct1AfterCallback() async {
  final result =
      await PassFloatStruct16BytesHomogeneousFloatFloatStruct1Result.future;
  print("after callback result = $result");
  Expect.approxEquals(-11, result);
}

typedef PassFloatStruct32BytesHomogeneousDoubleFloatStructType = Void Function(
    Float,
    Struct32BytesHomogeneousDouble,
    Float,
    Struct32BytesHomogeneousDouble,
    Float,
    Struct32BytesHomogeneousDouble,
    Float,
    Struct32BytesHomogeneousDouble,
    Float);

// Global variable that stores the result.
final PassFloatStruct32BytesHomogeneousDoubleFloatStructResult =
    Completer<double>();

/// Tests the alignment of structs in FPU registers and backfilling.
void passFloatStruct32BytesHomogeneousDoubleFloatStruct(
    double a0,
    Struct32BytesHomogeneousDouble a1,
    double a2,
    Struct32BytesHomogeneousDouble a3,
    double a4,
    Struct32BytesHomogeneousDouble a5,
    double a6,
    Struct32BytesHomogeneousDouble a7,
    double a8) {
  print(
      "passFloatStruct32BytesHomogeneousDoubleFloatStruct(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})");

  double result = 0;

  result += a0;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a1.a3;
  result += a2;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a3.a3;
  result += a4;
  result += a5.a0;
  result += a5.a1;
  result += a5.a2;
  result += a5.a3;
  result += a6;
  result += a7.a0;
  result += a7.a1;
  result += a7.a2;
  result += a7.a3;
  result += a8;

  print("result = $result");
  PassFloatStruct32BytesHomogeneousDoubleFloatStructResult.complete(result);
}

Future<void>
    passFloatStruct32BytesHomogeneousDoubleFloatStructAfterCallback() async {
  final result =
      await PassFloatStruct32BytesHomogeneousDoubleFloatStructResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-11, result);
}

typedef PassInt8Struct16BytesMixedInt8Struct16BytesMixedInType = Void Function(
    Int8,
    Struct16BytesMixed,
    Int8,
    Struct16BytesMixed,
    Int8,
    Struct16BytesMixed,
    Int8,
    Struct16BytesMixed,
    Int8);

// Global variable that stores the result.
final PassInt8Struct16BytesMixedInt8Struct16BytesMixedInResult =
    Completer<double>();

/// 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 passInt8Struct16BytesMixedInt8Struct16BytesMixedIn(
    int a0,
    Struct16BytesMixed a1,
    int a2,
    Struct16BytesMixed a3,
    int a4,
    Struct16BytesMixed a5,
    int a6,
    Struct16BytesMixed a7,
    int a8) {
  print(
      "passInt8Struct16BytesMixedInt8Struct16BytesMixedIn(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})");

  double result = 0;

  result += a0;
  result += a1.a0;
  result += a1.a1;
  result += a2;
  result += a3.a0;
  result += a3.a1;
  result += a4;
  result += a5.a0;
  result += a5.a1;
  result += a6;
  result += a7.a0;
  result += a7.a1;
  result += a8;

  print("result = $result");
  PassInt8Struct16BytesMixedInt8Struct16BytesMixedInResult.complete(result);
}

Future<void>
    passInt8Struct16BytesMixedInt8Struct16BytesMixedInAfterCallback() async {
  final result =
      await PassInt8Struct16BytesMixedInt8Struct16BytesMixedInResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-7, result);
}

typedef PassDoublex6Struct16BytesMixedx4Int32Type = Void Function(
    Double,
    Double,
    Double,
    Double,
    Double,
    Double,
    Struct16BytesMixed,
    Struct16BytesMixed,
    Struct16BytesMixed,
    Struct16BytesMixed,
    Int32);

// Global variable that stores the result.
final PassDoublex6Struct16BytesMixedx4Int32Result = Completer<double>();

/// 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 passDoublex6Struct16BytesMixedx4Int32(
    double a0,
    double a1,
    double a2,
    double a3,
    double a4,
    double a5,
    Struct16BytesMixed a6,
    Struct16BytesMixed a7,
    Struct16BytesMixed a8,
    Struct16BytesMixed a9,
    int a10) {
  print(
      "passDoublex6Struct16BytesMixedx4Int32(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;
  result += a4;
  result += a5;
  result += a6.a0;
  result += a6.a1;
  result += a7.a0;
  result += a7.a1;
  result += a8.a0;
  result += a8.a1;
  result += a9.a0;
  result += a9.a1;
  result += a10;

  print("result = $result");
  PassDoublex6Struct16BytesMixedx4Int32Result.complete(result);
}

Future<void> passDoublex6Struct16BytesMixedx4Int32AfterCallback() async {
  final result = await PassDoublex6Struct16BytesMixedx4Int32Result.future;
  print("after callback result = $result");
  Expect.approxEquals(-8, result);
}

typedef PassInt32x4Struct16BytesMixedx4DoubleType = Void Function(
    Int32,
    Int32,
    Int32,
    Int32,
    Struct16BytesMixed,
    Struct16BytesMixed,
    Struct16BytesMixed,
    Struct16BytesMixed,
    Double);

// Global variable that stores the result.
final PassInt32x4Struct16BytesMixedx4DoubleResult = Completer<double>();

/// 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 passInt32x4Struct16BytesMixedx4Double(
    int a0,
    int a1,
    int a2,
    int a3,
    Struct16BytesMixed a4,
    Struct16BytesMixed a5,
    Struct16BytesMixed a6,
    Struct16BytesMixed a7,
    double a8) {
  print(
      "passInt32x4Struct16BytesMixedx4Double(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;
  result += a4.a0;
  result += a4.a1;
  result += a5.a0;
  result += a5.a1;
  result += a6.a0;
  result += a6.a1;
  result += a7.a0;
  result += a7.a1;
  result += a8;

  print("result = $result");
  PassInt32x4Struct16BytesMixedx4DoubleResult.complete(result);
}

Future<void> passInt32x4Struct16BytesMixedx4DoubleAfterCallback() async {
  final result = await PassInt32x4Struct16BytesMixedx4DoubleResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-7, result);
}

typedef PassStruct40BytesHomogeneousDoubleStruct4BytesHomoType = Void Function(
    Struct40BytesHomogeneousDouble,
    Struct4BytesHomogeneousInt16,
    Struct8BytesHomogeneousFloat);

// Global variable that stores the result.
final PassStruct40BytesHomogeneousDoubleStruct4BytesHomoResult =
    Completer<double>();

/// On various architectures, first struct is allocated on stack.
/// Check that the other two arguments are allocated on registers.
void passStruct40BytesHomogeneousDoubleStruct4BytesHomo(
    Struct40BytesHomogeneousDouble a0,
    Struct4BytesHomogeneousInt16 a1,
    Struct8BytesHomogeneousFloat a2) {
  print(
      "passStruct40BytesHomogeneousDoubleStruct4BytesHomo(${a0}, ${a1}, ${a2})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a0.a3;
  result += a0.a4;
  result += a1.a0;
  result += a1.a1;
  result += a2.a0;
  result += a2.a1;

  print("result = $result");
  PassStruct40BytesHomogeneousDoubleStruct4BytesHomoResult.complete(result);
}

Future<void>
    passStruct40BytesHomogeneousDoubleStruct4BytesHomoAfterCallback() async {
  final result =
      await PassStruct40BytesHomogeneousDoubleStruct4BytesHomoResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-5, result);
}

typedef PassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntType = Void 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);

// Global variable that stores the result.
final PassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntResult =
    Completer<double>();

/// Test alignment and padding of 16 byte int within struct.
void passInt32x8Doublex8Int64Int8Struct1ByteIntInt64Int(
    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,
    Struct1ByteInt a18,
    int a19,
    int a20,
    Struct4BytesHomogeneousInt16 a21,
    int a22,
    int a23,
    Struct8BytesInt a24,
    int a25,
    int a26,
    Struct8BytesHomogeneousFloat a27,
    int a28,
    int a29,
    Struct8BytesMixed a30,
    int a31,
    int a32,
    StructAlignmentInt16 a33,
    int a34,
    int a35,
    StructAlignmentInt32 a36,
    int a37,
    int a38,
    StructAlignmentInt64 a39) {
  print(
      "passInt32x8Doublex8Int64Int8Struct1ByteIntInt64Int(${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})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;
  result += a4;
  result += a5;
  result += a6;
  result += a7;
  result += a8;
  result += a9;
  result += a10;
  result += a11;
  result += a12;
  result += a13;
  result += a14;
  result += a15;
  result += a16;
  result += a17;
  result += a18.a0;
  result += a19;
  result += a20;
  result += a21.a0;
  result += a21.a1;
  result += a22;
  result += a23;
  result += a24.a0;
  result += a24.a1;
  result += a24.a2;
  result += a25;
  result += a26;
  result += a27.a0;
  result += a27.a1;
  result += a28;
  result += a29;
  result += a30.a0;
  result += a30.a1;
  result += a30.a2;
  result += a31;
  result += a32;
  result += a33.a0;
  result += a33.a1;
  result += a33.a2;
  result += a34;
  result += a35;
  result += a36.a0;
  result += a36.a1;
  result += a36.a2;
  result += a37;
  result += a38;
  result += a39.a0;
  result += a39.a1;
  result += a39.a2;

  print("result = $result");
  PassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntResult.complete(result);
}

Future<void>
    passInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntAfterCallback() async {
  final result =
      await PassInt32x8Doublex8Int64Int8Struct1ByteIntInt64IntResult.future;
  print("after callback result = $result");
  Expect.approxEquals(26, result);
}

typedef PassStructAlignmentInt16Type = Void Function(StructAlignmentInt16);

// Global variable that stores the result.
final PassStructAlignmentInt16Result = Completer<double>();

/// Test alignment and padding of 16 byte int within struct.
void passStructAlignmentInt16(StructAlignmentInt16 a0) {
  print("passStructAlignmentInt16(${a0})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;

  print("result = $result");
  PassStructAlignmentInt16Result.complete(result);
}

Future<void> passStructAlignmentInt16AfterCallback() async {
  final result = await PassStructAlignmentInt16Result.future;
  print("after callback result = $result");
  Expect.approxEquals(-2, result);
}

typedef PassStructAlignmentInt32Type = Void Function(StructAlignmentInt32);

// Global variable that stores the result.
final PassStructAlignmentInt32Result = Completer<double>();

/// Test alignment and padding of 32 byte int within struct.
void passStructAlignmentInt32(StructAlignmentInt32 a0) {
  print("passStructAlignmentInt32(${a0})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;

  print("result = $result");
  PassStructAlignmentInt32Result.complete(result);
}

Future<void> passStructAlignmentInt32AfterCallback() async {
  final result = await PassStructAlignmentInt32Result.future;
  print("after callback result = $result");
  Expect.approxEquals(-2, result);
}

typedef PassStructAlignmentInt64Type = Void Function(StructAlignmentInt64);

// Global variable that stores the result.
final PassStructAlignmentInt64Result = Completer<double>();

/// Test alignment and padding of 64 byte int within struct.
void passStructAlignmentInt64(StructAlignmentInt64 a0) {
  print("passStructAlignmentInt64(${a0})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;

  print("result = $result");
  PassStructAlignmentInt64Result.complete(result);
}

Future<void> passStructAlignmentInt64AfterCallback() async {
  final result = await PassStructAlignmentInt64Result.future;
  print("after callback result = $result");
  Expect.approxEquals(-2, result);
}

typedef PassStruct8BytesNestedIntx10Type = Void Function(
    Struct8BytesNestedInt,
    Struct8BytesNestedInt,
    Struct8BytesNestedInt,
    Struct8BytesNestedInt,
    Struct8BytesNestedInt,
    Struct8BytesNestedInt,
    Struct8BytesNestedInt,
    Struct8BytesNestedInt,
    Struct8BytesNestedInt,
    Struct8BytesNestedInt);

// Global variable that stores the result.
final PassStruct8BytesNestedIntx10Result = Completer<double>();

/// Simple nested struct. No alignment gaps on any architectures.
/// 10 arguments exhaust registers on all platforms.
void passStruct8BytesNestedIntx10(
    Struct8BytesNestedInt a0,
    Struct8BytesNestedInt a1,
    Struct8BytesNestedInt a2,
    Struct8BytesNestedInt a3,
    Struct8BytesNestedInt a4,
    Struct8BytesNestedInt a5,
    Struct8BytesNestedInt a6,
    Struct8BytesNestedInt a7,
    Struct8BytesNestedInt a8,
    Struct8BytesNestedInt a9) {
  print(
      "passStruct8BytesNestedIntx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a0.a1;
  result += a0.a1.a0;
  result += a0.a1.a1;
  result += a1.a0.a0;
  result += a1.a0.a1;
  result += a1.a1.a0;
  result += a1.a1.a1;
  result += a2.a0.a0;
  result += a2.a0.a1;
  result += a2.a1.a0;
  result += a2.a1.a1;
  result += a3.a0.a0;
  result += a3.a0.a1;
  result += a3.a1.a0;
  result += a3.a1.a1;
  result += a4.a0.a0;
  result += a4.a0.a1;
  result += a4.a1.a0;
  result += a4.a1.a1;
  result += a5.a0.a0;
  result += a5.a0.a1;
  result += a5.a1.a0;
  result += a5.a1.a1;
  result += a6.a0.a0;
  result += a6.a0.a1;
  result += a6.a1.a0;
  result += a6.a1.a1;
  result += a7.a0.a0;
  result += a7.a0.a1;
  result += a7.a1.a0;
  result += a7.a1.a1;
  result += a8.a0.a0;
  result += a8.a0.a1;
  result += a8.a1.a0;
  result += a8.a1.a1;
  result += a9.a0.a0;
  result += a9.a0.a1;
  result += a9.a1.a0;
  result += a9.a1.a1;

  print("result = $result");
  PassStruct8BytesNestedIntx10Result.complete(result);
}

Future<void> passStruct8BytesNestedIntx10AfterCallback() async {
  final result = await PassStruct8BytesNestedIntx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(20, result);
}

typedef PassStruct8BytesNestedFloatx10Type = Void Function(
    Struct8BytesNestedFloat,
    Struct8BytesNestedFloat,
    Struct8BytesNestedFloat,
    Struct8BytesNestedFloat,
    Struct8BytesNestedFloat,
    Struct8BytesNestedFloat,
    Struct8BytesNestedFloat,
    Struct8BytesNestedFloat,
    Struct8BytesNestedFloat,
    Struct8BytesNestedFloat);

// Global variable that stores the result.
final PassStruct8BytesNestedFloatx10Result = Completer<double>();

/// Simple nested struct. No alignment gaps on any architectures.
/// 10 arguments exhaust fpu registers on all platforms.
void passStruct8BytesNestedFloatx10(
    Struct8BytesNestedFloat a0,
    Struct8BytesNestedFloat a1,
    Struct8BytesNestedFloat a2,
    Struct8BytesNestedFloat a3,
    Struct8BytesNestedFloat a4,
    Struct8BytesNestedFloat a5,
    Struct8BytesNestedFloat a6,
    Struct8BytesNestedFloat a7,
    Struct8BytesNestedFloat a8,
    Struct8BytesNestedFloat a9) {
  print(
      "passStruct8BytesNestedFloatx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a1.a0;
  result += a1.a0.a0;
  result += a1.a1.a0;
  result += a2.a0.a0;
  result += a2.a1.a0;
  result += a3.a0.a0;
  result += a3.a1.a0;
  result += a4.a0.a0;
  result += a4.a1.a0;
  result += a5.a0.a0;
  result += a5.a1.a0;
  result += a6.a0.a0;
  result += a6.a1.a0;
  result += a7.a0.a0;
  result += a7.a1.a0;
  result += a8.a0.a0;
  result += a8.a1.a0;
  result += a9.a0.a0;
  result += a9.a1.a0;

  print("result = $result");
  PassStruct8BytesNestedFloatx10Result.complete(result);
}

Future<void> passStruct8BytesNestedFloatx10AfterCallback() async {
  final result = await PassStruct8BytesNestedFloatx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(10, result);
}

typedef PassStruct8BytesNestedFloat2x10Type = Void Function(
    Struct8BytesNestedFloat2,
    Struct8BytesNestedFloat2,
    Struct8BytesNestedFloat2,
    Struct8BytesNestedFloat2,
    Struct8BytesNestedFloat2,
    Struct8BytesNestedFloat2,
    Struct8BytesNestedFloat2,
    Struct8BytesNestedFloat2,
    Struct8BytesNestedFloat2,
    Struct8BytesNestedFloat2);

// Global variable that stores the result.
final PassStruct8BytesNestedFloat2x10Result = Completer<double>();

/// 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 passStruct8BytesNestedFloat2x10(
    Struct8BytesNestedFloat2 a0,
    Struct8BytesNestedFloat2 a1,
    Struct8BytesNestedFloat2 a2,
    Struct8BytesNestedFloat2 a3,
    Struct8BytesNestedFloat2 a4,
    Struct8BytesNestedFloat2 a5,
    Struct8BytesNestedFloat2 a6,
    Struct8BytesNestedFloat2 a7,
    Struct8BytesNestedFloat2 a8,
    Struct8BytesNestedFloat2 a9) {
  print(
      "passStruct8BytesNestedFloat2x10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a1;
  result += a1.a0.a0;
  result += a1.a1;
  result += a2.a0.a0;
  result += a2.a1;
  result += a3.a0.a0;
  result += a3.a1;
  result += a4.a0.a0;
  result += a4.a1;
  result += a5.a0.a0;
  result += a5.a1;
  result += a6.a0.a0;
  result += a6.a1;
  result += a7.a0.a0;
  result += a7.a1;
  result += a8.a0.a0;
  result += a8.a1;
  result += a9.a0.a0;
  result += a9.a1;

  print("result = $result");
  PassStruct8BytesNestedFloat2x10Result.complete(result);
}

Future<void> passStruct8BytesNestedFloat2x10AfterCallback() async {
  final result = await PassStruct8BytesNestedFloat2x10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(10, result);
}

typedef PassStruct8BytesNestedMixedx10Type = Void Function(
    Struct8BytesNestedMixed,
    Struct8BytesNestedMixed,
    Struct8BytesNestedMixed,
    Struct8BytesNestedMixed,
    Struct8BytesNestedMixed,
    Struct8BytesNestedMixed,
    Struct8BytesNestedMixed,
    Struct8BytesNestedMixed,
    Struct8BytesNestedMixed,
    Struct8BytesNestedMixed);

// Global variable that stores the result.
final PassStruct8BytesNestedMixedx10Result = Completer<double>();

/// Simple nested struct. No alignment gaps on any architectures.
/// 10 arguments exhaust all registers on all platforms.
void passStruct8BytesNestedMixedx10(
    Struct8BytesNestedMixed a0,
    Struct8BytesNestedMixed a1,
    Struct8BytesNestedMixed a2,
    Struct8BytesNestedMixed a3,
    Struct8BytesNestedMixed a4,
    Struct8BytesNestedMixed a5,
    Struct8BytesNestedMixed a6,
    Struct8BytesNestedMixed a7,
    Struct8BytesNestedMixed a8,
    Struct8BytesNestedMixed a9) {
  print(
      "passStruct8BytesNestedMixedx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a0.a1;
  result += a0.a1.a0;
  result += a1.a0.a0;
  result += a1.a0.a1;
  result += a1.a1.a0;
  result += a2.a0.a0;
  result += a2.a0.a1;
  result += a2.a1.a0;
  result += a3.a0.a0;
  result += a3.a0.a1;
  result += a3.a1.a0;
  result += a4.a0.a0;
  result += a4.a0.a1;
  result += a4.a1.a0;
  result += a5.a0.a0;
  result += a5.a0.a1;
  result += a5.a1.a0;
  result += a6.a0.a0;
  result += a6.a0.a1;
  result += a6.a1.a0;
  result += a7.a0.a0;
  result += a7.a0.a1;
  result += a7.a1.a0;
  result += a8.a0.a0;
  result += a8.a0.a1;
  result += a8.a1.a0;
  result += a9.a0.a0;
  result += a9.a0.a1;
  result += a9.a1.a0;

  print("result = $result");
  PassStruct8BytesNestedMixedx10Result.complete(result);
}

Future<void> passStruct8BytesNestedMixedx10AfterCallback() async {
  final result = await PassStruct8BytesNestedMixedx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(15, result);
}

typedef PassStruct16BytesNestedIntx2Type = Void Function(
    Struct16BytesNestedInt, Struct16BytesNestedInt);

// Global variable that stores the result.
final PassStruct16BytesNestedIntx2Result = Completer<double>();

/// Deeper nested struct to test recursive member access.
void passStruct16BytesNestedIntx2(
    Struct16BytesNestedInt a0, Struct16BytesNestedInt a1) {
  print("passStruct16BytesNestedIntx2(${a0}, ${a1})");

  double result = 0;

  result += a0.a0.a0.a0;
  result += a0.a0.a0.a1;
  result += a0.a0.a1.a0;
  result += a0.a0.a1.a1;
  result += a0.a1.a0.a0;
  result += a0.a1.a0.a1;
  result += a0.a1.a1.a0;
  result += a0.a1.a1.a1;
  result += a1.a0.a0.a0;
  result += a1.a0.a0.a1;
  result += a1.a0.a1.a0;
  result += a1.a0.a1.a1;
  result += a1.a1.a0.a0;
  result += a1.a1.a0.a1;
  result += a1.a1.a1.a0;
  result += a1.a1.a1.a1;

  print("result = $result");
  PassStruct16BytesNestedIntx2Result.complete(result);
}

Future<void> passStruct16BytesNestedIntx2AfterCallback() async {
  final result = await PassStruct16BytesNestedIntx2Result.future;
  print("after callback result = $result");
  Expect.approxEquals(8, result);
}

typedef PassStruct32BytesNestedIntx2Type = Void Function(
    Struct32BytesNestedInt, Struct32BytesNestedInt);

// Global variable that stores the result.
final PassStruct32BytesNestedIntx2Result = Completer<double>();

/// Even deeper nested struct to test recursive member access.
void passStruct32BytesNestedIntx2(
    Struct32BytesNestedInt a0, Struct32BytesNestedInt a1) {
  print("passStruct32BytesNestedIntx2(${a0}, ${a1})");

  double result = 0;

  result += a0.a0.a0.a0.a0;
  result += a0.a0.a0.a0.a1;
  result += a0.a0.a0.a1.a0;
  result += a0.a0.a0.a1.a1;
  result += a0.a0.a1.a0.a0;
  result += a0.a0.a1.a0.a1;
  result += a0.a0.a1.a1.a0;
  result += a0.a0.a1.a1.a1;
  result += a0.a1.a0.a0.a0;
  result += a0.a1.a0.a0.a1;
  result += a0.a1.a0.a1.a0;
  result += a0.a1.a0.a1.a1;
  result += a0.a1.a1.a0.a0;
  result += a0.a1.a1.a0.a1;
  result += a0.a1.a1.a1.a0;
  result += a0.a1.a1.a1.a1;
  result += a1.a0.a0.a0.a0;
  result += a1.a0.a0.a0.a1;
  result += a1.a0.a0.a1.a0;
  result += a1.a0.a0.a1.a1;
  result += a1.a0.a1.a0.a0;
  result += a1.a0.a1.a0.a1;
  result += a1.a0.a1.a1.a0;
  result += a1.a0.a1.a1.a1;
  result += a1.a1.a0.a0.a0;
  result += a1.a1.a0.a0.a1;
  result += a1.a1.a0.a1.a0;
  result += a1.a1.a0.a1.a1;
  result += a1.a1.a1.a0.a0;
  result += a1.a1.a1.a0.a1;
  result += a1.a1.a1.a1.a0;
  result += a1.a1.a1.a1.a1;

  print("result = $result");
  PassStruct32BytesNestedIntx2Result.complete(result);
}

Future<void> passStruct32BytesNestedIntx2AfterCallback() async {
  final result = await PassStruct32BytesNestedIntx2Result.future;
  print("after callback result = $result");
  Expect.approxEquals(16, result);
}

typedef PassStructNestedIntStructAlignmentInt16Type = Void Function(
    StructNestedIntStructAlignmentInt16);

// Global variable that stores the result.
final PassStructNestedIntStructAlignmentInt16Result = Completer<double>();

/// Test alignment and padding of nested struct with 16 byte int.
void passStructNestedIntStructAlignmentInt16(
    StructNestedIntStructAlignmentInt16 a0) {
  print("passStructNestedIntStructAlignmentInt16(${a0})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a0.a1;
  result += a0.a0.a2;
  result += a0.a1.a0;
  result += a0.a1.a1;
  result += a0.a1.a2;

  print("result = $result");
  PassStructNestedIntStructAlignmentInt16Result.complete(result);
}

Future<void> passStructNestedIntStructAlignmentInt16AfterCallback() async {
  final result = await PassStructNestedIntStructAlignmentInt16Result.future;
  print("after callback result = $result");
  Expect.approxEquals(3, result);
}

typedef PassStructNestedIntStructAlignmentInt32Type = Void Function(
    StructNestedIntStructAlignmentInt32);

// Global variable that stores the result.
final PassStructNestedIntStructAlignmentInt32Result = Completer<double>();

/// Test alignment and padding of nested struct with 32 byte int.
void passStructNestedIntStructAlignmentInt32(
    StructNestedIntStructAlignmentInt32 a0) {
  print("passStructNestedIntStructAlignmentInt32(${a0})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a0.a1;
  result += a0.a0.a2;
  result += a0.a1.a0;
  result += a0.a1.a1;
  result += a0.a1.a2;

  print("result = $result");
  PassStructNestedIntStructAlignmentInt32Result.complete(result);
}

Future<void> passStructNestedIntStructAlignmentInt32AfterCallback() async {
  final result = await PassStructNestedIntStructAlignmentInt32Result.future;
  print("after callback result = $result");
  Expect.approxEquals(3, result);
}

typedef PassStructNestedIntStructAlignmentInt64Type = Void Function(
    StructNestedIntStructAlignmentInt64);

// Global variable that stores the result.
final PassStructNestedIntStructAlignmentInt64Result = Completer<double>();

/// Test alignment and padding of nested struct with 64 byte int.
void passStructNestedIntStructAlignmentInt64(
    StructNestedIntStructAlignmentInt64 a0) {
  print("passStructNestedIntStructAlignmentInt64(${a0})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a0.a1;
  result += a0.a0.a2;
  result += a0.a1.a0;
  result += a0.a1.a1;
  result += a0.a1.a2;

  print("result = $result");
  PassStructNestedIntStructAlignmentInt64Result.complete(result);
}

Future<void> passStructNestedIntStructAlignmentInt64AfterCallback() async {
  final result = await PassStructNestedIntStructAlignmentInt64Result.future;
  print("after callback result = $result");
  Expect.approxEquals(3, result);
}

typedef PassStructNestedIrregularEvenBiggerx4Type = Void Function(
    StructNestedIrregularEvenBigger,
    StructNestedIrregularEvenBigger,
    StructNestedIrregularEvenBigger,
    StructNestedIrregularEvenBigger);

// Global variable that stores the result.
final PassStructNestedIrregularEvenBiggerx4Result = Completer<double>();

/// Return big irregular struct as smoke test.
void passStructNestedIrregularEvenBiggerx4(
    StructNestedIrregularEvenBigger a0,
    StructNestedIrregularEvenBigger a1,
    StructNestedIrregularEvenBigger a2,
    StructNestedIrregularEvenBigger a3) {
  print("passStructNestedIrregularEvenBiggerx4(${a0}, ${a1}, ${a2}, ${a3})");

  double result = 0;

  result += a0.a0;
  result += a0.a1.a0.a0;
  result += a0.a1.a0.a1.a0.a0;
  result += a0.a1.a0.a1.a0.a1;
  result += a0.a1.a0.a1.a1.a0;
  result += a0.a1.a0.a2;
  result += a0.a1.a0.a3.a0.a0;
  result += a0.a1.a0.a3.a1;
  result += a0.a1.a0.a4;
  result += a0.a1.a0.a5.a0.a0;
  result += a0.a1.a0.a5.a1.a0;
  result += a0.a1.a0.a6;
  result += a0.a1.a1.a0.a0;
  result += a0.a1.a1.a0.a1;
  result += a0.a1.a1.a1.a0;
  result += a0.a1.a2;
  result += a0.a1.a3;
  result += a0.a2.a0.a0;
  result += a0.a2.a0.a1.a0.a0;
  result += a0.a2.a0.a1.a0.a1;
  result += a0.a2.a0.a1.a1.a0;
  result += a0.a2.a0.a2;
  result += a0.a2.a0.a3.a0.a0;
  result += a0.a2.a0.a3.a1;
  result += a0.a2.a0.a4;
  result += a0.a2.a0.a5.a0.a0;
  result += a0.a2.a0.a5.a1.a0;
  result += a0.a2.a0.a6;
  result += a0.a2.a1.a0.a0;
  result += a0.a2.a1.a0.a1;
  result += a0.a2.a1.a1.a0;
  result += a0.a2.a2;
  result += a0.a2.a3;
  result += a0.a3;
  result += a1.a0;
  result += a1.a1.a0.a0;
  result += a1.a1.a0.a1.a0.a0;
  result += a1.a1.a0.a1.a0.a1;
  result += a1.a1.a0.a1.a1.a0;
  result += a1.a1.a0.a2;
  result += a1.a1.a0.a3.a0.a0;
  result += a1.a1.a0.a3.a1;
  result += a1.a1.a0.a4;
  result += a1.a1.a0.a5.a0.a0;
  result += a1.a1.a0.a5.a1.a0;
  result += a1.a1.a0.a6;
  result += a1.a1.a1.a0.a0;
  result += a1.a1.a1.a0.a1;
  result += a1.a1.a1.a1.a0;
  result += a1.a1.a2;
  result += a1.a1.a3;
  result += a1.a2.a0.a0;
  result += a1.a2.a0.a1.a0.a0;
  result += a1.a2.a0.a1.a0.a1;
  result += a1.a2.a0.a1.a1.a0;
  result += a1.a2.a0.a2;
  result += a1.a2.a0.a3.a0.a0;
  result += a1.a2.a0.a3.a1;
  result += a1.a2.a0.a4;
  result += a1.a2.a0.a5.a0.a0;
  result += a1.a2.a0.a5.a1.a0;
  result += a1.a2.a0.a6;
  result += a1.a2.a1.a0.a0;
  result += a1.a2.a1.a0.a1;
  result += a1.a2.a1.a1.a0;
  result += a1.a2.a2;
  result += a1.a2.a3;
  result += a1.a3;
  result += a2.a0;
  result += a2.a1.a0.a0;
  result += a2.a1.a0.a1.a0.a0;
  result += a2.a1.a0.a1.a0.a1;
  result += a2.a1.a0.a1.a1.a0;
  result += a2.a1.a0.a2;
  result += a2.a1.a0.a3.a0.a0;
  result += a2.a1.a0.a3.a1;
  result += a2.a1.a0.a4;
  result += a2.a1.a0.a5.a0.a0;
  result += a2.a1.a0.a5.a1.a0;
  result += a2.a1.a0.a6;
  result += a2.a1.a1.a0.a0;
  result += a2.a1.a1.a0.a1;
  result += a2.a1.a1.a1.a0;
  result += a2.a1.a2;
  result += a2.a1.a3;
  result += a2.a2.a0.a0;
  result += a2.a2.a0.a1.a0.a0;
  result += a2.a2.a0.a1.a0.a1;
  result += a2.a2.a0.a1.a1.a0;
  result += a2.a2.a0.a2;
  result += a2.a2.a0.a3.a0.a0;
  result += a2.a2.a0.a3.a1;
  result += a2.a2.a0.a4;
  result += a2.a2.a0.a5.a0.a0;
  result += a2.a2.a0.a5.a1.a0;
  result += a2.a2.a0.a6;
  result += a2.a2.a1.a0.a0;
  result += a2.a2.a1.a0.a1;
  result += a2.a2.a1.a1.a0;
  result += a2.a2.a2;
  result += a2.a2.a3;
  result += a2.a3;
  result += a3.a0;
  result += a3.a1.a0.a0;
  result += a3.a1.a0.a1.a0.a0;
  result += a3.a1.a0.a1.a0.a1;
  result += a3.a1.a0.a1.a1.a0;
  result += a3.a1.a0.a2;
  result += a3.a1.a0.a3.a0.a0;
  result += a3.a1.a0.a3.a1;
  result += a3.a1.a0.a4;
  result += a3.a1.a0.a5.a0.a0;
  result += a3.a1.a0.a5.a1.a0;
  result += a3.a1.a0.a6;
  result += a3.a1.a1.a0.a0;
  result += a3.a1.a1.a0.a1;
  result += a3.a1.a1.a1.a0;
  result += a3.a1.a2;
  result += a3.a1.a3;
  result += a3.a2.a0.a0;
  result += a3.a2.a0.a1.a0.a0;
  result += a3.a2.a0.a1.a0.a1;
  result += a3.a2.a0.a1.a1.a0;
  result += a3.a2.a0.a2;
  result += a3.a2.a0.a3.a0.a0;
  result += a3.a2.a0.a3.a1;
  result += a3.a2.a0.a4;
  result += a3.a2.a0.a5.a0.a0;
  result += a3.a2.a0.a5.a1.a0;
  result += a3.a2.a0.a6;
  result += a3.a2.a1.a0.a0;
  result += a3.a2.a1.a0.a1;
  result += a3.a2.a1.a1.a0;
  result += a3.a2.a2;
  result += a3.a2.a3;
  result += a3.a3;

  print("result = $result");
  PassStructNestedIrregularEvenBiggerx4Result.complete(result);
}

Future<void> passStructNestedIrregularEvenBiggerx4AfterCallback() async {
  final result = await PassStructNestedIrregularEvenBiggerx4Result.future;
  print("after callback result = $result");
  Expect.approxEquals(1572, result);
}

typedef PassStruct8BytesInlineArrayIntx4Type = Void Function(
    Struct8BytesInlineArrayInt,
    Struct8BytesInlineArrayInt,
    Struct8BytesInlineArrayInt,
    Struct8BytesInlineArrayInt);

// Global variable that stores the result.
final PassStruct8BytesInlineArrayIntx4Result = Completer<double>();

/// Simple struct with inline array.
void passStruct8BytesInlineArrayIntx4(
    Struct8BytesInlineArrayInt a0,
    Struct8BytesInlineArrayInt a1,
    Struct8BytesInlineArrayInt a2,
    Struct8BytesInlineArrayInt a3) {
  print("passStruct8BytesInlineArrayIntx4(${a0}, ${a1}, ${a2}, ${a3})");

  double result = 0;

  result += a0.a0[0];
  result += a0.a0[1];
  result += a0.a0[2];
  result += a0.a0[3];
  result += a0.a0[4];
  result += a0.a0[5];
  result += a0.a0[6];
  result += a0.a0[7];
  result += a1.a0[0];
  result += a1.a0[1];
  result += a1.a0[2];
  result += a1.a0[3];
  result += a1.a0[4];
  result += a1.a0[5];
  result += a1.a0[6];
  result += a1.a0[7];
  result += a2.a0[0];
  result += a2.a0[1];
  result += a2.a0[2];
  result += a2.a0[3];
  result += a2.a0[4];
  result += a2.a0[5];
  result += a2.a0[6];
  result += a2.a0[7];
  result += a3.a0[0];
  result += a3.a0[1];
  result += a3.a0[2];
  result += a3.a0[3];
  result += a3.a0[4];
  result += a3.a0[5];
  result += a3.a0[6];
  result += a3.a0[7];

  print("result = $result");
  PassStruct8BytesInlineArrayIntx4Result.complete(result);
}

Future<void> passStruct8BytesInlineArrayIntx4AfterCallback() async {
  final result = await PassStruct8BytesInlineArrayIntx4Result.future;
  print("after callback result = $result");
  Expect.approxEquals(528, result);
}

typedef PassStructInlineArrayIrregularx4Type = Void Function(
    StructInlineArrayIrregular,
    StructInlineArrayIrregular,
    StructInlineArrayIrregular,
    StructInlineArrayIrregular);

// Global variable that stores the result.
final PassStructInlineArrayIrregularx4Result = Completer<double>();

/// Irregular struct with inline array.
void passStructInlineArrayIrregularx4(
    StructInlineArrayIrregular a0,
    StructInlineArrayIrregular a1,
    StructInlineArrayIrregular a2,
    StructInlineArrayIrregular a3) {
  print("passStructInlineArrayIrregularx4(${a0}, ${a1}, ${a2}, ${a3})");

  double result = 0;

  result += a0.a0[0].a0;
  result += a0.a0[0].a1;
  result += a0.a0[1].a0;
  result += a0.a0[1].a1;
  result += a0.a1;
  result += a1.a0[0].a0;
  result += a1.a0[0].a1;
  result += a1.a0[1].a0;
  result += a1.a0[1].a1;
  result += a1.a1;
  result += a2.a0[0].a0;
  result += a2.a0[0].a1;
  result += a2.a0[1].a0;
  result += a2.a0[1].a1;
  result += a2.a1;
  result += a3.a0[0].a0;
  result += a3.a0[0].a1;
  result += a3.a0[1].a0;
  result += a3.a0[1].a1;
  result += a3.a1;

  print("result = $result");
  PassStructInlineArrayIrregularx4Result.complete(result);
}

Future<void> passStructInlineArrayIrregularx4AfterCallback() async {
  final result = await PassStructInlineArrayIrregularx4Result.future;
  print("after callback result = $result");
  Expect.approxEquals(50, result);
}

typedef PassStructInlineArray100BytesType = Void Function(
    StructInlineArray100Bytes);

// Global variable that stores the result.
final PassStructInlineArray100BytesResult = Completer<double>();

/// Regular larger struct with inline array.
void passStructInlineArray100Bytes(StructInlineArray100Bytes a0) {
  print("passStructInlineArray100Bytes(${a0})");

  double result = 0;

  result += a0.a0[0];
  result += a0.a0[1];
  result += a0.a0[2];
  result += a0.a0[3];
  result += a0.a0[4];
  result += a0.a0[5];
  result += a0.a0[6];
  result += a0.a0[7];
  result += a0.a0[8];
  result += a0.a0[9];
  result += a0.a0[10];
  result += a0.a0[11];
  result += a0.a0[12];
  result += a0.a0[13];
  result += a0.a0[14];
  result += a0.a0[15];
  result += a0.a0[16];
  result += a0.a0[17];
  result += a0.a0[18];
  result += a0.a0[19];
  result += a0.a0[20];
  result += a0.a0[21];
  result += a0.a0[22];
  result += a0.a0[23];
  result += a0.a0[24];
  result += a0.a0[25];
  result += a0.a0[26];
  result += a0.a0[27];
  result += a0.a0[28];
  result += a0.a0[29];
  result += a0.a0[30];
  result += a0.a0[31];
  result += a0.a0[32];
  result += a0.a0[33];
  result += a0.a0[34];
  result += a0.a0[35];
  result += a0.a0[36];
  result += a0.a0[37];
  result += a0.a0[38];
  result += a0.a0[39];
  result += a0.a0[40];
  result += a0.a0[41];
  result += a0.a0[42];
  result += a0.a0[43];
  result += a0.a0[44];
  result += a0.a0[45];
  result += a0.a0[46];
  result += a0.a0[47];
  result += a0.a0[48];
  result += a0.a0[49];
  result += a0.a0[50];
  result += a0.a0[51];
  result += a0.a0[52];
  result += a0.a0[53];
  result += a0.a0[54];
  result += a0.a0[55];
  result += a0.a0[56];
  result += a0.a0[57];
  result += a0.a0[58];
  result += a0.a0[59];
  result += a0.a0[60];
  result += a0.a0[61];
  result += a0.a0[62];
  result += a0.a0[63];
  result += a0.a0[64];
  result += a0.a0[65];
  result += a0.a0[66];
  result += a0.a0[67];
  result += a0.a0[68];
  result += a0.a0[69];
  result += a0.a0[70];
  result += a0.a0[71];
  result += a0.a0[72];
  result += a0.a0[73];
  result += a0.a0[74];
  result += a0.a0[75];
  result += a0.a0[76];
  result += a0.a0[77];
  result += a0.a0[78];
  result += a0.a0[79];
  result += a0.a0[80];
  result += a0.a0[81];
  result += a0.a0[82];
  result += a0.a0[83];
  result += a0.a0[84];
  result += a0.a0[85];
  result += a0.a0[86];
  result += a0.a0[87];
  result += a0.a0[88];
  result += a0.a0[89];
  result += a0.a0[90];
  result += a0.a0[91];
  result += a0.a0[92];
  result += a0.a0[93];
  result += a0.a0[94];
  result += a0.a0[95];
  result += a0.a0[96];
  result += a0.a0[97];
  result += a0.a0[98];
  result += a0.a0[99];

  print("result = $result");
  PassStructInlineArray100BytesResult.complete(result);
}

Future<void> passStructInlineArray100BytesAfterCallback() async {
  final result = await PassStructInlineArray100BytesResult.future;
  print("after callback result = $result");
  Expect.approxEquals(5050, result);
}

typedef PassStructStruct16BytesHomogeneousFloat2x5Type = Void Function(
    StructStruct16BytesHomogeneousFloat2,
    StructStruct16BytesHomogeneousFloat2,
    StructStruct16BytesHomogeneousFloat2,
    StructStruct16BytesHomogeneousFloat2,
    StructStruct16BytesHomogeneousFloat2);

// Global variable that stores the result.
final PassStructStruct16BytesHomogeneousFloat2x5Result = Completer<double>();

/// Arguments in FPU registers on arm hardfp and arm64.
/// 5 struct arguments will exhaust available registers.
void passStructStruct16BytesHomogeneousFloat2x5(
    StructStruct16BytesHomogeneousFloat2 a0,
    StructStruct16BytesHomogeneousFloat2 a1,
    StructStruct16BytesHomogeneousFloat2 a2,
    StructStruct16BytesHomogeneousFloat2 a3,
    StructStruct16BytesHomogeneousFloat2 a4) {
  print(
      "passStructStruct16BytesHomogeneousFloat2x5(${a0}, ${a1}, ${a2}, ${a3}, ${a4})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a1[0].a0;
  result += a0.a1[1].a0;
  result += a0.a2;
  result += a1.a0.a0;
  result += a1.a1[0].a0;
  result += a1.a1[1].a0;
  result += a1.a2;
  result += a2.a0.a0;
  result += a2.a1[0].a0;
  result += a2.a1[1].a0;
  result += a2.a2;
  result += a3.a0.a0;
  result += a3.a1[0].a0;
  result += a3.a1[1].a0;
  result += a3.a2;
  result += a4.a0.a0;
  result += a4.a1[0].a0;
  result += a4.a1[1].a0;
  result += a4.a2;

  print("result = $result");
  PassStructStruct16BytesHomogeneousFloat2x5Result.complete(result);
}

Future<void> passStructStruct16BytesHomogeneousFloat2x5AfterCallback() async {
  final result = await PassStructStruct16BytesHomogeneousFloat2x5Result.future;
  print("after callback result = $result");
  Expect.approxEquals(10, result);
}

typedef PassStructStruct32BytesHomogeneousDouble2x5Type = Void Function(
    StructStruct32BytesHomogeneousDouble2,
    StructStruct32BytesHomogeneousDouble2,
    StructStruct32BytesHomogeneousDouble2,
    StructStruct32BytesHomogeneousDouble2,
    StructStruct32BytesHomogeneousDouble2);

// Global variable that stores the result.
final PassStructStruct32BytesHomogeneousDouble2x5Result = Completer<double>();

/// Arguments in FPU registers on arm64.
/// 5 struct arguments will exhaust available registers.
void passStructStruct32BytesHomogeneousDouble2x5(
    StructStruct32BytesHomogeneousDouble2 a0,
    StructStruct32BytesHomogeneousDouble2 a1,
    StructStruct32BytesHomogeneousDouble2 a2,
    StructStruct32BytesHomogeneousDouble2 a3,
    StructStruct32BytesHomogeneousDouble2 a4) {
  print(
      "passStructStruct32BytesHomogeneousDouble2x5(${a0}, ${a1}, ${a2}, ${a3}, ${a4})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a1[0].a0;
  result += a0.a1[1].a0;
  result += a0.a2;
  result += a1.a0.a0;
  result += a1.a1[0].a0;
  result += a1.a1[1].a0;
  result += a1.a2;
  result += a2.a0.a0;
  result += a2.a1[0].a0;
  result += a2.a1[1].a0;
  result += a2.a2;
  result += a3.a0.a0;
  result += a3.a1[0].a0;
  result += a3.a1[1].a0;
  result += a3.a2;
  result += a4.a0.a0;
  result += a4.a1[0].a0;
  result += a4.a1[1].a0;
  result += a4.a2;

  print("result = $result");
  PassStructStruct32BytesHomogeneousDouble2x5Result.complete(result);
}

Future<void> passStructStruct32BytesHomogeneousDouble2x5AfterCallback() async {
  final result = await PassStructStruct32BytesHomogeneousDouble2x5Result.future;
  print("after callback result = $result");
  Expect.approxEquals(10, result);
}

typedef PassStructStruct16BytesMixed3x10Type = Void Function(
    StructStruct16BytesMixed3,
    StructStruct16BytesMixed3,
    StructStruct16BytesMixed3,
    StructStruct16BytesMixed3,
    StructStruct16BytesMixed3,
    StructStruct16BytesMixed3,
    StructStruct16BytesMixed3,
    StructStruct16BytesMixed3,
    StructStruct16BytesMixed3,
    StructStruct16BytesMixed3);

// Global variable that stores the result.
final PassStructStruct16BytesMixed3x10Result = Completer<double>();

/// 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 passStructStruct16BytesMixed3x10(
    StructStruct16BytesMixed3 a0,
    StructStruct16BytesMixed3 a1,
    StructStruct16BytesMixed3 a2,
    StructStruct16BytesMixed3 a3,
    StructStruct16BytesMixed3 a4,
    StructStruct16BytesMixed3 a5,
    StructStruct16BytesMixed3 a6,
    StructStruct16BytesMixed3 a7,
    StructStruct16BytesMixed3 a8,
    StructStruct16BytesMixed3 a9) {
  print(
      "passStructStruct16BytesMixed3x10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a1[0].a0;
  result += a0.a1[0].a1;
  result += a0.a1[0].a2;
  result += a0.a2[0];
  result += a0.a2[1];
  result += a1.a0.a0;
  result += a1.a1[0].a0;
  result += a1.a1[0].a1;
  result += a1.a1[0].a2;
  result += a1.a2[0];
  result += a1.a2[1];
  result += a2.a0.a0;
  result += a2.a1[0].a0;
  result += a2.a1[0].a1;
  result += a2.a1[0].a2;
  result += a2.a2[0];
  result += a2.a2[1];
  result += a3.a0.a0;
  result += a3.a1[0].a0;
  result += a3.a1[0].a1;
  result += a3.a1[0].a2;
  result += a3.a2[0];
  result += a3.a2[1];
  result += a4.a0.a0;
  result += a4.a1[0].a0;
  result += a4.a1[0].a1;
  result += a4.a1[0].a2;
  result += a4.a2[0];
  result += a4.a2[1];
  result += a5.a0.a0;
  result += a5.a1[0].a0;
  result += a5.a1[0].a1;
  result += a5.a1[0].a2;
  result += a5.a2[0];
  result += a5.a2[1];
  result += a6.a0.a0;
  result += a6.a1[0].a0;
  result += a6.a1[0].a1;
  result += a6.a1[0].a2;
  result += a6.a2[0];
  result += a6.a2[1];
  result += a7.a0.a0;
  result += a7.a1[0].a0;
  result += a7.a1[0].a1;
  result += a7.a1[0].a2;
  result += a7.a2[0];
  result += a7.a2[1];
  result += a8.a0.a0;
  result += a8.a1[0].a0;
  result += a8.a1[0].a1;
  result += a8.a1[0].a2;
  result += a8.a2[0];
  result += a8.a2[1];
  result += a9.a0.a0;
  result += a9.a1[0].a0;
  result += a9.a1[0].a1;
  result += a9.a1[0].a2;
  result += a9.a2[0];
  result += a9.a2[1];

  print("result = $result");
  PassStructStruct16BytesMixed3x10Result.complete(result);
}

Future<void> passStructStruct16BytesMixed3x10AfterCallback() async {
  final result = await PassStructStruct16BytesMixed3x10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(30, result);
}

typedef PassUint8Struct32BytesInlineArrayMultiDimensionalIType = Void Function(
    Uint8,
    Struct32BytesInlineArrayMultiDimensionalInt,
    Uint8,
    Struct8BytesInlineArrayMultiDimensionalInt,
    Uint8,
    Struct8BytesInlineArrayMultiDimensionalInt,
    Uint8);

// Global variable that stores the result.
final PassUint8Struct32BytesInlineArrayMultiDimensionalIResult =
    Completer<double>();

/// Test multi dimensional inline array struct as argument.
void passUint8Struct32BytesInlineArrayMultiDimensionalI(
    int a0,
    Struct32BytesInlineArrayMultiDimensionalInt a1,
    int a2,
    Struct8BytesInlineArrayMultiDimensionalInt a3,
    int a4,
    Struct8BytesInlineArrayMultiDimensionalInt a5,
    int a6) {
  print(
      "passUint8Struct32BytesInlineArrayMultiDimensionalI(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})");

  double result = 0;

  result += a0;
  result += a1.a0[0][0][0][0][0];
  result += a1.a0[0][0][0][0][1];
  result += a1.a0[0][0][0][1][0];
  result += a1.a0[0][0][0][1][1];
  result += a1.a0[0][0][1][0][0];
  result += a1.a0[0][0][1][0][1];
  result += a1.a0[0][0][1][1][0];
  result += a1.a0[0][0][1][1][1];
  result += a1.a0[0][1][0][0][0];
  result += a1.a0[0][1][0][0][1];
  result += a1.a0[0][1][0][1][0];
  result += a1.a0[0][1][0][1][1];
  result += a1.a0[0][1][1][0][0];
  result += a1.a0[0][1][1][0][1];
  result += a1.a0[0][1][1][1][0];
  result += a1.a0[0][1][1][1][1];
  result += a1.a0[1][0][0][0][0];
  result += a1.a0[1][0][0][0][1];
  result += a1.a0[1][0][0][1][0];
  result += a1.a0[1][0][0][1][1];
  result += a1.a0[1][0][1][0][0];
  result += a1.a0[1][0][1][0][1];
  result += a1.a0[1][0][1][1][0];
  result += a1.a0[1][0][1][1][1];
  result += a1.a0[1][1][0][0][0];
  result += a1.a0[1][1][0][0][1];
  result += a1.a0[1][1][0][1][0];
  result += a1.a0[1][1][0][1][1];
  result += a1.a0[1][1][1][0][0];
  result += a1.a0[1][1][1][0][1];
  result += a1.a0[1][1][1][1][0];
  result += a1.a0[1][1][1][1][1];
  result += a2;
  result += a3.a0[0][0][0];
  result += a3.a0[0][0][1];
  result += a3.a0[0][1][0];
  result += a3.a0[0][1][1];
  result += a3.a0[1][0][0];
  result += a3.a0[1][0][1];
  result += a3.a0[1][1][0];
  result += a3.a0[1][1][1];
  result += a4;
  result += a5.a0[0][0][0];
  result += a5.a0[0][0][1];
  result += a5.a0[0][1][0];
  result += a5.a0[0][1][1];
  result += a5.a0[1][0][0];
  result += a5.a0[1][0][1];
  result += a5.a0[1][1][0];
  result += a5.a0[1][1][1];
  result += a6;

  print("result = $result");
  PassUint8Struct32BytesInlineArrayMultiDimensionalIResult.complete(result);
}

Future<void>
    passUint8Struct32BytesInlineArrayMultiDimensionalIAfterCallback() async {
  final result =
      await PassUint8Struct32BytesInlineArrayMultiDimensionalIResult.future;
  print("after callback result = $result");
  Expect.approxEquals(1378, result);
}

typedef PassUint8Struct4BytesInlineArrayMultiDimensionalInType = Void Function(
    Uint8, Struct4BytesInlineArrayMultiDimensionalInt, Uint8);

// Global variable that stores the result.
final PassUint8Struct4BytesInlineArrayMultiDimensionalInResult =
    Completer<double>();

/// Test struct in multi dimensional inline array.
void passUint8Struct4BytesInlineArrayMultiDimensionalIn(
    int a0, Struct4BytesInlineArrayMultiDimensionalInt a1, int a2) {
  print(
      "passUint8Struct4BytesInlineArrayMultiDimensionalIn(${a0}, ${a1}, ${a2})");

  double result = 0;

  result += a0;
  result += a1.a0[0][0].a0;
  result += a1.a0[0][1].a0;
  result += a1.a0[1][0].a0;
  result += a1.a0[1][1].a0;
  result += a2;

  print("result = $result");
  PassUint8Struct4BytesInlineArrayMultiDimensionalInResult.complete(result);
}

Future<void>
    passUint8Struct4BytesInlineArrayMultiDimensionalInAfterCallback() async {
  final result =
      await PassUint8Struct4BytesInlineArrayMultiDimensionalInResult.future;
  print("after callback result = $result");
  Expect.approxEquals(5, result);
}

typedef PassStruct3BytesPackedIntx10Type = Void Function(
    Struct3BytesPackedInt,
    Struct3BytesPackedInt,
    Struct3BytesPackedInt,
    Struct3BytesPackedInt,
    Struct3BytesPackedInt,
    Struct3BytesPackedInt,
    Struct3BytesPackedInt,
    Struct3BytesPackedInt,
    Struct3BytesPackedInt,
    Struct3BytesPackedInt);

// Global variable that stores the result.
final PassStruct3BytesPackedIntx10Result = Completer<double>();

/// Small struct with mis-aligned member.
void passStruct3BytesPackedIntx10(
    Struct3BytesPackedInt a0,
    Struct3BytesPackedInt a1,
    Struct3BytesPackedInt a2,
    Struct3BytesPackedInt a3,
    Struct3BytesPackedInt a4,
    Struct3BytesPackedInt a5,
    Struct3BytesPackedInt a6,
    Struct3BytesPackedInt a7,
    Struct3BytesPackedInt a8,
    Struct3BytesPackedInt a9) {
  print(
      "passStruct3BytesPackedIntx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a1.a0;
  result += a1.a1;
  result += a2.a0;
  result += a2.a1;
  result += a3.a0;
  result += a3.a1;
  result += a4.a0;
  result += a4.a1;
  result += a5.a0;
  result += a5.a1;
  result += a6.a0;
  result += a6.a1;
  result += a7.a0;
  result += a7.a1;
  result += a8.a0;
  result += a8.a1;
  result += a9.a0;
  result += a9.a1;

  print("result = $result");
  PassStruct3BytesPackedIntx10Result.complete(result);
}

Future<void> passStruct3BytesPackedIntx10AfterCallback() async {
  final result = await PassStruct3BytesPackedIntx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(10, result);
}

typedef PassStruct8BytesPackedIntx10Type = Void Function(
    Struct8BytesPackedInt,
    Struct8BytesPackedInt,
    Struct8BytesPackedInt,
    Struct8BytesPackedInt,
    Struct8BytesPackedInt,
    Struct8BytesPackedInt,
    Struct8BytesPackedInt,
    Struct8BytesPackedInt,
    Struct8BytesPackedInt,
    Struct8BytesPackedInt);

// Global variable that stores the result.
final PassStruct8BytesPackedIntx10Result = Completer<double>();

/// Struct with mis-aligned member.
void passStruct8BytesPackedIntx10(
    Struct8BytesPackedInt a0,
    Struct8BytesPackedInt a1,
    Struct8BytesPackedInt a2,
    Struct8BytesPackedInt a3,
    Struct8BytesPackedInt a4,
    Struct8BytesPackedInt a5,
    Struct8BytesPackedInt a6,
    Struct8BytesPackedInt a7,
    Struct8BytesPackedInt a8,
    Struct8BytesPackedInt a9) {
  print(
      "passStruct8BytesPackedIntx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a0.a3;
  result += a0.a4;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;
  result += a1.a3;
  result += a1.a4;
  result += a2.a0;
  result += a2.a1;
  result += a2.a2;
  result += a2.a3;
  result += a2.a4;
  result += a3.a0;
  result += a3.a1;
  result += a3.a2;
  result += a3.a3;
  result += a3.a4;
  result += a4.a0;
  result += a4.a1;
  result += a4.a2;
  result += a4.a3;
  result += a4.a4;
  result += a5.a0;
  result += a5.a1;
  result += a5.a2;
  result += a5.a3;
  result += a5.a4;
  result += a6.a0;
  result += a6.a1;
  result += a6.a2;
  result += a6.a3;
  result += a6.a4;
  result += a7.a0;
  result += a7.a1;
  result += a7.a2;
  result += a7.a3;
  result += a7.a4;
  result += a8.a0;
  result += a8.a1;
  result += a8.a2;
  result += a8.a3;
  result += a8.a4;
  result += a9.a0;
  result += a9.a1;
  result += a9.a2;
  result += a9.a3;
  result += a9.a4;

  print("result = $result");
  PassStruct8BytesPackedIntx10Result.complete(result);
}

Future<void> passStruct8BytesPackedIntx10AfterCallback() async {
  final result = await PassStruct8BytesPackedIntx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(1275, result);
}

typedef PassStruct9BytesPackedMixedx10DoubleInt32x2Type = Void Function(
    Struct9BytesPackedMixed,
    Struct9BytesPackedMixed,
    Struct9BytesPackedMixed,
    Struct9BytesPackedMixed,
    Struct9BytesPackedMixed,
    Struct9BytesPackedMixed,
    Struct9BytesPackedMixed,
    Struct9BytesPackedMixed,
    Struct9BytesPackedMixed,
    Struct9BytesPackedMixed,
    Double,
    Int32,
    Int32);

// Global variable that stores the result.
final PassStruct9BytesPackedMixedx10DoubleInt32x2Result = Completer<double>();

/// Struct with mis-aligned member.
/// Tests backfilling of CPU and FPU registers.
void passStruct9BytesPackedMixedx10DoubleInt32x2(
    Struct9BytesPackedMixed a0,
    Struct9BytesPackedMixed a1,
    Struct9BytesPackedMixed a2,
    Struct9BytesPackedMixed a3,
    Struct9BytesPackedMixed a4,
    Struct9BytesPackedMixed a5,
    Struct9BytesPackedMixed a6,
    Struct9BytesPackedMixed a7,
    Struct9BytesPackedMixed a8,
    Struct9BytesPackedMixed a9,
    double a10,
    int a11,
    int a12) {
  print(
      "passStruct9BytesPackedMixedx10DoubleInt32x2(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a1.a0;
  result += a1.a1;
  result += a2.a0;
  result += a2.a1;
  result += a3.a0;
  result += a3.a1;
  result += a4.a0;
  result += a4.a1;
  result += a5.a0;
  result += a5.a1;
  result += a6.a0;
  result += a6.a1;
  result += a7.a0;
  result += a7.a1;
  result += a8.a0;
  result += a8.a1;
  result += a9.a0;
  result += a9.a1;
  result += a10;
  result += a11;
  result += a12;

  print("result = $result");
  PassStruct9BytesPackedMixedx10DoubleInt32x2Result.complete(result);
}

Future<void> passStruct9BytesPackedMixedx10DoubleInt32x2AfterCallback() async {
  final result = await PassStruct9BytesPackedMixedx10DoubleInt32x2Result.future;
  print("after callback result = $result");
  Expect.approxEquals(188, result);
}

typedef PassStruct5BytesPackedMixedType = Void Function(
    Struct5BytesPackedMixed);

// Global variable that stores the result.
final PassStruct5BytesPackedMixedResult = Completer<double>();

/// This packed struct happens to have only aligned members.
void passStruct5BytesPackedMixed(Struct5BytesPackedMixed a0) {
  print("passStruct5BytesPackedMixed(${a0})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;

  print("result = $result");
  PassStruct5BytesPackedMixedResult.complete(result);
}

Future<void> passStruct5BytesPackedMixedAfterCallback() async {
  final result = await PassStruct5BytesPackedMixedResult.future;
  print("after callback result = $result");
  Expect.approxEquals(1, result);
}

typedef PassStructNestedAlignmentStruct5BytesPackedMixedType = Void Function(
    StructNestedAlignmentStruct5BytesPackedMixed);

// Global variable that stores the result.
final PassStructNestedAlignmentStruct5BytesPackedMixedResult =
    Completer<double>();

/// Check alignment of packed struct in non-packed struct.
void passStructNestedAlignmentStruct5BytesPackedMixed(
    StructNestedAlignmentStruct5BytesPackedMixed a0) {
  print("passStructNestedAlignmentStruct5BytesPackedMixed(${a0})");

  double result = 0;

  result += a0.a0;
  result += a0.a1.a0;
  result += a0.a1.a1;

  print("result = $result");
  PassStructNestedAlignmentStruct5BytesPackedMixedResult.complete(result);
}

Future<void>
    passStructNestedAlignmentStruct5BytesPackedMixedAfterCallback() async {
  final result =
      await PassStructNestedAlignmentStruct5BytesPackedMixedResult.future;
  print("after callback result = $result");
  Expect.approxEquals(6, result);
}

typedef PassStruct6BytesInlineArrayIntType = Void Function(
    Struct6BytesInlineArrayInt);

// Global variable that stores the result.
final PassStruct6BytesInlineArrayIntResult = Completer<double>();

/// Check alignment of packed struct array in non-packed struct.
void passStruct6BytesInlineArrayInt(Struct6BytesInlineArrayInt a0) {
  print("passStruct6BytesInlineArrayInt(${a0})");

  double result = 0;

  result += a0.a0[0].a0;
  result += a0.a0[0].a1;
  result += a0.a0[1].a0;
  result += a0.a0[1].a1;

  print("result = $result");
  PassStruct6BytesInlineArrayIntResult.complete(result);
}

Future<void> passStruct6BytesInlineArrayIntAfterCallback() async {
  final result = await PassStruct6BytesInlineArrayIntResult.future;
  print("after callback result = $result");
  Expect.approxEquals(2, result);
}

typedef PassStruct15BytesInlineArrayMixedType = Void Function(
    Struct15BytesInlineArrayMixed);

// Global variable that stores the result.
final PassStruct15BytesInlineArrayMixedResult = Completer<double>();

/// Check alignment of packed struct array in non-packed struct.
void passStruct15BytesInlineArrayMixed(Struct15BytesInlineArrayMixed a0) {
  print("passStruct15BytesInlineArrayMixed(${a0})");

  double result = 0;

  result += a0.a0[0].a0;
  result += a0.a0[0].a1;
  result += a0.a0[1].a0;
  result += a0.a0[1].a1;
  result += a0.a0[2].a0;
  result += a0.a0[2].a1;

  print("result = $result");
  PassStruct15BytesInlineArrayMixedResult.complete(result);
}

Future<void> passStruct15BytesInlineArrayMixedAfterCallback() async {
  final result = await PassStruct15BytesInlineArrayMixedResult.future;
  print("after callback result = $result");
  Expect.approxEquals(3, result);
}

typedef PassUnion4BytesMixedx10Type = Void Function(
    Union4BytesMixed,
    Union4BytesMixed,
    Union4BytesMixed,
    Union4BytesMixed,
    Union4BytesMixed,
    Union4BytesMixed,
    Union4BytesMixed,
    Union4BytesMixed,
    Union4BytesMixed,
    Union4BytesMixed);

// Global variable that stores the result.
final PassUnion4BytesMixedx10Result = Completer<double>();

/// Check placement of mixed integer/float union.
void passUnion4BytesMixedx10(
    Union4BytesMixed a0,
    Union4BytesMixed a1,
    Union4BytesMixed a2,
    Union4BytesMixed a3,
    Union4BytesMixed a4,
    Union4BytesMixed a5,
    Union4BytesMixed a6,
    Union4BytesMixed a7,
    Union4BytesMixed a8,
    Union4BytesMixed a9) {
  print(
      "passUnion4BytesMixedx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a1.a0;
  result += a2.a0;
  result += a3.a0;
  result += a4.a0;
  result += a5.a0;
  result += a6.a0;
  result += a7.a0;
  result += a8.a0;
  result += a9.a0;

  print("result = $result");
  PassUnion4BytesMixedx10Result.complete(result);
}

Future<void> passUnion4BytesMixedx10AfterCallback() async {
  final result = await PassUnion4BytesMixedx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(55, result);
}

typedef PassUnion8BytesNestedFloatx10Type = Void Function(
    Union8BytesNestedFloat,
    Union8BytesNestedFloat,
    Union8BytesNestedFloat,
    Union8BytesNestedFloat,
    Union8BytesNestedFloat,
    Union8BytesNestedFloat,
    Union8BytesNestedFloat,
    Union8BytesNestedFloat,
    Union8BytesNestedFloat,
    Union8BytesNestedFloat);

// Global variable that stores the result.
final PassUnion8BytesNestedFloatx10Result = Completer<double>();

/// Check placement of mixed floats union.
void passUnion8BytesNestedFloatx10(
    Union8BytesNestedFloat a0,
    Union8BytesNestedFloat a1,
    Union8BytesNestedFloat a2,
    Union8BytesNestedFloat a3,
    Union8BytesNestedFloat a4,
    Union8BytesNestedFloat a5,
    Union8BytesNestedFloat a6,
    Union8BytesNestedFloat a7,
    Union8BytesNestedFloat a8,
    Union8BytesNestedFloat a9) {
  print(
      "passUnion8BytesNestedFloatx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0;
  result += a1.a0;
  result += a2.a0;
  result += a3.a0;
  result += a4.a0;
  result += a5.a0;
  result += a6.a0;
  result += a7.a0;
  result += a8.a0;
  result += a9.a0;

  print("result = $result");
  PassUnion8BytesNestedFloatx10Result.complete(result);
}

Future<void> passUnion8BytesNestedFloatx10AfterCallback() async {
  final result = await PassUnion8BytesNestedFloatx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(5, result);
}

typedef PassUnion9BytesNestedIntx10Type = Void Function(
    Union9BytesNestedInt,
    Union9BytesNestedInt,
    Union9BytesNestedInt,
    Union9BytesNestedInt,
    Union9BytesNestedInt,
    Union9BytesNestedInt,
    Union9BytesNestedInt,
    Union9BytesNestedInt,
    Union9BytesNestedInt,
    Union9BytesNestedInt);

// Global variable that stores the result.
final PassUnion9BytesNestedIntx10Result = Completer<double>();

/// Mixed-size union argument.
void passUnion9BytesNestedIntx10(
    Union9BytesNestedInt a0,
    Union9BytesNestedInt a1,
    Union9BytesNestedInt a2,
    Union9BytesNestedInt a3,
    Union9BytesNestedInt a4,
    Union9BytesNestedInt a5,
    Union9BytesNestedInt a6,
    Union9BytesNestedInt a7,
    Union9BytesNestedInt a8,
    Union9BytesNestedInt a9) {
  print(
      "passUnion9BytesNestedIntx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a0.a1;
  result += a0.a0.a2;
  result += a1.a0.a0;
  result += a1.a0.a1;
  result += a1.a0.a2;
  result += a2.a0.a0;
  result += a2.a0.a1;
  result += a2.a0.a2;
  result += a3.a0.a0;
  result += a3.a0.a1;
  result += a3.a0.a2;
  result += a4.a0.a0;
  result += a4.a0.a1;
  result += a4.a0.a2;
  result += a5.a0.a0;
  result += a5.a0.a1;
  result += a5.a0.a2;
  result += a6.a0.a0;
  result += a6.a0.a1;
  result += a6.a0.a2;
  result += a7.a0.a0;
  result += a7.a0.a1;
  result += a7.a0.a2;
  result += a8.a0.a0;
  result += a8.a0.a1;
  result += a8.a0.a2;
  result += a9.a0.a0;
  result += a9.a0.a1;
  result += a9.a0.a2;

  print("result = $result");
  PassUnion9BytesNestedIntx10Result.complete(result);
}

Future<void> passUnion9BytesNestedIntx10AfterCallback() async {
  final result = await PassUnion9BytesNestedIntx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(15, result);
}

typedef PassUnion16BytesNestedInlineArrayFloatx10Type = Void Function(
    Union16BytesNestedInlineArrayFloat,
    Union16BytesNestedInlineArrayFloat,
    Union16BytesNestedInlineArrayFloat,
    Union16BytesNestedInlineArrayFloat,
    Union16BytesNestedInlineArrayFloat,
    Union16BytesNestedInlineArrayFloat,
    Union16BytesNestedInlineArrayFloat,
    Union16BytesNestedInlineArrayFloat,
    Union16BytesNestedInlineArrayFloat,
    Union16BytesNestedInlineArrayFloat);

// Global variable that stores the result.
final PassUnion16BytesNestedInlineArrayFloatx10Result = Completer<double>();

/// Union with homogenous floats.
void passUnion16BytesNestedInlineArrayFloatx10(
    Union16BytesNestedInlineArrayFloat a0,
    Union16BytesNestedInlineArrayFloat a1,
    Union16BytesNestedInlineArrayFloat a2,
    Union16BytesNestedInlineArrayFloat a3,
    Union16BytesNestedInlineArrayFloat a4,
    Union16BytesNestedInlineArrayFloat a5,
    Union16BytesNestedInlineArrayFloat a6,
    Union16BytesNestedInlineArrayFloat a7,
    Union16BytesNestedInlineArrayFloat a8,
    Union16BytesNestedInlineArrayFloat a9) {
  print(
      "passUnion16BytesNestedInlineArrayFloatx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0[0];
  result += a0.a0[1];
  result += a0.a0[2];
  result += a0.a0[3];
  result += a1.a0[0];
  result += a1.a0[1];
  result += a1.a0[2];
  result += a1.a0[3];
  result += a2.a0[0];
  result += a2.a0[1];
  result += a2.a0[2];
  result += a2.a0[3];
  result += a3.a0[0];
  result += a3.a0[1];
  result += a3.a0[2];
  result += a3.a0[3];
  result += a4.a0[0];
  result += a4.a0[1];
  result += a4.a0[2];
  result += a4.a0[3];
  result += a5.a0[0];
  result += a5.a0[1];
  result += a5.a0[2];
  result += a5.a0[3];
  result += a6.a0[0];
  result += a6.a0[1];
  result += a6.a0[2];
  result += a6.a0[3];
  result += a7.a0[0];
  result += a7.a0[1];
  result += a7.a0[2];
  result += a7.a0[3];
  result += a8.a0[0];
  result += a8.a0[1];
  result += a8.a0[2];
  result += a8.a0[3];
  result += a9.a0[0];
  result += a9.a0[1];
  result += a9.a0[2];
  result += a9.a0[3];

  print("result = $result");
  PassUnion16BytesNestedInlineArrayFloatx10Result.complete(result);
}

Future<void> passUnion16BytesNestedInlineArrayFloatx10AfterCallback() async {
  final result = await PassUnion16BytesNestedInlineArrayFloatx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(20, result);
}

typedef PassUnion16BytesNestedFloatx10Type = Void Function(
    Union16BytesNestedFloat,
    Union16BytesNestedFloat,
    Union16BytesNestedFloat,
    Union16BytesNestedFloat,
    Union16BytesNestedFloat,
    Union16BytesNestedFloat,
    Union16BytesNestedFloat,
    Union16BytesNestedFloat,
    Union16BytesNestedFloat,
    Union16BytesNestedFloat);

// Global variable that stores the result.
final PassUnion16BytesNestedFloatx10Result = Completer<double>();

/// Union with homogenous floats.
void passUnion16BytesNestedFloatx10(
    Union16BytesNestedFloat a0,
    Union16BytesNestedFloat a1,
    Union16BytesNestedFloat a2,
    Union16BytesNestedFloat a3,
    Union16BytesNestedFloat a4,
    Union16BytesNestedFloat a5,
    Union16BytesNestedFloat a6,
    Union16BytesNestedFloat a7,
    Union16BytesNestedFloat a8,
    Union16BytesNestedFloat a9) {
  print(
      "passUnion16BytesNestedFloatx10(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a0.a1;
  result += a1.a0.a0;
  result += a1.a0.a1;
  result += a2.a0.a0;
  result += a2.a0.a1;
  result += a3.a0.a0;
  result += a3.a0.a1;
  result += a4.a0.a0;
  result += a4.a0.a1;
  result += a5.a0.a0;
  result += a5.a0.a1;
  result += a6.a0.a0;
  result += a6.a0.a1;
  result += a7.a0.a0;
  result += a7.a0.a1;
  result += a8.a0.a0;
  result += a8.a0.a1;
  result += a9.a0.a0;
  result += a9.a0.a1;

  print("result = $result");
  PassUnion16BytesNestedFloatx10Result.complete(result);
}

Future<void> passUnion16BytesNestedFloatx10AfterCallback() async {
  final result = await PassUnion16BytesNestedFloatx10Result.future;
  print("after callback result = $result");
  Expect.approxEquals(10, result);
}

typedef PassUint8Boolx9Struct10BytesHomogeneousBoolBoolType = Void Function(
    Uint8,
    Bool,
    Bool,
    Bool,
    Bool,
    Bool,
    Bool,
    Bool,
    Bool,
    Bool,
    Struct10BytesHomogeneousBool,
    Bool);

// Global variable that stores the result.
final PassUint8Boolx9Struct10BytesHomogeneousBoolBoolResult =
    Completer<double>();

/// Passing bools and a struct with bools.
/// Exhausts the registers to test bools and the bool struct alignment on the
/// stack.
void passUint8Boolx9Struct10BytesHomogeneousBoolBool(
    int a0,
    bool a1,
    bool a2,
    bool a3,
    bool a4,
    bool a5,
    bool a6,
    bool a7,
    bool a8,
    bool a9,
    Struct10BytesHomogeneousBool a10,
    bool a11) {
  print(
      "passUint8Boolx9Struct10BytesHomogeneousBoolBool(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11})");

  double result = 0;

  result += a0;
  result += a1 ? 1 : 0;
  result += a2 ? 1 : 0;
  result += a3 ? 1 : 0;
  result += a4 ? 1 : 0;
  result += a5 ? 1 : 0;
  result += a6 ? 1 : 0;
  result += a7 ? 1 : 0;
  result += a8 ? 1 : 0;
  result += a9 ? 1 : 0;
  result += a10.a0 ? 1 : 0;
  result += a10.a1 ? 1 : 0;
  result += a10.a2 ? 1 : 0;
  result += a10.a3 ? 1 : 0;
  result += a10.a4 ? 1 : 0;
  result += a10.a5 ? 1 : 0;
  result += a10.a6 ? 1 : 0;
  result += a10.a7 ? 1 : 0;
  result += a10.a8 ? 1 : 0;
  result += a10.a9 ? 1 : 0;
  result += a11 ? 1 : 0;

  print("result = $result");
  PassUint8Boolx9Struct10BytesHomogeneousBoolBoolResult.complete(result);
}

Future<void>
    passUint8Boolx9Struct10BytesHomogeneousBoolBoolAfterCallback() async {
  final result =
      await PassUint8Boolx9Struct10BytesHomogeneousBoolBoolResult.future;
  print("after callback result = $result");
  Expect.approxEquals(11, result);
}

typedef PassUint8Boolx9Struct10BytesInlineArrayBoolBoolType = Void Function(
    Uint8,
    Bool,
    Bool,
    Bool,
    Bool,
    Bool,
    Bool,
    Bool,
    Bool,
    Bool,
    Struct10BytesInlineArrayBool,
    Bool);

// Global variable that stores the result.
final PassUint8Boolx9Struct10BytesInlineArrayBoolBoolResult =
    Completer<double>();

/// Passing bools and a struct with bools.
/// Exhausts the registers to test bools and the bool struct alignment on the
/// stack.
void passUint8Boolx9Struct10BytesInlineArrayBoolBool(
    int a0,
    bool a1,
    bool a2,
    bool a3,
    bool a4,
    bool a5,
    bool a6,
    bool a7,
    bool a8,
    bool a9,
    Struct10BytesInlineArrayBool a10,
    bool a11) {
  print(
      "passUint8Boolx9Struct10BytesInlineArrayBoolBool(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11})");

  double result = 0;

  result += a0;
  result += a1 ? 1 : 0;
  result += a2 ? 1 : 0;
  result += a3 ? 1 : 0;
  result += a4 ? 1 : 0;
  result += a5 ? 1 : 0;
  result += a6 ? 1 : 0;
  result += a7 ? 1 : 0;
  result += a8 ? 1 : 0;
  result += a9 ? 1 : 0;
  result += a10.a0[0] ? 1 : 0;
  result += a10.a0[1] ? 1 : 0;
  result += a10.a0[2] ? 1 : 0;
  result += a10.a0[3] ? 1 : 0;
  result += a10.a0[4] ? 1 : 0;
  result += a10.a0[5] ? 1 : 0;
  result += a10.a0[6] ? 1 : 0;
  result += a10.a0[7] ? 1 : 0;
  result += a10.a0[8] ? 1 : 0;
  result += a10.a0[9] ? 1 : 0;
  result += a11 ? 1 : 0;

  print("result = $result");
  PassUint8Boolx9Struct10BytesInlineArrayBoolBoolResult.complete(result);
}

Future<void>
    passUint8Boolx9Struct10BytesInlineArrayBoolBoolAfterCallback() async {
  final result =
      await PassUint8Boolx9Struct10BytesInlineArrayBoolBoolResult.future;
  print("after callback result = $result");
  Expect.approxEquals(11, result);
}

typedef PassUint8Struct1ByteBoolType = Void Function(Uint8, Struct1ByteBool);

// Global variable that stores the result.
final PassUint8Struct1ByteBoolResult = Completer<double>();

/// Returning a bool.
void passUint8Struct1ByteBool(int a0, Struct1ByteBool a1) {
  print("passUint8Struct1ByteBool(${a0}, ${a1})");

  double result = 0;

  result += a0;
  result += a1.a0 ? 1 : 0;

  print("result = $result");
  PassUint8Struct1ByteBoolResult.complete(result);
}

Future<void> passUint8Struct1ByteBoolAfterCallback() async {
  final result = await PassUint8Struct1ByteBoolResult.future;
  print("after callback result = $result");
  Expect.approxEquals(1, result);
}

typedef PassWCharStructInlineArrayIntUintPtrx2LongUnsignedType = Void Function(
    WChar, StructInlineArrayInt, UintPtr, UintPtr, Long, UnsignedLong);

// Global variable that stores the result.
final PassWCharStructInlineArrayIntUintPtrx2LongUnsignedResult =
    Completer<double>();

/// Returning a wchar.
void passWCharStructInlineArrayIntUintPtrx2LongUnsigned(
    int a0, StructInlineArrayInt a1, int a2, int a3, int a4, int a5) {
  print(
      "passWCharStructInlineArrayIntUintPtrx2LongUnsigned(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5})");

  double result = 0;

  result += a0;
  result += a1.a0[0];
  result += a1.a0[1];
  result += a1.a0[2];
  result += a1.a0[3];
  result += a1.a0[4];
  result += a1.a0[5];
  result += a1.a0[6];
  result += a1.a0[7];
  result += a1.a0[8];
  result += a1.a0[9];
  result += a2;
  result += a3;
  result += a4;
  result += a5;

  print("result = $result");
  PassWCharStructInlineArrayIntUintPtrx2LongUnsignedResult.complete(result);
}

Future<void>
    passWCharStructInlineArrayIntUintPtrx2LongUnsignedAfterCallback() async {
  final result =
      await PassWCharStructInlineArrayIntUintPtrx2LongUnsignedResult.future;
  print("after callback result = $result");
  Expect.approxEquals(120, result);
}

typedef PassInt64x7Struct12BytesHomogeneousInt32Type = Void Function(Int64,
    Int64, Int64, Int64, Int64, Int64, Int64, Struct12BytesHomogeneousInt32);

// Global variable that stores the result.
final PassInt64x7Struct12BytesHomogeneousInt32Result = Completer<double>();

/// Struct stradles last argument register
void passInt64x7Struct12BytesHomogeneousInt32(int a0, int a1, int a2, int a3,
    int a4, int a5, int a6, Struct12BytesHomogeneousInt32 a7) {
  print(
      "passInt64x7Struct12BytesHomogeneousInt32(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;
  result += a4;
  result += a5;
  result += a6;
  result += a7.a0;
  result += a7.a1;
  result += a7.a2;

  print("result = $result");
  PassInt64x7Struct12BytesHomogeneousInt32Result.complete(result);
}

Future<void> passInt64x7Struct12BytesHomogeneousInt32AfterCallback() async {
  final result = await PassInt64x7Struct12BytesHomogeneousInt32Result.future;
  print("after callback result = $result");
  Expect.approxEquals(5, result);
}

typedef ReturnStruct1ByteIntType = Void Function(Int8);

// Global variable that stores the result.
final ReturnStruct1ByteIntResult = Completer<double>();

/// Smallest struct with data.
void returnStruct1ByteInt(int a0) {
  print("returnStruct1ByteInt(${a0})");

  double result = 0;

  result += a0;

  print("result = $result");
  ReturnStruct1ByteIntResult.complete(result);
}

Future<void> returnStruct1ByteIntAfterCallback() async {
  final result = await ReturnStruct1ByteIntResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-1, result);
}

typedef ReturnStruct3BytesHomogeneousUint8Type = Void Function(
    Uint8, Uint8, Uint8);

// Global variable that stores the result.
final ReturnStruct3BytesHomogeneousUint8Result = Completer<double>();

/// Smaller than word size return value on all architectures.
void returnStruct3BytesHomogeneousUint8(int a0, int a1, int a2) {
  print("returnStruct3BytesHomogeneousUint8(${a0}, ${a1}, ${a2})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;

  print("result = $result");
  ReturnStruct3BytesHomogeneousUint8Result.complete(result);
}

Future<void> returnStruct3BytesHomogeneousUint8AfterCallback() async {
  final result = await ReturnStruct3BytesHomogeneousUint8Result.future;
  print("after callback result = $result");
  Expect.approxEquals(6, result);
}

typedef ReturnStruct3BytesInt2ByteAlignedType = Void Function(Int16, Int8);

// Global variable that stores the result.
final ReturnStruct3BytesInt2ByteAlignedResult = Completer<double>();

/// Smaller than word size return value on all architectures.
/// With alignment rules taken into account size is 4 bytes.
void returnStruct3BytesInt2ByteAligned(int a0, int a1) {
  print("returnStruct3BytesInt2ByteAligned(${a0}, ${a1})");

  double result = 0;

  result += a0;
  result += a1;

  print("result = $result");
  ReturnStruct3BytesInt2ByteAlignedResult.complete(result);
}

Future<void> returnStruct3BytesInt2ByteAlignedAfterCallback() async {
  final result = await ReturnStruct3BytesInt2ByteAlignedResult.future;
  print("after callback result = $result");
  Expect.approxEquals(1, result);
}

typedef ReturnStruct4BytesHomogeneousInt16Type = Void Function(Int16, Int16);

// Global variable that stores the result.
final ReturnStruct4BytesHomogeneousInt16Result = Completer<double>();

/// Word size return value on 32 bit architectures..
void returnStruct4BytesHomogeneousInt16(int a0, int a1) {
  print("returnStruct4BytesHomogeneousInt16(${a0}, ${a1})");

  double result = 0;

  result += a0;
  result += a1;

  print("result = $result");
  ReturnStruct4BytesHomogeneousInt16Result.complete(result);
}

Future<void> returnStruct4BytesHomogeneousInt16AfterCallback() async {
  final result = await ReturnStruct4BytesHomogeneousInt16Result.future;
  print("after callback result = $result");
  Expect.approxEquals(1, result);
}

typedef ReturnStruct7BytesHomogeneousUint8Type = Void Function(
    Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8);

// Global variable that stores the result.
final ReturnStruct7BytesHomogeneousUint8Result = Completer<double>();

/// Non-wordsize return value.
void returnStruct7BytesHomogeneousUint8(
    int a0, int a1, int a2, int a3, int a4, int a5, int a6) {
  print(
      "returnStruct7BytesHomogeneousUint8(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;
  result += a4;
  result += a5;
  result += a6;

  print("result = $result");
  ReturnStruct7BytesHomogeneousUint8Result.complete(result);
}

Future<void> returnStruct7BytesHomogeneousUint8AfterCallback() async {
  final result = await ReturnStruct7BytesHomogeneousUint8Result.future;
  print("after callback result = $result");
  Expect.approxEquals(28, result);
}

typedef ReturnStruct7BytesInt4ByteAlignedType = Void Function(
    Int32, Int16, Int8);

// Global variable that stores the result.
final ReturnStruct7BytesInt4ByteAlignedResult = Completer<double>();

/// Non-wordsize return value.
/// With alignment rules taken into account size is 8 bytes.
void returnStruct7BytesInt4ByteAligned(int a0, int a1, int a2) {
  print("returnStruct7BytesInt4ByteAligned(${a0}, ${a1}, ${a2})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;

  print("result = $result");
  ReturnStruct7BytesInt4ByteAlignedResult.complete(result);
}

Future<void> returnStruct7BytesInt4ByteAlignedAfterCallback() async {
  final result = await ReturnStruct7BytesInt4ByteAlignedResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-2, result);
}

typedef ReturnStruct8BytesIntType = Void Function(Int16, Int16, Int32);

// Global variable that stores the result.
final ReturnStruct8BytesIntResult = Completer<double>();

/// Return value in integer registers on many architectures.
void returnStruct8BytesInt(int a0, int a1, int a2) {
  print("returnStruct8BytesInt(${a0}, ${a1}, ${a2})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;

  print("result = $result");
  ReturnStruct8BytesIntResult.complete(result);
}

Future<void> returnStruct8BytesIntAfterCallback() async {
  final result = await ReturnStruct8BytesIntResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-2, result);
}

typedef ReturnStruct8BytesHomogeneousFloatType = Void Function(Float, Float);

// Global variable that stores the result.
final ReturnStruct8BytesHomogeneousFloatResult = Completer<double>();

/// Return value in FP registers on many architectures.
void returnStruct8BytesHomogeneousFloat(double a0, double a1) {
  print("returnStruct8BytesHomogeneousFloat(${a0}, ${a1})");

  double result = 0;

  result += a0;
  result += a1;

  print("result = $result");
  ReturnStruct8BytesHomogeneousFloatResult.complete(result);
}

Future<void> returnStruct8BytesHomogeneousFloatAfterCallback() async {
  final result = await ReturnStruct8BytesHomogeneousFloatResult.future;
  print("after callback result = $result");
  Expect.approxEquals(1, result);
}

typedef ReturnStruct8BytesMixedType = Void Function(Float, Int16, Int16);

// Global variable that stores the result.
final ReturnStruct8BytesMixedResult = Completer<double>();

/// Return value split over FP and integer register in x64.
void returnStruct8BytesMixed(double a0, int a1, int a2) {
  print("returnStruct8BytesMixed(${a0}, ${a1}, ${a2})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;

  print("result = $result");
  ReturnStruct8BytesMixedResult.complete(result);
}

Future<void> returnStruct8BytesMixedAfterCallback() async {
  final result = await ReturnStruct8BytesMixedResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-2, result);
}

typedef ReturnStruct9BytesHomogeneousUint8Type = Void Function(
    Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8, Uint8);

// Global variable that stores the result.
final ReturnStruct9BytesHomogeneousUint8Result = Completer<double>();

/// 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 returnStruct9BytesHomogeneousUint8(
    int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) {
  print(
      "returnStruct9BytesHomogeneousUint8(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;
  result += a4;
  result += a5;
  result += a6;
  result += a7;
  result += a8;

  print("result = $result");
  ReturnStruct9BytesHomogeneousUint8Result.complete(result);
}

Future<void> returnStruct9BytesHomogeneousUint8AfterCallback() async {
  final result = await ReturnStruct9BytesHomogeneousUint8Result.future;
  print("after callback result = $result");
  Expect.approxEquals(45, result);
}

typedef ReturnStruct9BytesInt4Or8ByteAlignedType = Void Function(Int64, Int8);

// Global variable that stores the result.
final ReturnStruct9BytesInt4Or8ByteAlignedResult = Completer<double>();

/// Return value in two integer registers on x64.
/// With alignment rules taken into account size is 12 or 16 bytes.
void returnStruct9BytesInt4Or8ByteAligned(int a0, int a1) {
  print("returnStruct9BytesInt4Or8ByteAligned(${a0}, ${a1})");

  double result = 0;

  result += a0;
  result += a1;

  print("result = $result");
  ReturnStruct9BytesInt4Or8ByteAlignedResult.complete(result);
}

Future<void> returnStruct9BytesInt4Or8ByteAlignedAfterCallback() async {
  final result = await ReturnStruct9BytesInt4Or8ByteAlignedResult.future;
  print("after callback result = $result");
  Expect.approxEquals(1, result);
}

typedef ReturnStruct12BytesHomogeneousFloatType = Void Function(
    Float, Float, Float);

// Global variable that stores the result.
final ReturnStruct12BytesHomogeneousFloatResult = Completer<double>();

/// Return value in FPU registers, but does not use all registers on arm hardfp
/// and arm64.
void returnStruct12BytesHomogeneousFloat(double a0, double a1, double a2) {
  print("returnStruct12BytesHomogeneousFloat(${a0}, ${a1}, ${a2})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;

  print("result = $result");
  ReturnStruct12BytesHomogeneousFloatResult.complete(result);
}

Future<void> returnStruct12BytesHomogeneousFloatAfterCallback() async {
  final result = await ReturnStruct12BytesHomogeneousFloatResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-2, result);
}

typedef ReturnStruct16BytesHomogeneousFloatType = Void Function(
    Float, Float, Float, Float);

// Global variable that stores the result.
final ReturnStruct16BytesHomogeneousFloatResult = Completer<double>();

/// Return value in FPU registers on arm hardfp and arm64.
void returnStruct16BytesHomogeneousFloat(
    double a0, double a1, double a2, double a3) {
  print("returnStruct16BytesHomogeneousFloat(${a0}, ${a1}, ${a2}, ${a3})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;

  print("result = $result");
  ReturnStruct16BytesHomogeneousFloatResult.complete(result);
}

Future<void> returnStruct16BytesHomogeneousFloatAfterCallback() async {
  final result = await ReturnStruct16BytesHomogeneousFloatResult.future;
  print("after callback result = $result");
  Expect.approxEquals(2, result);
}

typedef ReturnStruct16BytesMixedType = Void Function(Double, Int64);

// Global variable that stores the result.
final ReturnStruct16BytesMixedResult = Completer<double>();

/// Return value split over FP and integer register in x64.
void returnStruct16BytesMixed(double a0, int a1) {
  print("returnStruct16BytesMixed(${a0}, ${a1})");

  double result = 0;

  result += a0;
  result += a1;

  print("result = $result");
  ReturnStruct16BytesMixedResult.complete(result);
}

Future<void> returnStruct16BytesMixedAfterCallback() async {
  final result = await ReturnStruct16BytesMixedResult.future;
  print("after callback result = $result");
  Expect.approxEquals(1, result);
}

typedef ReturnStruct16BytesMixed2Type = Void Function(
    Float, Float, Float, Int32);

// Global variable that stores the result.
final ReturnStruct16BytesMixed2Result = Completer<double>();

/// Return value split over FP and integer register in x64.
/// The integer register contains half float half int.
void returnStruct16BytesMixed2(double a0, double a1, double a2, int a3) {
  print("returnStruct16BytesMixed2(${a0}, ${a1}, ${a2}, ${a3})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;

  print("result = $result");
  ReturnStruct16BytesMixed2Result.complete(result);
}

Future<void> returnStruct16BytesMixed2AfterCallback() async {
  final result = await ReturnStruct16BytesMixed2Result.future;
  print("after callback result = $result");
  Expect.approxEquals(2, result);
}

typedef ReturnStruct17BytesIntType = Void Function(Int64, Int64, Int8);

// Global variable that stores the result.
final ReturnStruct17BytesIntResult = Completer<double>();

/// Return 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 returnStruct17BytesInt(int a0, int a1, int a2) {
  print("returnStruct17BytesInt(${a0}, ${a1}, ${a2})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;

  print("result = $result");
  ReturnStruct17BytesIntResult.complete(result);
}

Future<void> returnStruct17BytesIntAfterCallback() async {
  final result = await ReturnStruct17BytesIntResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-2, result);
}

typedef ReturnStruct19BytesHomogeneousUint8Type = Void Function(
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8,
    Uint8);

// Global variable that stores the result.
final ReturnStruct19BytesHomogeneousUint8Result = Completer<double>();

/// 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 returnStruct19BytesHomogeneousUint8(
    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) {
  print(
      "returnStruct19BytesHomogeneousUint8(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8}, ${a9}, ${a10}, ${a11}, ${a12}, ${a13}, ${a14}, ${a15}, ${a16}, ${a17}, ${a18})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;
  result += a4;
  result += a5;
  result += a6;
  result += a7;
  result += a8;
  result += a9;
  result += a10;
  result += a11;
  result += a12;
  result += a13;
  result += a14;
  result += a15;
  result += a16;
  result += a17;
  result += a18;

  print("result = $result");
  ReturnStruct19BytesHomogeneousUint8Result.complete(result);
}

Future<void> returnStruct19BytesHomogeneousUint8AfterCallback() async {
  final result = await ReturnStruct19BytesHomogeneousUint8Result.future;
  print("after callback result = $result");
  Expect.approxEquals(190, result);
}

typedef ReturnStruct20BytesHomogeneousInt32Type = Void Function(
    Int32, Int32, Int32, Int32, Int32);

// Global variable that stores the result.
final ReturnStruct20BytesHomogeneousInt32Result = Completer<double>();

/// Return value too big to go in cpu registers on arm64.
void returnStruct20BytesHomogeneousInt32(
    int a0, int a1, int a2, int a3, int a4) {
  print(
      "returnStruct20BytesHomogeneousInt32(${a0}, ${a1}, ${a2}, ${a3}, ${a4})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;
  result += a4;

  print("result = $result");
  ReturnStruct20BytesHomogeneousInt32Result.complete(result);
}

Future<void> returnStruct20BytesHomogeneousInt32AfterCallback() async {
  final result = await ReturnStruct20BytesHomogeneousInt32Result.future;
  print("after callback result = $result");
  Expect.approxEquals(-3, result);
}

typedef ReturnStruct20BytesHomogeneousFloatType = Void Function(
    Float, Float, Float, Float, Float);

// Global variable that stores the result.
final ReturnStruct20BytesHomogeneousFloatResult = Completer<double>();

/// Return value too big to go in FPU registers on x64, arm hardfp and arm64.
void returnStruct20BytesHomogeneousFloat(
    double a0, double a1, double a2, double a3, double a4) {
  print(
      "returnStruct20BytesHomogeneousFloat(${a0}, ${a1}, ${a2}, ${a3}, ${a4})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;
  result += a4;

  print("result = $result");
  ReturnStruct20BytesHomogeneousFloatResult.complete(result);
}

Future<void> returnStruct20BytesHomogeneousFloatAfterCallback() async {
  final result = await ReturnStruct20BytesHomogeneousFloatResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-3, result);
}

typedef ReturnStruct32BytesHomogeneousDoubleType = Void Function(
    Double, Double, Double, Double);

// Global variable that stores the result.
final ReturnStruct32BytesHomogeneousDoubleResult = Completer<double>();

/// Return value in FPU registers on arm64.
void returnStruct32BytesHomogeneousDouble(
    double a0, double a1, double a2, double a3) {
  print("returnStruct32BytesHomogeneousDouble(${a0}, ${a1}, ${a2}, ${a3})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;

  print("result = $result");
  ReturnStruct32BytesHomogeneousDoubleResult.complete(result);
}

Future<void> returnStruct32BytesHomogeneousDoubleAfterCallback() async {
  final result = await ReturnStruct32BytesHomogeneousDoubleResult.future;
  print("after callback result = $result");
  Expect.approxEquals(2, result);
}

typedef ReturnStruct40BytesHomogeneousDoubleType = Void Function(
    Double, Double, Double, Double, Double);

// Global variable that stores the result.
final ReturnStruct40BytesHomogeneousDoubleResult = Completer<double>();

/// Return value too big to go in FPU registers on arm64.
void returnStruct40BytesHomogeneousDouble(
    double a0, double a1, double a2, double a3, double a4) {
  print(
      "returnStruct40BytesHomogeneousDouble(${a0}, ${a1}, ${a2}, ${a3}, ${a4})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;
  result += a4;

  print("result = $result");
  ReturnStruct40BytesHomogeneousDoubleResult.complete(result);
}

Future<void> returnStruct40BytesHomogeneousDoubleAfterCallback() async {
  final result = await ReturnStruct40BytesHomogeneousDoubleResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-3, result);
}

typedef ReturnStruct1024BytesHomogeneousUint64Type = Void 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);

// Global variable that stores the result.
final ReturnStruct1024BytesHomogeneousUint64Result = Completer<double>();

/// Test 1kb struct.
void returnStruct1024BytesHomogeneousUint64(
    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) {
  print(
      "returnStruct1024BytesHomogeneousUint64(${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})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;
  result += a4;
  result += a5;
  result += a6;
  result += a7;
  result += a8;
  result += a9;
  result += a10;
  result += a11;
  result += a12;
  result += a13;
  result += a14;
  result += a15;
  result += a16;
  result += a17;
  result += a18;
  result += a19;
  result += a20;
  result += a21;
  result += a22;
  result += a23;
  result += a24;
  result += a25;
  result += a26;
  result += a27;
  result += a28;
  result += a29;
  result += a30;
  result += a31;
  result += a32;
  result += a33;
  result += a34;
  result += a35;
  result += a36;
  result += a37;
  result += a38;
  result += a39;
  result += a40;
  result += a41;
  result += a42;
  result += a43;
  result += a44;
  result += a45;
  result += a46;
  result += a47;
  result += a48;
  result += a49;
  result += a50;
  result += a51;
  result += a52;
  result += a53;
  result += a54;
  result += a55;
  result += a56;
  result += a57;
  result += a58;
  result += a59;
  result += a60;
  result += a61;
  result += a62;
  result += a63;
  result += a64;
  result += a65;
  result += a66;
  result += a67;
  result += a68;
  result += a69;
  result += a70;
  result += a71;
  result += a72;
  result += a73;
  result += a74;
  result += a75;
  result += a76;
  result += a77;
  result += a78;
  result += a79;
  result += a80;
  result += a81;
  result += a82;
  result += a83;
  result += a84;
  result += a85;
  result += a86;
  result += a87;
  result += a88;
  result += a89;
  result += a90;
  result += a91;
  result += a92;
  result += a93;
  result += a94;
  result += a95;
  result += a96;
  result += a97;
  result += a98;
  result += a99;
  result += a100;
  result += a101;
  result += a102;
  result += a103;
  result += a104;
  result += a105;
  result += a106;
  result += a107;
  result += a108;
  result += a109;
  result += a110;
  result += a111;
  result += a112;
  result += a113;
  result += a114;
  result += a115;
  result += a116;
  result += a117;
  result += a118;
  result += a119;
  result += a120;
  result += a121;
  result += a122;
  result += a123;
  result += a124;
  result += a125;
  result += a126;
  result += a127;

  print("result = $result");
  ReturnStruct1024BytesHomogeneousUint64Result.complete(result);
}

Future<void> returnStruct1024BytesHomogeneousUint64AfterCallback() async {
  final result = await ReturnStruct1024BytesHomogeneousUint64Result.future;
  print("after callback result = $result");
  Expect.approxEquals(8256, result);
}

typedef ReturnStruct3BytesPackedIntType = Void Function(Int8, Int16);

// Global variable that stores the result.
final ReturnStruct3BytesPackedIntResult = Completer<double>();

/// Small struct with mis-aligned member.
void returnStruct3BytesPackedInt(int a0, int a1) {
  print("returnStruct3BytesPackedInt(${a0}, ${a1})");

  double result = 0;

  result += a0;
  result += a1;

  print("result = $result");
  ReturnStruct3BytesPackedIntResult.complete(result);
}

Future<void> returnStruct3BytesPackedIntAfterCallback() async {
  final result = await ReturnStruct3BytesPackedIntResult.future;
  print("after callback result = $result");
  Expect.approxEquals(1, result);
}

typedef ReturnStruct8BytesPackedIntType = Void Function(
    Uint8, Uint32, Uint8, Uint8, Uint8);

// Global variable that stores the result.
final ReturnStruct8BytesPackedIntResult = Completer<double>();

/// Struct with mis-aligned member.
void returnStruct8BytesPackedInt(int a0, int a1, int a2, int a3, int a4) {
  print("returnStruct8BytesPackedInt(${a0}, ${a1}, ${a2}, ${a3}, ${a4})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;
  result += a4;

  print("result = $result");
  ReturnStruct8BytesPackedIntResult.complete(result);
}

Future<void> returnStruct8BytesPackedIntAfterCallback() async {
  final result = await ReturnStruct8BytesPackedIntResult.future;
  print("after callback result = $result");
  Expect.approxEquals(15, result);
}

typedef ReturnStruct9BytesPackedMixedType = Void Function(Uint8, Double);

// Global variable that stores the result.
final ReturnStruct9BytesPackedMixedResult = Completer<double>();

/// Struct with mis-aligned member.
/// Tests backfilling of CPU and FPU registers.
void returnStruct9BytesPackedMixed(int a0, double a1) {
  print("returnStruct9BytesPackedMixed(${a0}, ${a1})");

  double result = 0;

  result += a0;
  result += a1;

  print("result = $result");
  ReturnStruct9BytesPackedMixedResult.complete(result);
}

Future<void> returnStruct9BytesPackedMixedAfterCallback() async {
  final result = await ReturnStruct9BytesPackedMixedResult.future;
  print("after callback result = $result");
  Expect.approxEquals(3, result);
}

typedef ReturnUnion4BytesMixedType = Void Function(Uint32);

// Global variable that stores the result.
final ReturnUnion4BytesMixedResult = Completer<double>();

/// Returning a mixed integer/float union.
void returnUnion4BytesMixed(int a0) {
  print("returnUnion4BytesMixed(${a0})");

  double result = 0;

  result += a0;

  print("result = $result");
  ReturnUnion4BytesMixedResult.complete(result);
}

Future<void> returnUnion4BytesMixedAfterCallback() async {
  final result = await ReturnUnion4BytesMixedResult.future;
  print("after callback result = $result");
  Expect.approxEquals(1, result);
}

typedef ReturnUnion8BytesNestedFloatType = Void Function(Double);

// Global variable that stores the result.
final ReturnUnion8BytesNestedFloatResult = Completer<double>();

/// Returning a floating point only union.
void returnUnion8BytesNestedFloat(double a0) {
  print("returnUnion8BytesNestedFloat(${a0})");

  double result = 0;

  result += a0;

  print("result = $result");
  ReturnUnion8BytesNestedFloatResult.complete(result);
}

Future<void> returnUnion8BytesNestedFloatAfterCallback() async {
  final result = await ReturnUnion8BytesNestedFloatResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-1, result);
}

typedef ReturnUnion9BytesNestedIntType = Void Function(Struct8BytesInt);

// Global variable that stores the result.
final ReturnUnion9BytesNestedIntResult = Completer<double>();

/// Returning a mixed-size union.
void returnUnion9BytesNestedInt(Struct8BytesInt a0) {
  print("returnUnion9BytesNestedInt(${a0})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;

  print("result = $result");
  ReturnUnion9BytesNestedIntResult.complete(result);
}

Future<void> returnUnion9BytesNestedIntAfterCallback() async {
  final result = await ReturnUnion9BytesNestedIntResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-2, result);
}

typedef ReturnUnion16BytesNestedFloatType = Void Function(
    Struct8BytesHomogeneousFloat);

// Global variable that stores the result.
final ReturnUnion16BytesNestedFloatResult = Completer<double>();

/// Returning union with homogenous floats.
void returnUnion16BytesNestedFloat(Struct8BytesHomogeneousFloat a0) {
  print("returnUnion16BytesNestedFloat(${a0})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;

  print("result = $result");
  ReturnUnion16BytesNestedFloatResult.complete(result);
}

Future<void> returnUnion16BytesNestedFloatAfterCallback() async {
  final result = await ReturnUnion16BytesNestedFloatResult.future;
  print("after callback result = $result");
  Expect.approxEquals(1, result);
}

typedef ReturnStructArgumentStruct1ByteIntType = Void Function(Struct1ByteInt);

// Global variable that stores the result.
final ReturnStructArgumentStruct1ByteIntResult = Completer<double>();

/// 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 returnStructArgumentStruct1ByteInt(Struct1ByteInt a0) {
  print("returnStructArgumentStruct1ByteInt(${a0})");

  double result = 0;

  result += a0.a0;

  print("result = $result");
  ReturnStructArgumentStruct1ByteIntResult.complete(result);
}

Future<void> returnStructArgumentStruct1ByteIntAfterCallback() async {
  final result = await ReturnStructArgumentStruct1ByteIntResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-1, result);
}

typedef ReturnStructArgumentInt32x8Struct1ByteIntType = Void Function(
    Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Struct1ByteInt);

// Global variable that stores the result.
final ReturnStructArgumentInt32x8Struct1ByteIntResult = Completer<double>();

/// Test that a struct passed in as argument can be returned.
/// Especially for ffi callbacks.
/// Struct is passed on stack on all ABIs.
void returnStructArgumentInt32x8Struct1ByteInt(int a0, int a1, int a2, int a3,
    int a4, int a5, int a6, int a7, Struct1ByteInt a8) {
  print(
      "returnStructArgumentInt32x8Struct1ByteInt(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;
  result += a4;
  result += a5;
  result += a6;
  result += a7;
  result += a8.a0;

  print("result = $result");
  ReturnStructArgumentInt32x8Struct1ByteIntResult.complete(result);
}

Future<void> returnStructArgumentInt32x8Struct1ByteIntAfterCallback() async {
  final result = await ReturnStructArgumentInt32x8Struct1ByteIntResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-5, result);
}

typedef ReturnStructArgumentStruct8BytesHomogeneousFloatType = Void Function(
    Struct8BytesHomogeneousFloat);

// Global variable that stores the result.
final ReturnStructArgumentStruct8BytesHomogeneousFloatResult =
    Completer<double>();

/// 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 returnStructArgumentStruct8BytesHomogeneousFloat(
    Struct8BytesHomogeneousFloat a0) {
  print("returnStructArgumentStruct8BytesHomogeneousFloat(${a0})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;

  print("result = $result");
  ReturnStructArgumentStruct8BytesHomogeneousFloatResult.complete(result);
}

Future<void>
    returnStructArgumentStruct8BytesHomogeneousFloatAfterCallback() async {
  final result =
      await ReturnStructArgumentStruct8BytesHomogeneousFloatResult.future;
  print("after callback result = $result");
  Expect.approxEquals(1, result);
}

typedef ReturnStructArgumentStruct20BytesHomogeneousInt32Type = Void Function(
    Struct20BytesHomogeneousInt32);

// Global variable that stores the result.
final ReturnStructArgumentStruct20BytesHomogeneousInt32Result =
    Completer<double>();

/// On arm64, both argument and return value are passed in by pointer.
void returnStructArgumentStruct20BytesHomogeneousInt32(
    Struct20BytesHomogeneousInt32 a0) {
  print("returnStructArgumentStruct20BytesHomogeneousInt32(${a0})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a0.a3;
  result += a0.a4;

  print("result = $result");
  ReturnStructArgumentStruct20BytesHomogeneousInt32Result.complete(result);
}

Future<void>
    returnStructArgumentStruct20BytesHomogeneousInt32AfterCallback() async {
  final result =
      await ReturnStructArgumentStruct20BytesHomogeneousInt32Result.future;
  print("after callback result = $result");
  Expect.approxEquals(-3, result);
}

typedef ReturnStructArgumentInt32x8Struct20BytesHomogeneouType = Void Function(
    Int32,
    Int32,
    Int32,
    Int32,
    Int32,
    Int32,
    Int32,
    Int32,
    Struct20BytesHomogeneousInt32);

// Global variable that stores the result.
final ReturnStructArgumentInt32x8Struct20BytesHomogeneouResult =
    Completer<double>();

/// On arm64, both argument and return value are passed in by pointer.
/// Ints exhaust registers, so that pointer is passed on stack.
void returnStructArgumentInt32x8Struct20BytesHomogeneou(int a0, int a1, int a2,
    int a3, int a4, int a5, int a6, int a7, Struct20BytesHomogeneousInt32 a8) {
  print(
      "returnStructArgumentInt32x8Struct20BytesHomogeneou(${a0}, ${a1}, ${a2}, ${a3}, ${a4}, ${a5}, ${a6}, ${a7}, ${a8})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;
  result += a3;
  result += a4;
  result += a5;
  result += a6;
  result += a7;
  result += a8.a0;
  result += a8.a1;
  result += a8.a2;
  result += a8.a3;
  result += a8.a4;

  print("result = $result");
  ReturnStructArgumentInt32x8Struct20BytesHomogeneouResult.complete(result);
}

Future<void>
    returnStructArgumentInt32x8Struct20BytesHomogeneouAfterCallback() async {
  final result =
      await ReturnStructArgumentInt32x8Struct20BytesHomogeneouResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-7, result);
}

typedef ReturnStructArgumentStruct8BytesInlineArrayIntType = Void Function(
    Struct8BytesInlineArrayInt);

// Global variable that stores the result.
final ReturnStructArgumentStruct8BytesInlineArrayIntResult =
    Completer<double>();

/// Test returning struct with inline array.
void returnStructArgumentStruct8BytesInlineArrayInt(
    Struct8BytesInlineArrayInt a0) {
  print("returnStructArgumentStruct8BytesInlineArrayInt(${a0})");

  double result = 0;

  result += a0.a0[0];
  result += a0.a0[1];
  result += a0.a0[2];
  result += a0.a0[3];
  result += a0.a0[4];
  result += a0.a0[5];
  result += a0.a0[6];
  result += a0.a0[7];

  print("result = $result");
  ReturnStructArgumentStruct8BytesInlineArrayIntResult.complete(result);
}

Future<void>
    returnStructArgumentStruct8BytesInlineArrayIntAfterCallback() async {
  final result =
      await ReturnStructArgumentStruct8BytesInlineArrayIntResult.future;
  print("after callback result = $result");
  Expect.approxEquals(36, result);
}

typedef ReturnStructArgumentStructStruct16BytesHomogeneousType = Void Function(
    StructStruct16BytesHomogeneousFloat2);

// Global variable that stores the result.
final ReturnStructArgumentStructStruct16BytesHomogeneousResult =
    Completer<double>();

/// Return value in FPU registers on arm hardfp and arm64.
void returnStructArgumentStructStruct16BytesHomogeneous(
    StructStruct16BytesHomogeneousFloat2 a0) {
  print("returnStructArgumentStructStruct16BytesHomogeneous(${a0})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a1[0].a0;
  result += a0.a1[1].a0;
  result += a0.a2;

  print("result = $result");
  ReturnStructArgumentStructStruct16BytesHomogeneousResult.complete(result);
}

Future<void>
    returnStructArgumentStructStruct16BytesHomogeneousAfterCallback() async {
  final result =
      await ReturnStructArgumentStructStruct16BytesHomogeneousResult.future;
  print("after callback result = $result");
  Expect.approxEquals(2, result);
}

typedef ReturnStructArgumentStructStruct32BytesHomogeneousType = Void Function(
    StructStruct32BytesHomogeneousDouble2);

// Global variable that stores the result.
final ReturnStructArgumentStructStruct32BytesHomogeneousResult =
    Completer<double>();

/// Return value in FPU registers on arm64.
void returnStructArgumentStructStruct32BytesHomogeneous(
    StructStruct32BytesHomogeneousDouble2 a0) {
  print("returnStructArgumentStructStruct32BytesHomogeneous(${a0})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a1[0].a0;
  result += a0.a1[1].a0;
  result += a0.a2;

  print("result = $result");
  ReturnStructArgumentStructStruct32BytesHomogeneousResult.complete(result);
}

Future<void>
    returnStructArgumentStructStruct32BytesHomogeneousAfterCallback() async {
  final result =
      await ReturnStructArgumentStructStruct32BytesHomogeneousResult.future;
  print("after callback result = $result");
  Expect.approxEquals(2, result);
}

typedef ReturnStructArgumentStructStruct16BytesMixed3Type = Void Function(
    StructStruct16BytesMixed3);

// Global variable that stores the result.
final ReturnStructArgumentStructStruct16BytesMixed3Result = Completer<double>();

/// On x64 Linux, return value is split over FP and int registers.
void returnStructArgumentStructStruct16BytesMixed3(
    StructStruct16BytesMixed3 a0) {
  print("returnStructArgumentStructStruct16BytesMixed3(${a0})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a1[0].a0;
  result += a0.a1[0].a1;
  result += a0.a1[0].a2;
  result += a0.a2[0];
  result += a0.a2[1];

  print("result = $result");
  ReturnStructArgumentStructStruct16BytesMixed3Result.complete(result);
}

Future<void>
    returnStructArgumentStructStruct16BytesMixed3AfterCallback() async {
  final result =
      await ReturnStructArgumentStructStruct16BytesMixed3Result.future;
  print("after callback result = $result");
  Expect.approxEquals(3, result);
}

typedef ReturnStructAlignmentInt16Type = Void Function(Int8, Int16, Int8);

// Global variable that stores the result.
final ReturnStructAlignmentInt16Result = Completer<double>();

/// Test alignment and padding of 16 byte int within struct.
void returnStructAlignmentInt16(int a0, int a1, int a2) {
  print("returnStructAlignmentInt16(${a0}, ${a1}, ${a2})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;

  print("result = $result");
  ReturnStructAlignmentInt16Result.complete(result);
}

Future<void> returnStructAlignmentInt16AfterCallback() async {
  final result = await ReturnStructAlignmentInt16Result.future;
  print("after callback result = $result");
  Expect.approxEquals(-2, result);
}

typedef ReturnStructAlignmentInt32Type = Void Function(Int8, Int32, Int8);

// Global variable that stores the result.
final ReturnStructAlignmentInt32Result = Completer<double>();

/// Test alignment and padding of 32 byte int within struct.
void returnStructAlignmentInt32(int a0, int a1, int a2) {
  print("returnStructAlignmentInt32(${a0}, ${a1}, ${a2})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;

  print("result = $result");
  ReturnStructAlignmentInt32Result.complete(result);
}

Future<void> returnStructAlignmentInt32AfterCallback() async {
  final result = await ReturnStructAlignmentInt32Result.future;
  print("after callback result = $result");
  Expect.approxEquals(-2, result);
}

typedef ReturnStructAlignmentInt64Type = Void Function(Int8, Int64, Int8);

// Global variable that stores the result.
final ReturnStructAlignmentInt64Result = Completer<double>();

/// Test alignment and padding of 64 byte int within struct.
void returnStructAlignmentInt64(int a0, int a1, int a2) {
  print("returnStructAlignmentInt64(${a0}, ${a1}, ${a2})");

  double result = 0;

  result += a0;
  result += a1;
  result += a2;

  print("result = $result");
  ReturnStructAlignmentInt64Result.complete(result);
}

Future<void> returnStructAlignmentInt64AfterCallback() async {
  final result = await ReturnStructAlignmentInt64Result.future;
  print("after callback result = $result");
  Expect.approxEquals(-2, result);
}

typedef ReturnStruct8BytesNestedIntType = Void Function(
    Struct4BytesHomogeneousInt16, Struct4BytesHomogeneousInt16);

// Global variable that stores the result.
final ReturnStruct8BytesNestedIntResult = Completer<double>();

/// Simple nested struct.
void returnStruct8BytesNestedInt(
    Struct4BytesHomogeneousInt16 a0, Struct4BytesHomogeneousInt16 a1) {
  print("returnStruct8BytesNestedInt(${a0}, ${a1})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a1.a0;
  result += a1.a1;

  print("result = $result");
  ReturnStruct8BytesNestedIntResult.complete(result);
}

Future<void> returnStruct8BytesNestedIntAfterCallback() async {
  final result = await ReturnStruct8BytesNestedIntResult.future;
  print("after callback result = $result");
  Expect.approxEquals(2, result);
}

typedef ReturnStruct8BytesNestedFloatType = Void Function(
    Struct4BytesFloat, Struct4BytesFloat);

// Global variable that stores the result.
final ReturnStruct8BytesNestedFloatResult = Completer<double>();

/// Simple nested struct with floats.
void returnStruct8BytesNestedFloat(Struct4BytesFloat a0, Struct4BytesFloat a1) {
  print("returnStruct8BytesNestedFloat(${a0}, ${a1})");

  double result = 0;

  result += a0.a0;
  result += a1.a0;

  print("result = $result");
  ReturnStruct8BytesNestedFloatResult.complete(result);
}

Future<void> returnStruct8BytesNestedFloatAfterCallback() async {
  final result = await ReturnStruct8BytesNestedFloatResult.future;
  print("after callback result = $result");
  Expect.approxEquals(1, result);
}

typedef ReturnStruct8BytesNestedFloat2Type = Void Function(
    Struct4BytesFloat, Float);

// Global variable that stores the result.
final ReturnStruct8BytesNestedFloat2Result = Completer<double>();

/// The nesting is irregular, testing homogenous float rules on arm and arm64,
/// and the fpu register usage on x64.
void returnStruct8BytesNestedFloat2(Struct4BytesFloat a0, double a1) {
  print("returnStruct8BytesNestedFloat2(${a0}, ${a1})");

  double result = 0;

  result += a0.a0;
  result += a1;

  print("result = $result");
  ReturnStruct8BytesNestedFloat2Result.complete(result);
}

Future<void> returnStruct8BytesNestedFloat2AfterCallback() async {
  final result = await ReturnStruct8BytesNestedFloat2Result.future;
  print("after callback result = $result");
  Expect.approxEquals(1, result);
}

typedef ReturnStruct8BytesNestedMixedType = Void Function(
    Struct4BytesHomogeneousInt16, Struct4BytesFloat);

// Global variable that stores the result.
final ReturnStruct8BytesNestedMixedResult = Completer<double>();

/// Simple nested struct with mixed members.
void returnStruct8BytesNestedMixed(
    Struct4BytesHomogeneousInt16 a0, Struct4BytesFloat a1) {
  print("returnStruct8BytesNestedMixed(${a0}, ${a1})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a1.a0;

  print("result = $result");
  ReturnStruct8BytesNestedMixedResult.complete(result);
}

Future<void> returnStruct8BytesNestedMixedAfterCallback() async {
  final result = await ReturnStruct8BytesNestedMixedResult.future;
  print("after callback result = $result");
  Expect.approxEquals(-2, result);
}

typedef ReturnStruct16BytesNestedIntType = Void Function(
    Struct8BytesNestedInt, Struct8BytesNestedInt);

// Global variable that stores the result.
final ReturnStruct16BytesNestedIntResult = Completer<double>();

/// Deeper nested struct to test recursive member access.
void returnStruct16BytesNestedInt(
    Struct8BytesNestedInt a0, Struct8BytesNestedInt a1) {
  print("returnStruct16BytesNestedInt(${a0}, ${a1})");

  double result = 0;

  result += a0.a0.a0;
  result += a0.a0.a1;
  result += a0.a1.a0;
  result += a0.a1.a1;
  result += a1.a0.a0;
  result += a1.a0.a1;
  result += a1.a1.a0;
  result += a1.a1.a1;

  print("result = $result");
  ReturnStruct16BytesNestedIntResult.complete(result);
}

Future<void> returnStruct16BytesNestedIntAfterCallback() async {
  final result = await ReturnStruct16BytesNestedIntResult.future;
  print("after callback result = $result");
  Expect.approxEquals(4, result);
}

typedef ReturnStruct32BytesNestedIntType = Void Function(
    Struct16BytesNestedInt, Struct16BytesNestedInt);

// Global variable that stores the result.
final ReturnStruct32BytesNestedIntResult = Completer<double>();

/// Even deeper nested struct to test recursive member access.
void returnStruct32BytesNestedInt(
    Struct16BytesNestedInt a0, Struct16BytesNestedInt a1) {
  print("returnStruct32BytesNestedInt(${a0}, ${a1})");

  double result = 0;

  result += a0.a0.a0.a0;
  result += a0.a0.a0.a1;
  result += a0.a0.a1.a0;
  result += a0.a0.a1.a1;
  result += a0.a1.a0.a0;
  result += a0.a1.a0.a1;
  result += a0.a1.a1.a0;
  result += a0.a1.a1.a1;
  result += a1.a0.a0.a0;
  result += a1.a0.a0.a1;
  result += a1.a0.a1.a0;
  result += a1.a0.a1.a1;
  result += a1.a1.a0.a0;
  result += a1.a1.a0.a1;
  result += a1.a1.a1.a0;
  result += a1.a1.a1.a1;

  print("result = $result");
  ReturnStruct32BytesNestedIntResult.complete(result);
}

Future<void> returnStruct32BytesNestedIntAfterCallback() async {
  final result = await ReturnStruct32BytesNestedIntResult.future;
  print("after callback result = $result");
  Expect.approxEquals(8, result);
}

typedef ReturnStructNestedIntStructAlignmentInt16Type = Void Function(
    StructAlignmentInt16, StructAlignmentInt16);

// Global variable that stores the result.
final ReturnStructNestedIntStructAlignmentInt16Result = Completer<double>();

/// Test alignment and padding of nested struct with 16 byte int.
void returnStructNestedIntStructAlignmentInt16(
    StructAlignmentInt16 a0, StructAlignmentInt16 a1) {
  print("returnStructNestedIntStructAlignmentInt16(${a0}, ${a1})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;

  print("result = $result");
  ReturnStructNestedIntStructAlignmentInt16Result.complete(result);
}

Future<void> returnStructNestedIntStructAlignmentInt16AfterCallback() async {
  final result = await ReturnStructNestedIntStructAlignmentInt16Result.future;
  print("after callback result = $result");
  Expect.approxEquals(3, result);
}

typedef ReturnStructNestedIntStructAlignmentInt32Type = Void Function(
    StructAlignmentInt32, StructAlignmentInt32);

// Global variable that stores the result.
final ReturnStructNestedIntStructAlignmentInt32Result = Completer<double>();

/// Test alignment and padding of nested struct with 32 byte int.
void returnStructNestedIntStructAlignmentInt32(
    StructAlignmentInt32 a0, StructAlignmentInt32 a1) {
  print("returnStructNestedIntStructAlignmentInt32(${a0}, ${a1})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;

  print("result = $result");
  ReturnStructNestedIntStructAlignmentInt32Result.complete(result);
}

Future<void> returnStructNestedIntStructAlignmentInt32AfterCallback() async {
  final result = await ReturnStructNestedIntStructAlignmentInt32Result.future;
  print("after callback result = $result");
  Expect.approxEquals(3, result);
}

typedef ReturnStructNestedIntStructAlignmentInt64Type = Void Function(
    StructAlignmentInt64, StructAlignmentInt64);

// Global variable that stores the result.
final ReturnStructNestedIntStructAlignmentInt64Result = Completer<double>();

/// Test alignment and padding of nested struct with 64 byte int.
void returnStructNestedIntStructAlignmentInt64(
    StructAlignmentInt64 a0, StructAlignmentInt64 a1) {
  print("returnStructNestedIntStructAlignmentInt64(${a0}, ${a1})");

  double result = 0;

  result += a0.a0;
  result += a0.a1;
  result += a0.a2;
  result += a1.a0;
  result += a1.a1;
  result += a1.a2;

  print("result = $result");
  ReturnStructNestedIntStructAlignmentInt64Result.complete(result);
}

Future<void> returnStructNestedIntStructAlignmentInt64AfterCallback() async {
  final result = await ReturnStructNestedIntStructAlignmentInt64Result.future;
  print("after callback result = $result");
  Expect.approxEquals(3, result);
}

typedef ReturnStructNestedIrregularEvenBiggerType = Void Function(
    Uint64, StructNestedIrregularBigger, StructNestedIrregularBigger, Double);

// Global variable that stores the result.
final ReturnStructNestedIrregularEvenBiggerResult = Completer<double>();

/// Return big irregular struct as smoke test.
void returnStructNestedIrregularEvenBigger(int a0,
    StructNestedIrregularBigger a1, StructNestedIrregularBigger a2, double a3) {
  print("returnStructNestedIrregularEvenBigger(${a0}, ${a1}, ${a2}, ${a3})");

  double result = 0;

  result += a0;
  result += a1.a0.a0;
  result += a1.a0.a1.a0.a0;
  result += a1.a0.a1.a0.a1;
  result += a1.a0.a1.a1.a0;
  result += a1.a0.a2;
  result += a1.a0.a3.a0.a0;
  result += a1.a0.a3.a1;
  result += a1.a0.a4;
  result += a1.a0.a5.a0.a0;
  result += a1.a0.a5.a1.a0;
  result += a1.a0.a6;
  result += a1.a1.a0.a0;
  result += a1.a1.a0.a1;
  result += a1.a1.a1.a0;
  result += a1.a2;
  result += a1.a3;
  result += a2.a0.a0;
  result += a2.a0.a1.a0.a0;
  result += a2.a0.a1.a0.a1;
  result += a2.a0.a1.a1.a0;
  result += a2.a0.a2;
  result += a2.a0.a3.a0.a0;
  result += a2.a0.a3.a1;
  result += a2.a0.a4;
  result += a2.a0.a5.a0.a0;
  result += a2.a0.a5.a1.a0;
  result += a2.a0.a6;
  result += a2.a1.a0.a0;
  result += a2.a1.a0.a1;
  result += a2.a1.a1.a0;
  result += a2.a2;
  result += a2.a3;
  result += a3;

  print("result = $result");
  ReturnStructNestedIrregularEvenBiggerResult.complete(result);
}

Future<void> returnStructNestedIrregularEvenBiggerAfterCallback() async {
  final result = await ReturnStructNestedIrregularEvenBiggerResult.future;
  print("after callback result = $result");
  Expect.approxEquals(87, result);
}
