// 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";

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);
}
