blob: e0ee4178bb88a3ff7f325bba5bd2309dc513b32d [file] [log] [blame]
// 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=90
// VMOptions=--use-slow-path
// VMOptions=--use-slow-path --stacktrace-every=100
import 'dart:ffi';
import "package:expect/expect.dart";
import "package:ffi/ffi.dart";
import 'dylib_utils.dart';
// Reuse the compound classes.
import 'function_structs_by_value_generated_compounds.dart';
final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
void main() {
// Force dlopen so @Native lookups in DynamicLibrary.process() succeed.
dlopenGlobalPlatformSpecific('ffi_test_functions');
for (int i = 0; i < 100; ++i) {
testReturnStruct1ByteIntNative();
testReturnStruct3BytesHomogeneousUint8Native();
testReturnStruct3BytesInt2ByteAlignedNative();
testReturnStruct4BytesHomogeneousInt16Native();
testReturnStruct7BytesHomogeneousUint8Native();
testReturnStruct7BytesInt4ByteAlignedNative();
testReturnStruct8BytesIntNative();
testReturnStruct8BytesHomogeneousFloatNative();
testReturnStruct8BytesMixedNative();
testReturnStruct9BytesHomogeneousUint8Native();
testReturnStruct9BytesInt4Or8ByteAlignedNative();
testReturnStruct12BytesHomogeneousFloatNative();
testReturnStruct16BytesHomogeneousFloatNative();
testReturnStruct16BytesMixedNative();
testReturnStruct16BytesMixed2Native();
testReturnStruct17BytesIntNative();
testReturnStruct19BytesHomogeneousUint8Native();
testReturnStruct20BytesHomogeneousInt32Native();
testReturnStruct20BytesHomogeneousFloatNative();
testReturnStruct32BytesHomogeneousDoubleNative();
testReturnStruct40BytesHomogeneousDoubleNative();
testReturnStruct1024BytesHomogeneousUint64Native();
testReturnStruct3BytesPackedIntNative();
testReturnStruct8BytesPackedIntNative();
testReturnStruct9BytesPackedMixedNative();
testReturnUnion4BytesMixedNative();
testReturnUnion8BytesNestedFloatNative();
testReturnUnion9BytesNestedIntNative();
testReturnUnion16BytesNestedFloatNative();
}
}
@Native<Struct1ByteInt Function(Int8)>(symbol: 'ReturnStruct1ByteInt')
external Struct1ByteInt returnStruct1ByteIntNative(int a0);
/// Smallest struct with data.
void testReturnStruct1ByteIntNative() {
int a0;
a0 = -1;
final result = returnStruct1ByteIntNative(a0);
print("result = $result");
Expect.equals(a0, result.a0);
}
@Native<Struct3BytesHomogeneousUint8 Function(Uint8, Uint8, Uint8)>(
symbol: 'ReturnStruct3BytesHomogeneousUint8')
external Struct3BytesHomogeneousUint8 returnStruct3BytesHomogeneousUint8Native(
int a0, int a1, int a2);
/// Smaller than word size return value on all architectures.
void testReturnStruct3BytesHomogeneousUint8Native() {
int a0;
int a1;
int a2;
a0 = 1;
a1 = 2;
a2 = 3;
final result = returnStruct3BytesHomogeneousUint8Native(a0, a1, a2);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.equals(a1, result.a1);
Expect.equals(a2, result.a2);
}
@Native<Struct3BytesInt2ByteAligned Function(Int16, Int8)>(
symbol: 'ReturnStruct3BytesInt2ByteAligned')
external Struct3BytesInt2ByteAligned returnStruct3BytesInt2ByteAlignedNative(
int a0, int a1);
/// Smaller than word size return value on all architectures.
/// With alignment rules taken into account size is 4 bytes.
void testReturnStruct3BytesInt2ByteAlignedNative() {
int a0;
int a1;
a0 = -1;
a1 = 2;
final result = returnStruct3BytesInt2ByteAlignedNative(a0, a1);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.equals(a1, result.a1);
}
@Native<Struct4BytesHomogeneousInt16 Function(Int16, Int16)>(
symbol: 'ReturnStruct4BytesHomogeneousInt16')
external Struct4BytesHomogeneousInt16 returnStruct4BytesHomogeneousInt16Native(
int a0, int a1);
/// Word size return value on 32 bit architectures..
void testReturnStruct4BytesHomogeneousInt16Native() {
int a0;
int a1;
a0 = -1;
a1 = 2;
final result = returnStruct4BytesHomogeneousInt16Native(a0, a1);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.equals(a1, result.a1);
}
@Native<
Struct7BytesHomogeneousUint8 Function(Uint8, Uint8, Uint8, Uint8, Uint8,
Uint8, Uint8)>(symbol: 'ReturnStruct7BytesHomogeneousUint8')
external Struct7BytesHomogeneousUint8 returnStruct7BytesHomogeneousUint8Native(
int a0, int a1, int a2, int a3, int a4, int a5, int a6);
/// Non-wordsize return value.
void testReturnStruct7BytesHomogeneousUint8Native() {
int a0;
int a1;
int a2;
int a3;
int a4;
int a5;
int a6;
a0 = 1;
a1 = 2;
a2 = 3;
a3 = 4;
a4 = 5;
a5 = 6;
a6 = 7;
final result =
returnStruct7BytesHomogeneousUint8Native(a0, a1, a2, a3, a4, a5, a6);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.equals(a1, result.a1);
Expect.equals(a2, result.a2);
Expect.equals(a3, result.a3);
Expect.equals(a4, result.a4);
Expect.equals(a5, result.a5);
Expect.equals(a6, result.a6);
}
@Native<Struct7BytesInt4ByteAligned Function(Int32, Int16, Int8)>(
symbol: 'ReturnStruct7BytesInt4ByteAligned')
external Struct7BytesInt4ByteAligned returnStruct7BytesInt4ByteAlignedNative(
int a0, int a1, int a2);
/// Non-wordsize return value.
/// With alignment rules taken into account size is 8 bytes.
void testReturnStruct7BytesInt4ByteAlignedNative() {
int a0;
int a1;
int a2;
a0 = -1;
a1 = 2;
a2 = -3;
final result = returnStruct7BytesInt4ByteAlignedNative(a0, a1, a2);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.equals(a1, result.a1);
Expect.equals(a2, result.a2);
}
@Native<Struct8BytesInt Function(Int16, Int16, Int32)>(
symbol: 'ReturnStruct8BytesInt')
external Struct8BytesInt returnStruct8BytesIntNative(int a0, int a1, int a2);
/// Return value in integer registers on many architectures.
void testReturnStruct8BytesIntNative() {
int a0;
int a1;
int a2;
a0 = -1;
a1 = 2;
a2 = -3;
final result = returnStruct8BytesIntNative(a0, a1, a2);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.equals(a1, result.a1);
Expect.equals(a2, result.a2);
}
@Native<Struct8BytesHomogeneousFloat Function(Float, Float)>(
symbol: 'ReturnStruct8BytesHomogeneousFloat')
external Struct8BytesHomogeneousFloat returnStruct8BytesHomogeneousFloatNative(
double a0, double a1);
/// Return value in FP registers on many architectures.
void testReturnStruct8BytesHomogeneousFloatNative() {
double a0;
double a1;
a0 = -1.0;
a1 = 2.0;
final result = returnStruct8BytesHomogeneousFloatNative(a0, a1);
print("result = $result");
Expect.approxEquals(a0, result.a0);
Expect.approxEquals(a1, result.a1);
}
@Native<Struct8BytesMixed Function(Float, Int16, Int16)>(
symbol: 'ReturnStruct8BytesMixed')
external Struct8BytesMixed returnStruct8BytesMixedNative(
double a0, int a1, int a2);
/// Return value split over FP and integer register in x64.
void testReturnStruct8BytesMixedNative() {
double a0;
int a1;
int a2;
a0 = -1.0;
a1 = 2;
a2 = -3;
final result = returnStruct8BytesMixedNative(a0, a1, a2);
print("result = $result");
Expect.approxEquals(a0, result.a0);
Expect.equals(a1, result.a1);
Expect.equals(a2, result.a2);
}
@Native<
Struct9BytesHomogeneousUint8 Function(
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8)>(symbol: 'ReturnStruct9BytesHomogeneousUint8')
external Struct9BytesHomogeneousUint8 returnStruct9BytesHomogeneousUint8Native(
int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8);
/// 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 testReturnStruct9BytesHomogeneousUint8Native() {
int a0;
int a1;
int a2;
int a3;
int a4;
int a5;
int a6;
int a7;
int a8;
a0 = 1;
a1 = 2;
a2 = 3;
a3 = 4;
a4 = 5;
a5 = 6;
a6 = 7;
a7 = 8;
a8 = 9;
final result = returnStruct9BytesHomogeneousUint8Native(
a0, a1, a2, a3, a4, a5, a6, a7, a8);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.equals(a1, result.a1);
Expect.equals(a2, result.a2);
Expect.equals(a3, result.a3);
Expect.equals(a4, result.a4);
Expect.equals(a5, result.a5);
Expect.equals(a6, result.a6);
Expect.equals(a7, result.a7);
Expect.equals(a8, result.a8);
}
@Native<Struct9BytesInt4Or8ByteAligned Function(Int64, Int8)>(
symbol: 'ReturnStruct9BytesInt4Or8ByteAligned')
external Struct9BytesInt4Or8ByteAligned
returnStruct9BytesInt4Or8ByteAlignedNative(int a0, int a1);
/// Return value in two integer registers on x64.
/// With alignment rules taken into account size is 12 or 16 bytes.
void testReturnStruct9BytesInt4Or8ByteAlignedNative() {
int a0;
int a1;
a0 = -1;
a1 = 2;
final result = returnStruct9BytesInt4Or8ByteAlignedNative(a0, a1);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.equals(a1, result.a1);
}
@Native<Struct12BytesHomogeneousFloat Function(Float, Float, Float)>(
symbol: 'ReturnStruct12BytesHomogeneousFloat')
external Struct12BytesHomogeneousFloat
returnStruct12BytesHomogeneousFloatNative(double a0, double a1, double a2);
/// Return value in FPU registers, but does not use all registers on arm hardfp
/// and arm64.
void testReturnStruct12BytesHomogeneousFloatNative() {
double a0;
double a1;
double a2;
a0 = -1.0;
a1 = 2.0;
a2 = -3.0;
final result = returnStruct12BytesHomogeneousFloatNative(a0, a1, a2);
print("result = $result");
Expect.approxEquals(a0, result.a0);
Expect.approxEquals(a1, result.a1);
Expect.approxEquals(a2, result.a2);
}
@Native<Struct16BytesHomogeneousFloat Function(Float, Float, Float, Float)>(
symbol: 'ReturnStruct16BytesHomogeneousFloat')
external Struct16BytesHomogeneousFloat
returnStruct16BytesHomogeneousFloatNative(
double a0, double a1, double a2, double a3);
/// Return value in FPU registers on arm hardfp and arm64.
void testReturnStruct16BytesHomogeneousFloatNative() {
double a0;
double a1;
double a2;
double a3;
a0 = -1.0;
a1 = 2.0;
a2 = -3.0;
a3 = 4.0;
final result = returnStruct16BytesHomogeneousFloatNative(a0, a1, a2, a3);
print("result = $result");
Expect.approxEquals(a0, result.a0);
Expect.approxEquals(a1, result.a1);
Expect.approxEquals(a2, result.a2);
Expect.approxEquals(a3, result.a3);
}
@Native<Struct16BytesMixed Function(Double, Int64)>(
symbol: 'ReturnStruct16BytesMixed')
external Struct16BytesMixed returnStruct16BytesMixedNative(double a0, int a1);
/// Return value split over FP and integer register in x64.
void testReturnStruct16BytesMixedNative() {
double a0;
int a1;
a0 = -1.0;
a1 = 2;
final result = returnStruct16BytesMixedNative(a0, a1);
print("result = $result");
Expect.approxEquals(a0, result.a0);
Expect.equals(a1, result.a1);
}
@Native<Struct16BytesMixed2 Function(Float, Float, Float, Int32)>(
symbol: 'ReturnStruct16BytesMixed2')
external Struct16BytesMixed2 returnStruct16BytesMixed2Native(
double a0, double a1, double a2, int a3);
/// Return value split over FP and integer register in x64.
/// The integer register contains half float half int.
void testReturnStruct16BytesMixed2Native() {
double a0;
double a1;
double a2;
int a3;
a0 = -1.0;
a1 = 2.0;
a2 = -3.0;
a3 = 4;
final result = returnStruct16BytesMixed2Native(a0, a1, a2, a3);
print("result = $result");
Expect.approxEquals(a0, result.a0);
Expect.approxEquals(a1, result.a1);
Expect.approxEquals(a2, result.a2);
Expect.equals(a3, result.a3);
}
@Native<Struct17BytesInt Function(Int64, Int64, Int8)>(
symbol: 'ReturnStruct17BytesInt')
external Struct17BytesInt returnStruct17BytesIntNative(int a0, int a1, int a2);
/// 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 testReturnStruct17BytesIntNative() {
int a0;
int a1;
int a2;
a0 = -1;
a1 = 2;
a2 = -3;
final result = returnStruct17BytesIntNative(a0, a1, a2);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.equals(a1, result.a1);
Expect.equals(a2, result.a2);
}
@Native<
Struct19BytesHomogeneousUint8 Function(
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8,
Uint8)>(symbol: 'ReturnStruct19BytesHomogeneousUint8')
external Struct19BytesHomogeneousUint8
returnStruct19BytesHomogeneousUint8Native(
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);
/// 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 testReturnStruct19BytesHomogeneousUint8Native() {
int a0;
int a1;
int a2;
int a3;
int a4;
int a5;
int a6;
int a7;
int a8;
int a9;
int a10;
int a11;
int a12;
int a13;
int a14;
int a15;
int a16;
int a17;
int a18;
a0 = 1;
a1 = 2;
a2 = 3;
a3 = 4;
a4 = 5;
a5 = 6;
a6 = 7;
a7 = 8;
a8 = 9;
a9 = 10;
a10 = 11;
a11 = 12;
a12 = 13;
a13 = 14;
a14 = 15;
a15 = 16;
a16 = 17;
a17 = 18;
a18 = 19;
final result = returnStruct19BytesHomogeneousUint8Native(a0, a1, a2, a3, a4,
a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.equals(a1, result.a1);
Expect.equals(a2, result.a2);
Expect.equals(a3, result.a3);
Expect.equals(a4, result.a4);
Expect.equals(a5, result.a5);
Expect.equals(a6, result.a6);
Expect.equals(a7, result.a7);
Expect.equals(a8, result.a8);
Expect.equals(a9, result.a9);
Expect.equals(a10, result.a10);
Expect.equals(a11, result.a11);
Expect.equals(a12, result.a12);
Expect.equals(a13, result.a13);
Expect.equals(a14, result.a14);
Expect.equals(a15, result.a15);
Expect.equals(a16, result.a16);
Expect.equals(a17, result.a17);
Expect.equals(a18, result.a18);
}
@Native<
Struct20BytesHomogeneousInt32 Function(Int32, Int32, Int32, Int32,
Int32)>(symbol: 'ReturnStruct20BytesHomogeneousInt32')
external Struct20BytesHomogeneousInt32
returnStruct20BytesHomogeneousInt32Native(
int a0, int a1, int a2, int a3, int a4);
/// Return value too big to go in cpu registers on arm64.
void testReturnStruct20BytesHomogeneousInt32Native() {
int a0;
int a1;
int a2;
int a3;
int a4;
a0 = -1;
a1 = 2;
a2 = -3;
a3 = 4;
a4 = -5;
final result = returnStruct20BytesHomogeneousInt32Native(a0, a1, a2, a3, a4);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.equals(a1, result.a1);
Expect.equals(a2, result.a2);
Expect.equals(a3, result.a3);
Expect.equals(a4, result.a4);
}
@Native<
Struct20BytesHomogeneousFloat Function(Float, Float, Float, Float,
Float)>(symbol: 'ReturnStruct20BytesHomogeneousFloat')
external Struct20BytesHomogeneousFloat
returnStruct20BytesHomogeneousFloatNative(
double a0, double a1, double a2, double a3, double a4);
/// Return value too big to go in FPU registers on x64, arm hardfp and arm64.
void testReturnStruct20BytesHomogeneousFloatNative() {
double a0;
double a1;
double a2;
double a3;
double a4;
a0 = -1.0;
a1 = 2.0;
a2 = -3.0;
a3 = 4.0;
a4 = -5.0;
final result = returnStruct20BytesHomogeneousFloatNative(a0, a1, a2, a3, a4);
print("result = $result");
Expect.approxEquals(a0, result.a0);
Expect.approxEquals(a1, result.a1);
Expect.approxEquals(a2, result.a2);
Expect.approxEquals(a3, result.a3);
Expect.approxEquals(a4, result.a4);
}
@Native<
Struct32BytesHomogeneousDouble Function(Double, Double, Double,
Double)>(symbol: 'ReturnStruct32BytesHomogeneousDouble')
external Struct32BytesHomogeneousDouble
returnStruct32BytesHomogeneousDoubleNative(
double a0, double a1, double a2, double a3);
/// Return value in FPU registers on arm64.
void testReturnStruct32BytesHomogeneousDoubleNative() {
double a0;
double a1;
double a2;
double a3;
a0 = -1.0;
a1 = 2.0;
a2 = -3.0;
a3 = 4.0;
final result = returnStruct32BytesHomogeneousDoubleNative(a0, a1, a2, a3);
print("result = $result");
Expect.approxEquals(a0, result.a0);
Expect.approxEquals(a1, result.a1);
Expect.approxEquals(a2, result.a2);
Expect.approxEquals(a3, result.a3);
}
@Native<
Struct40BytesHomogeneousDouble Function(Double, Double, Double, Double,
Double)>(symbol: 'ReturnStruct40BytesHomogeneousDouble')
external Struct40BytesHomogeneousDouble
returnStruct40BytesHomogeneousDoubleNative(
double a0, double a1, double a2, double a3, double a4);
/// Return value too big to go in FPU registers on arm64.
void testReturnStruct40BytesHomogeneousDoubleNative() {
double a0;
double a1;
double a2;
double a3;
double a4;
a0 = -1.0;
a1 = 2.0;
a2 = -3.0;
a3 = 4.0;
a4 = -5.0;
final result = returnStruct40BytesHomogeneousDoubleNative(a0, a1, a2, a3, a4);
print("result = $result");
Expect.approxEquals(a0, result.a0);
Expect.approxEquals(a1, result.a1);
Expect.approxEquals(a2, result.a2);
Expect.approxEquals(a3, result.a3);
Expect.approxEquals(a4, result.a4);
}
@Native<
Struct1024BytesHomogeneousUint64 Function(
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64,
Uint64)>(symbol: 'ReturnStruct1024BytesHomogeneousUint64')
external Struct1024BytesHomogeneousUint64
returnStruct1024BytesHomogeneousUint64Native(
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);
/// Test 1kb struct.
void testReturnStruct1024BytesHomogeneousUint64Native() {
int a0;
int a1;
int a2;
int a3;
int a4;
int a5;
int a6;
int a7;
int a8;
int a9;
int a10;
int a11;
int a12;
int a13;
int a14;
int a15;
int a16;
int a17;
int a18;
int a19;
int a20;
int a21;
int a22;
int a23;
int a24;
int a25;
int a26;
int a27;
int a28;
int a29;
int a30;
int a31;
int a32;
int a33;
int a34;
int a35;
int a36;
int a37;
int a38;
int a39;
int a40;
int a41;
int a42;
int a43;
int a44;
int a45;
int a46;
int a47;
int a48;
int a49;
int a50;
int a51;
int a52;
int a53;
int a54;
int a55;
int a56;
int a57;
int a58;
int a59;
int a60;
int a61;
int a62;
int a63;
int a64;
int a65;
int a66;
int a67;
int a68;
int a69;
int a70;
int a71;
int a72;
int a73;
int a74;
int a75;
int a76;
int a77;
int a78;
int a79;
int a80;
int a81;
int a82;
int a83;
int a84;
int a85;
int a86;
int a87;
int a88;
int a89;
int a90;
int a91;
int a92;
int a93;
int a94;
int a95;
int a96;
int a97;
int a98;
int a99;
int a100;
int a101;
int a102;
int a103;
int a104;
int a105;
int a106;
int a107;
int a108;
int a109;
int a110;
int a111;
int a112;
int a113;
int a114;
int a115;
int a116;
int a117;
int a118;
int a119;
int a120;
int a121;
int a122;
int a123;
int a124;
int a125;
int a126;
int a127;
a0 = 1;
a1 = 2;
a2 = 3;
a3 = 4;
a4 = 5;
a5 = 6;
a6 = 7;
a7 = 8;
a8 = 9;
a9 = 10;
a10 = 11;
a11 = 12;
a12 = 13;
a13 = 14;
a14 = 15;
a15 = 16;
a16 = 17;
a17 = 18;
a18 = 19;
a19 = 20;
a20 = 21;
a21 = 22;
a22 = 23;
a23 = 24;
a24 = 25;
a25 = 26;
a26 = 27;
a27 = 28;
a28 = 29;
a29 = 30;
a30 = 31;
a31 = 32;
a32 = 33;
a33 = 34;
a34 = 35;
a35 = 36;
a36 = 37;
a37 = 38;
a38 = 39;
a39 = 40;
a40 = 41;
a41 = 42;
a42 = 43;
a43 = 44;
a44 = 45;
a45 = 46;
a46 = 47;
a47 = 48;
a48 = 49;
a49 = 50;
a50 = 51;
a51 = 52;
a52 = 53;
a53 = 54;
a54 = 55;
a55 = 56;
a56 = 57;
a57 = 58;
a58 = 59;
a59 = 60;
a60 = 61;
a61 = 62;
a62 = 63;
a63 = 64;
a64 = 65;
a65 = 66;
a66 = 67;
a67 = 68;
a68 = 69;
a69 = 70;
a70 = 71;
a71 = 72;
a72 = 73;
a73 = 74;
a74 = 75;
a75 = 76;
a76 = 77;
a77 = 78;
a78 = 79;
a79 = 80;
a80 = 81;
a81 = 82;
a82 = 83;
a83 = 84;
a84 = 85;
a85 = 86;
a86 = 87;
a87 = 88;
a88 = 89;
a89 = 90;
a90 = 91;
a91 = 92;
a92 = 93;
a93 = 94;
a94 = 95;
a95 = 96;
a96 = 97;
a97 = 98;
a98 = 99;
a99 = 100;
a100 = 101;
a101 = 102;
a102 = 103;
a103 = 104;
a104 = 105;
a105 = 106;
a106 = 107;
a107 = 108;
a108 = 109;
a109 = 110;
a110 = 111;
a111 = 112;
a112 = 113;
a113 = 114;
a114 = 115;
a115 = 116;
a116 = 117;
a117 = 118;
a118 = 119;
a119 = 120;
a120 = 121;
a121 = 122;
a122 = 123;
a123 = 124;
a124 = 125;
a125 = 126;
a126 = 127;
a127 = 128;
final result = returnStruct1024BytesHomogeneousUint64Native(
a0,
a1,
a2,
a3,
a4,
a5,
a6,
a7,
a8,
a9,
a10,
a11,
a12,
a13,
a14,
a15,
a16,
a17,
a18,
a19,
a20,
a21,
a22,
a23,
a24,
a25,
a26,
a27,
a28,
a29,
a30,
a31,
a32,
a33,
a34,
a35,
a36,
a37,
a38,
a39,
a40,
a41,
a42,
a43,
a44,
a45,
a46,
a47,
a48,
a49,
a50,
a51,
a52,
a53,
a54,
a55,
a56,
a57,
a58,
a59,
a60,
a61,
a62,
a63,
a64,
a65,
a66,
a67,
a68,
a69,
a70,
a71,
a72,
a73,
a74,
a75,
a76,
a77,
a78,
a79,
a80,
a81,
a82,
a83,
a84,
a85,
a86,
a87,
a88,
a89,
a90,
a91,
a92,
a93,
a94,
a95,
a96,
a97,
a98,
a99,
a100,
a101,
a102,
a103,
a104,
a105,
a106,
a107,
a108,
a109,
a110,
a111,
a112,
a113,
a114,
a115,
a116,
a117,
a118,
a119,
a120,
a121,
a122,
a123,
a124,
a125,
a126,
a127);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.equals(a1, result.a1);
Expect.equals(a2, result.a2);
Expect.equals(a3, result.a3);
Expect.equals(a4, result.a4);
Expect.equals(a5, result.a5);
Expect.equals(a6, result.a6);
Expect.equals(a7, result.a7);
Expect.equals(a8, result.a8);
Expect.equals(a9, result.a9);
Expect.equals(a10, result.a10);
Expect.equals(a11, result.a11);
Expect.equals(a12, result.a12);
Expect.equals(a13, result.a13);
Expect.equals(a14, result.a14);
Expect.equals(a15, result.a15);
Expect.equals(a16, result.a16);
Expect.equals(a17, result.a17);
Expect.equals(a18, result.a18);
Expect.equals(a19, result.a19);
Expect.equals(a20, result.a20);
Expect.equals(a21, result.a21);
Expect.equals(a22, result.a22);
Expect.equals(a23, result.a23);
Expect.equals(a24, result.a24);
Expect.equals(a25, result.a25);
Expect.equals(a26, result.a26);
Expect.equals(a27, result.a27);
Expect.equals(a28, result.a28);
Expect.equals(a29, result.a29);
Expect.equals(a30, result.a30);
Expect.equals(a31, result.a31);
Expect.equals(a32, result.a32);
Expect.equals(a33, result.a33);
Expect.equals(a34, result.a34);
Expect.equals(a35, result.a35);
Expect.equals(a36, result.a36);
Expect.equals(a37, result.a37);
Expect.equals(a38, result.a38);
Expect.equals(a39, result.a39);
Expect.equals(a40, result.a40);
Expect.equals(a41, result.a41);
Expect.equals(a42, result.a42);
Expect.equals(a43, result.a43);
Expect.equals(a44, result.a44);
Expect.equals(a45, result.a45);
Expect.equals(a46, result.a46);
Expect.equals(a47, result.a47);
Expect.equals(a48, result.a48);
Expect.equals(a49, result.a49);
Expect.equals(a50, result.a50);
Expect.equals(a51, result.a51);
Expect.equals(a52, result.a52);
Expect.equals(a53, result.a53);
Expect.equals(a54, result.a54);
Expect.equals(a55, result.a55);
Expect.equals(a56, result.a56);
Expect.equals(a57, result.a57);
Expect.equals(a58, result.a58);
Expect.equals(a59, result.a59);
Expect.equals(a60, result.a60);
Expect.equals(a61, result.a61);
Expect.equals(a62, result.a62);
Expect.equals(a63, result.a63);
Expect.equals(a64, result.a64);
Expect.equals(a65, result.a65);
Expect.equals(a66, result.a66);
Expect.equals(a67, result.a67);
Expect.equals(a68, result.a68);
Expect.equals(a69, result.a69);
Expect.equals(a70, result.a70);
Expect.equals(a71, result.a71);
Expect.equals(a72, result.a72);
Expect.equals(a73, result.a73);
Expect.equals(a74, result.a74);
Expect.equals(a75, result.a75);
Expect.equals(a76, result.a76);
Expect.equals(a77, result.a77);
Expect.equals(a78, result.a78);
Expect.equals(a79, result.a79);
Expect.equals(a80, result.a80);
Expect.equals(a81, result.a81);
Expect.equals(a82, result.a82);
Expect.equals(a83, result.a83);
Expect.equals(a84, result.a84);
Expect.equals(a85, result.a85);
Expect.equals(a86, result.a86);
Expect.equals(a87, result.a87);
Expect.equals(a88, result.a88);
Expect.equals(a89, result.a89);
Expect.equals(a90, result.a90);
Expect.equals(a91, result.a91);
Expect.equals(a92, result.a92);
Expect.equals(a93, result.a93);
Expect.equals(a94, result.a94);
Expect.equals(a95, result.a95);
Expect.equals(a96, result.a96);
Expect.equals(a97, result.a97);
Expect.equals(a98, result.a98);
Expect.equals(a99, result.a99);
Expect.equals(a100, result.a100);
Expect.equals(a101, result.a101);
Expect.equals(a102, result.a102);
Expect.equals(a103, result.a103);
Expect.equals(a104, result.a104);
Expect.equals(a105, result.a105);
Expect.equals(a106, result.a106);
Expect.equals(a107, result.a107);
Expect.equals(a108, result.a108);
Expect.equals(a109, result.a109);
Expect.equals(a110, result.a110);
Expect.equals(a111, result.a111);
Expect.equals(a112, result.a112);
Expect.equals(a113, result.a113);
Expect.equals(a114, result.a114);
Expect.equals(a115, result.a115);
Expect.equals(a116, result.a116);
Expect.equals(a117, result.a117);
Expect.equals(a118, result.a118);
Expect.equals(a119, result.a119);
Expect.equals(a120, result.a120);
Expect.equals(a121, result.a121);
Expect.equals(a122, result.a122);
Expect.equals(a123, result.a123);
Expect.equals(a124, result.a124);
Expect.equals(a125, result.a125);
Expect.equals(a126, result.a126);
Expect.equals(a127, result.a127);
}
@Native<Struct3BytesPackedInt Function(Int8, Int16)>(
symbol: 'ReturnStruct3BytesPackedInt')
external Struct3BytesPackedInt returnStruct3BytesPackedIntNative(
int a0, int a1);
/// Small struct with mis-aligned member.
void testReturnStruct3BytesPackedIntNative() {
int a0;
int a1;
a0 = -1;
a1 = 2;
final result = returnStruct3BytesPackedIntNative(a0, a1);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.equals(a1, result.a1);
}
@Native<Struct8BytesPackedInt Function(Uint8, Uint32, Uint8, Uint8, Uint8)>(
symbol: 'ReturnStruct8BytesPackedInt')
external Struct8BytesPackedInt returnStruct8BytesPackedIntNative(
int a0, int a1, int a2, int a3, int a4);
/// Struct with mis-aligned member.
void testReturnStruct8BytesPackedIntNative() {
int a0;
int a1;
int a2;
int a3;
int a4;
a0 = 1;
a1 = 2;
a2 = 3;
a3 = 4;
a4 = 5;
final result = returnStruct8BytesPackedIntNative(a0, a1, a2, a3, a4);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.equals(a1, result.a1);
Expect.equals(a2, result.a2);
Expect.equals(a3, result.a3);
Expect.equals(a4, result.a4);
}
@Native<Struct9BytesPackedMixed Function(Uint8, Double)>(
symbol: 'ReturnStruct9BytesPackedMixed')
external Struct9BytesPackedMixed returnStruct9BytesPackedMixedNative(
int a0, double a1);
/// Struct with mis-aligned member.
/// Tests backfilling of CPU and FPU registers.
void testReturnStruct9BytesPackedMixedNative() {
int a0;
double a1;
a0 = 1;
a1 = 2.0;
final result = returnStruct9BytesPackedMixedNative(a0, a1);
print("result = $result");
Expect.equals(a0, result.a0);
Expect.approxEquals(a1, result.a1);
}
@Native<Union4BytesMixed Function(Uint32)>(symbol: 'ReturnUnion4BytesMixed')
external Union4BytesMixed returnUnion4BytesMixedNative(int a0);
/// Returning a mixed integer/float union.
void testReturnUnion4BytesMixedNative() {
int a0;
a0 = 1;
final result = returnUnion4BytesMixedNative(a0);
print("result = $result");
Expect.equals(a0, result.a0);
}
@Native<Union8BytesNestedFloat Function(Double)>(
symbol: 'ReturnUnion8BytesNestedFloat')
external Union8BytesNestedFloat returnUnion8BytesNestedFloatNative(double a0);
/// Returning a floating point only union.
void testReturnUnion8BytesNestedFloatNative() {
double a0;
a0 = -1.0;
final result = returnUnion8BytesNestedFloatNative(a0);
print("result = $result");
Expect.approxEquals(a0, result.a0);
}
@Native<Union9BytesNestedInt Function(Struct8BytesInt)>(
symbol: 'ReturnUnion9BytesNestedInt')
external Union9BytesNestedInt returnUnion9BytesNestedIntNative(
Struct8BytesInt a0);
/// Returning a mixed-size union.
void testReturnUnion9BytesNestedIntNative() {
final a0Pointer = calloc<Struct8BytesInt>();
final Struct8BytesInt a0 = a0Pointer.ref;
a0.a0 = -1;
a0.a1 = 2;
a0.a2 = -3;
final result = returnUnion9BytesNestedIntNative(a0);
print("result = $result");
Expect.equals(a0.a0, result.a0.a0);
Expect.equals(a0.a1, result.a0.a1);
Expect.equals(a0.a2, result.a0.a2);
calloc.free(a0Pointer);
}
@Native<Union16BytesNestedFloat Function(Struct8BytesHomogeneousFloat)>(
symbol: 'ReturnUnion16BytesNestedFloat')
external Union16BytesNestedFloat returnUnion16BytesNestedFloatNative(
Struct8BytesHomogeneousFloat a0);
/// Returning union with homogenous floats.
void testReturnUnion16BytesNestedFloatNative() {
final a0Pointer = calloc<Struct8BytesHomogeneousFloat>();
final Struct8BytesHomogeneousFloat a0 = a0Pointer.ref;
a0.a0 = -1.0;
a0.a1 = 2.0;
final result = returnUnion16BytesNestedFloatNative(a0);
print("result = $result");
Expect.approxEquals(a0.a0, result.a0.a0);
Expect.approxEquals(a0.a1, result.a0.a1);
calloc.free(a0Pointer);
}