[vm, ffi] Add tests related to small structs.
TEST=ci
Change-Id: Ib39ce80bb149db488fb7e9ea0e44f7e5da57f205
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/330481
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
diff --git a/runtime/vm/compiler/ffi/native_calling_convention_test.cc b/runtime/vm/compiler/ffi/native_calling_convention_test.cc
index 8eb3611..456a693 100644
--- a/runtime/vm/compiler/ffi/native_calling_convention_test.cc
+++ b/runtime/vm/compiler/ffi/native_calling_convention_test.cc
@@ -906,6 +906,69 @@
RunSignatureTest(Z, "regress49460", native_signature);
}
+// Struct parameter that potentially is partially allocated to a register and
+// partially to the stack. Mainly interesting on ARM64 and RISC-V.
+//
+// See the *.expect in ./unit_tests for this behavior.
+UNIT_TEST_CASE_WITH_ZONE(NativeCallingConvention_stradle_last_register) {
+#if defined(TARGET_ARCH_IS_32_BIT)
+ const auto& intptr_type = *new (Z) NativePrimitiveType(kInt32);
+ const auto& halfptr_type = *new (Z) NativePrimitiveType(kInt16);
+#elif defined(TARGET_ARCH_IS_64_BIT)
+ const auto& intptr_type = *new (Z) NativePrimitiveType(kInt64);
+ const auto& halfptr_type = *new (Z) NativePrimitiveType(kInt32);
+#endif
+
+ auto& member_types = *new (Z) NativeTypes(Z, 3);
+ member_types.Add(&halfptr_type);
+ member_types.Add(&halfptr_type);
+ member_types.Add(&halfptr_type);
+ const auto& struct_type = NativeStructType::FromNativeTypes(Z, member_types);
+
+ auto& arguments = *new (Z) NativeTypes(Z, CallingConventions::kNumArgRegs);
+ for (intptr_t i = 1; i < CallingConventions::kNumArgRegs; i++) {
+ arguments.Add(&intptr_type);
+ }
+ arguments.Add(&struct_type);
+
+ const auto& native_signature =
+ *new (Z) NativeFunctionType(arguments, intptr_type);
+
+ RunSignatureTest(Z, "stradle_last_register", native_signature);
+}
+
+// Struct parameter that potentially is partially allocated to a register and
+// partially to the stack. Mainly interesting on ARM64 and RISC-V.
+//
+// See the *.expect in ./unit_tests for this behavior.
+UNIT_TEST_CASE_WITH_ZONE(
+ NativeCallingConvention_variadic_stradle_last_register) {
+#if defined(TARGET_ARCH_IS_32_BIT)
+ const auto& intptr_type = *new (Z) NativePrimitiveType(kInt32);
+ const auto& halfptr_type = *new (Z) NativePrimitiveType(kInt16);
+#elif defined(TARGET_ARCH_IS_64_BIT)
+ const auto& intptr_type = *new (Z) NativePrimitiveType(kInt64);
+ const auto& halfptr_type = *new (Z) NativePrimitiveType(kInt32);
+#endif
+
+ auto& member_types = *new (Z) NativeTypes(Z, 3);
+ member_types.Add(&halfptr_type);
+ member_types.Add(&halfptr_type);
+ member_types.Add(&halfptr_type);
+ const auto& struct_type = NativeStructType::FromNativeTypes(Z, member_types);
+
+ auto& arguments = *new (Z) NativeTypes(Z, CallingConventions::kNumArgRegs);
+ for (intptr_t i = 1; i < CallingConventions::kNumArgRegs; i++) {
+ arguments.Add(&intptr_type);
+ }
+ arguments.Add(&struct_type);
+
+ const auto& native_signature = *new (Z) NativeFunctionType(
+ arguments, intptr_type, /*variadic_arguments_index=*/1);
+
+ RunSignatureTest(Z, "variadic_stradle_last_register", native_signature);
+}
+
} // namespace ffi
} // namespace compiler
} // namespace dart
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_android.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_android.expect
new file mode 100644
index 0000000..965436c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_android.expect
@@ -0,0 +1,10 @@
+r0 int64
+r1 int64
+r2 int64
+r3 int64
+r4 int64
+r5 int64
+r6 int64
+M(r7 int64, S+0 int64) Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_fuchsia.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_fuchsia.expect
new file mode 100644
index 0000000..965436c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_fuchsia.expect
@@ -0,0 +1,10 @@
+r0 int64
+r1 int64
+r2 int64
+r3 int64
+r4 int64
+r5 int64
+r6 int64
+M(r7 int64, S+0 int64) Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_ios.expect
new file mode 100644
index 0000000..965436c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_ios.expect
@@ -0,0 +1,10 @@
+r0 int64
+r1 int64
+r2 int64
+r3 int64
+r4 int64
+r5 int64
+r6 int64
+M(r7 int64, S+0 int64) Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_linux.expect
new file mode 100644
index 0000000..965436c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_linux.expect
@@ -0,0 +1,10 @@
+r0 int64
+r1 int64
+r2 int64
+r3 int64
+r4 int64
+r5 int64
+r6 int64
+M(r7 int64, S+0 int64) Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_macos.expect
new file mode 100644
index 0000000..965436c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_macos.expect
@@ -0,0 +1,10 @@
+r0 int64
+r1 int64
+r2 int64
+r3 int64
+r4 int64
+r5 int64
+r6 int64
+M(r7 int64, S+0 int64) Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_win.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_win.expect
new file mode 100644
index 0000000..965436c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm64_win.expect
@@ -0,0 +1,10 @@
+r0 int64
+r1 int64
+r2 int64
+r3 int64
+r4 int64
+r5 int64
+r6 int64
+M(r7 int64, S+0 int64) Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm_android.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm_android.expect
new file mode 100644
index 0000000..8e13dd5
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm_android.expect
@@ -0,0 +1,6 @@
+r0 int32
+r1 int32
+r2 int32
+M(r3 int32, S+0 int32) Struct(size: 6)
+=>
+r0 int32
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm_ios.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm_ios.expect
new file mode 100644
index 0000000..8e13dd5
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm_ios.expect
@@ -0,0 +1,6 @@
+r0 int32
+r1 int32
+r2 int32
+M(r3 int32, S+0 int32) Struct(size: 6)
+=>
+r0 int32
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm_linux.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm_linux.expect
new file mode 100644
index 0000000..8e13dd5
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/arm_linux.expect
@@ -0,0 +1,6 @@
+r0 int32
+r1 int32
+r2 int32
+M(r3 int32, S+0 int32) Struct(size: 6)
+=>
+r0 int32
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/ia32_android.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/ia32_android.expect
new file mode 100644
index 0000000..6a5bf0b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/ia32_android.expect
@@ -0,0 +1,3 @@
+S+0 Struct(size: 6)
+=>
+eax int32
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/ia32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/ia32_linux.expect
new file mode 100644
index 0000000..6a5bf0b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/ia32_linux.expect
@@ -0,0 +1,3 @@
+S+0 Struct(size: 6)
+=>
+eax int32
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/ia32_win.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/ia32_win.expect
new file mode 100644
index 0000000..6a5bf0b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/ia32_win.expect
@@ -0,0 +1,3 @@
+S+0 Struct(size: 6)
+=>
+eax int32
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/riscv32_linux.expect
new file mode 100644
index 0000000..540bf12
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/riscv32_linux.expect
@@ -0,0 +1,10 @@
+a0 int32
+a1 int32
+a2 int32
+t3 int32
+t4 int32
+t5 int32
+a6 int32
+M(a7 uint32, S+0 uint32) Struct(size: 6)
+=>
+a0 int32
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/riscv64_linux.expect
new file mode 100644
index 0000000..33930e4
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/riscv64_linux.expect
@@ -0,0 +1,10 @@
+a0 int64
+a1 int64
+a2 int64
+t3 int64
+t4 int64
+t5 int64
+a6 int64
+M(a7 int64, S+0 int64) Struct(size: 12)
+=>
+a0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_fuchsia.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_fuchsia.expect
new file mode 100644
index 0000000..878e0de
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_fuchsia.expect
@@ -0,0 +1,8 @@
+rdi int64
+rsi int64
+rdx int64
+rcx int64
+r8 int64
+S+0 Struct(size: 12)
+=>
+rax int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_ios.expect
new file mode 100644
index 0000000..878e0de
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_ios.expect
@@ -0,0 +1,8 @@
+rdi int64
+rsi int64
+rdx int64
+rcx int64
+r8 int64
+S+0 Struct(size: 12)
+=>
+rax int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_linux.expect
new file mode 100644
index 0000000..878e0de
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_linux.expect
@@ -0,0 +1,8 @@
+rdi int64
+rsi int64
+rdx int64
+rcx int64
+r8 int64
+S+0 Struct(size: 12)
+=>
+rax int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_macos.expect
new file mode 100644
index 0000000..878e0de
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_macos.expect
@@ -0,0 +1,8 @@
+rdi int64
+rsi int64
+rdx int64
+rcx int64
+r8 int64
+S+0 Struct(size: 12)
+=>
+rax int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_win.expect b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_win.expect
new file mode 100644
index 0000000..587bcc3
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/stradle_last_register/x64_win.expect
@@ -0,0 +1,6 @@
+rcx int64
+rdx int64
+r8 int64
+P(r9 int64) Struct(size: 12)
+=>
+rax int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_android.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_android.expect
new file mode 100644
index 0000000..965436c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_android.expect
@@ -0,0 +1,10 @@
+r0 int64
+r1 int64
+r2 int64
+r3 int64
+r4 int64
+r5 int64
+r6 int64
+M(r7 int64, S+0 int64) Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_fuchsia.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_fuchsia.expect
new file mode 100644
index 0000000..965436c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_fuchsia.expect
@@ -0,0 +1,10 @@
+r0 int64
+r1 int64
+r2 int64
+r3 int64
+r4 int64
+r5 int64
+r6 int64
+M(r7 int64, S+0 int64) Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_ios.expect
new file mode 100644
index 0000000..9226abd
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_ios.expect
@@ -0,0 +1,10 @@
+r0 int64
+S+0 int64
+S+8 int64
+S+16 int64
+S+24 int64
+S+32 int64
+S+40 int64
+S+48 Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_linux.expect
new file mode 100644
index 0000000..965436c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_linux.expect
@@ -0,0 +1,10 @@
+r0 int64
+r1 int64
+r2 int64
+r3 int64
+r4 int64
+r5 int64
+r6 int64
+M(r7 int64, S+0 int64) Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_macos.expect
new file mode 100644
index 0000000..9226abd
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_macos.expect
@@ -0,0 +1,10 @@
+r0 int64
+S+0 int64
+S+8 int64
+S+16 int64
+S+24 int64
+S+32 int64
+S+40 int64
+S+48 Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_win.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_win.expect
new file mode 100644
index 0000000..965436c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm64_win.expect
@@ -0,0 +1,10 @@
+r0 int64
+r1 int64
+r2 int64
+r3 int64
+r4 int64
+r5 int64
+r6 int64
+M(r7 int64, S+0 int64) Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm_android.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm_android.expect
new file mode 100644
index 0000000..8e13dd5
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm_android.expect
@@ -0,0 +1,6 @@
+r0 int32
+r1 int32
+r2 int32
+M(r3 int32, S+0 int32) Struct(size: 6)
+=>
+r0 int32
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm_ios.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm_ios.expect
new file mode 100644
index 0000000..8e13dd5
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm_ios.expect
@@ -0,0 +1,6 @@
+r0 int32
+r1 int32
+r2 int32
+M(r3 int32, S+0 int32) Struct(size: 6)
+=>
+r0 int32
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm_linux.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm_linux.expect
new file mode 100644
index 0000000..8e13dd5
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/arm_linux.expect
@@ -0,0 +1,6 @@
+r0 int32
+r1 int32
+r2 int32
+M(r3 int32, S+0 int32) Struct(size: 6)
+=>
+r0 int32
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/ia32_android.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/ia32_android.expect
new file mode 100644
index 0000000..6a5bf0b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/ia32_android.expect
@@ -0,0 +1,3 @@
+S+0 Struct(size: 6)
+=>
+eax int32
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/ia32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/ia32_linux.expect
new file mode 100644
index 0000000..6a5bf0b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/ia32_linux.expect
@@ -0,0 +1,3 @@
+S+0 Struct(size: 6)
+=>
+eax int32
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/ia32_win.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/ia32_win.expect
new file mode 100644
index 0000000..6a5bf0b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/ia32_win.expect
@@ -0,0 +1,3 @@
+S+0 Struct(size: 6)
+=>
+eax int32
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/riscv32_linux.expect
new file mode 100644
index 0000000..540bf12
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/riscv32_linux.expect
@@ -0,0 +1,10 @@
+a0 int32
+a1 int32
+a2 int32
+t3 int32
+t4 int32
+t5 int32
+a6 int32
+M(a7 uint32, S+0 uint32) Struct(size: 6)
+=>
+a0 int32
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/riscv64_linux.expect
new file mode 100644
index 0000000..33930e4
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/riscv64_linux.expect
@@ -0,0 +1,10 @@
+a0 int64
+a1 int64
+a2 int64
+t3 int64
+t4 int64
+t5 int64
+a6 int64
+M(a7 int64, S+0 int64) Struct(size: 12)
+=>
+a0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_fuchsia.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_fuchsia.expect
new file mode 100644
index 0000000..878e0de
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_fuchsia.expect
@@ -0,0 +1,8 @@
+rdi int64
+rsi int64
+rdx int64
+rcx int64
+r8 int64
+S+0 Struct(size: 12)
+=>
+rax int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_ios.expect
new file mode 100644
index 0000000..878e0de
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_ios.expect
@@ -0,0 +1,8 @@
+rdi int64
+rsi int64
+rdx int64
+rcx int64
+r8 int64
+S+0 Struct(size: 12)
+=>
+rax int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_linux.expect
new file mode 100644
index 0000000..878e0de
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_linux.expect
@@ -0,0 +1,8 @@
+rdi int64
+rsi int64
+rdx int64
+rcx int64
+r8 int64
+S+0 Struct(size: 12)
+=>
+rax int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_macos.expect
new file mode 100644
index 0000000..878e0de
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_macos.expect
@@ -0,0 +1,8 @@
+rdi int64
+rsi int64
+rdx int64
+rcx int64
+r8 int64
+S+0 Struct(size: 12)
+=>
+rax int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_win.expect b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_win.expect
new file mode 100644
index 0000000..587bcc3
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/variadic_stradle_last_register/x64_win.expect
@@ -0,0 +1,6 @@
+rcx int64
+rdx int64
+r8 int64
+P(r9 int64) Struct(size: 12)
+=>
+rax int64