[vm, ffi] Add Windows ARM64 to FFI unit tests.

This accepts the current results, including known bugs in handling of variadic arguments. Fixes are in a follow-up CL.

TEST=ci
Change-Id: I6a0bd11aeb1fe0a6980dd6ff974dc5a4b207fb97
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/329824
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
Ryan Macnak 2023-10-11 18:41:57 +00:00 committed by Commit Queue
parent 209483da72
commit 985c292cff
28 changed files with 279 additions and 0 deletions

View file

@ -400,6 +400,7 @@ class FfiTestSuite extends TestSuite {
"arm64_ios",
"arm64_linux",
"arm64_macos",
"arm64_win",
"arm_android",
"arm_ios",
"arm_linux",

View file

@ -137,6 +137,13 @@ build_run_ffi_unit_tests("run_ffi_unit_tests_arm64_linux") {
]
}
build_run_ffi_unit_tests("run_ffi_unit_tests_arm64_win") {
extra_configs = [
":define_target_arch_arm64",
":define_target_os_windows",
]
}
build_run_ffi_unit_tests("run_ffi_unit_tests_ia32_android") {
extra_configs = [
":define_target_arch_ia32",
@ -214,6 +221,7 @@ group("run_ffi_unit_tests") {
":run_ffi_unit_tests_arm64_ios", # No other test coverage.
":run_ffi_unit_tests_arm64_linux",
":run_ffi_unit_tests_arm64_macos",
":run_ffi_unit_tests_arm64_win",
":run_ffi_unit_tests_arm_android", # SoftFP
":run_ffi_unit_tests_arm_ios", # No other test coverage.
":run_ffi_unit_tests_arm_linux", # HardFP

View file

@ -0,0 +1,22 @@
v0 double
v1 double
v2 double
v3 double
v4 double
v5 double
v6 double
v7 double
S+0 double
S+8 double
S+16 double
S+24 double
S+32 double
S+40 double
S+48 double
S+56 double
S+64 double
S+72 double
S+80 double
S+88 double
=>
v0 double

View file

@ -0,0 +1,22 @@
v0 float
v1 float
v2 float
v3 float
v4 float
v5 float
v6 float
v7 float
S+0 float
S+8 float
S+16 float
S+24 float
S+32 float
S+40 float
S+48 float
S+56 float
S+64 float
S+72 float
S+80 float
S+88 float
=>
v0 float

View file

@ -0,0 +1,12 @@
r0 int8
r1 int8
r2 int8
r3 int8
r4 int8
r5 int8
r6 int8
r7 int8
S+0 int8
S+8 int8
=>
r0 int8

View file

@ -0,0 +1,22 @@
r0 int64
v0 float
r1 int64
v1 double
r2 int64
v2 float
r3 int64
v3 double
r4 int64
v4 float
r5 int64
v5 double
r6 int64
v6 float
r7 int64
v7 double
S+0 int64
S+8 float
S+16 int64
S+24 double
=>
v0 double

View file

@ -0,0 +1,3 @@
=>
M(r0 int64) Struct(size: 8)

View file

@ -0,0 +1,5 @@
r0 int32
r1 int64
r2 int64
=>
r0 int32

View file

@ -0,0 +1,9 @@
r0 int64
v0 double
r1 int32
v1 double
r2 int32
r3 int64
r4 int64
=>
r0 void

View file

@ -0,0 +1,4 @@
P(r0 int64) Struct(size: 128)
r1 int32
=>
P(r8 int64) Struct(size: 128)

View file

@ -0,0 +1,8 @@
M(v0 float, v1 float, v2 float) Struct(size: 12)
M(v3 float, v4 float, v5 float) Struct(size: 12)
S+0 Struct(size: 12)
S+16 Struct(size: 12)
S+32 Struct(size: 12)
S+48 Struct(size: 12)
=>
r0 int64

View file

@ -0,0 +1,15 @@
M(v0 float, v1 float, v2 float, v3 float) Struct(size: 16)
v4 float
S+0 Struct(size: 16)
S+16 Struct(size: 16)
S+32 Struct(size: 16)
S+48 Struct(size: 16)
S+64 Struct(size: 16)
S+80 Struct(size: 16)
S+96 Struct(size: 16)
S+112 Struct(size: 16)
S+128 float
r0 int8
S+136 Struct(size: 16)
=>
M(v0 float, v1 float, v2 float, v3 float) Struct(size: 16)

View file

@ -0,0 +1,12 @@
M(r0 int64) Struct(size: 3)
M(r1 int64) Struct(size: 3)
M(r2 int64) Struct(size: 3)
M(r3 int64) Struct(size: 3)
M(r4 int64) Struct(size: 3)
M(r5 int64) Struct(size: 3)
M(r6 int64) Struct(size: 3)
M(r7 int64) Struct(size: 3)
M(S+0 int64) Struct(size: 3)
M(S+8 int64) Struct(size: 3)
=>
M(r0 int64) Struct(size: 3)

View file

@ -0,0 +1,12 @@
M(r0 int64) Struct(size: 8)
M(r1 int64) Struct(size: 8)
M(r2 int64) Struct(size: 8)
M(r3 int64) Struct(size: 8)
M(r4 int64) Struct(size: 8)
M(r5 int64) Struct(size: 8)
M(r6 int64) Struct(size: 8)
M(r7 int64) Struct(size: 8)
S+0 Struct(size: 8)
S+8 Struct(size: 8)
=>
M(r0 int64) Struct(size: 8)

View file

@ -0,0 +1,3 @@
M(r0 int64) Struct(size: 8)
=>
M(r0 int64) Struct(size: 8)

View file

@ -0,0 +1,15 @@
M(r0 int64, r1 int64) Struct(size: 9)
M(r2 int64, r3 int64) Struct(size: 9)
M(r4 int64, r5 int64) Struct(size: 9)
M(r6 int64, r7 int64) Struct(size: 9)
S+0 Struct(size: 9)
S+16 Struct(size: 9)
S+32 Struct(size: 9)
S+48 Struct(size: 9)
S+64 Struct(size: 9)
S+80 Struct(size: 9)
v0 double
S+96 int32
S+104 int32
=>
v0 double

View file

@ -0,0 +1,17 @@
Struct(size: 88, field alignment: 8, stack alignment: 8, members: {
0: int8,
2: int16,
4: int32,
8: int64,
16: uint8,
18: uint16,
20: uint32,
24: uint64,
32: int64,
40: double,
48: float,
56: int64,
64: int64,
72: int64,
80: int8
})

View file

@ -0,0 +1,3 @@
Struct(size: 16, field alignment: 4, stack alignment: 8, members: {
0: Array(element type: Struct(size: 8, field alignment: 4, stack alignment: 8, members: {0: Array(element type: float, length: 2)}), length: 2)
})

View file

@ -0,0 +1,6 @@
Struct(size: 16, field alignment: 4, stack alignment: 8, members: {
0: float,
4: float,
8: float,
12: float
})

View file

@ -0,0 +1,3 @@
Struct(size: 8, field alignment: 1, stack alignment: 8, members: {
0: Array(element type: int8, length: 8)
})

View file

@ -0,0 +1,12 @@
Struct(size: 10, field alignment: 1, stack alignment: 8, members: {
0: int8,
1: int8,
2: int8,
3: int8,
4: int8,
5: int8,
6: int8,
7: int8,
8: int8,
9: int8
})

View file

@ -0,0 +1,13 @@
M(v0 float, v1 float, v2 float, v3 float) Union(size: 16)
M(v4 float, v5 float, v6 float, v7 float) Union(size: 16)
S+0 Union(size: 16)
S+16 Union(size: 16)
S+32 Union(size: 16)
S+48 Union(size: 16)
S+64 Union(size: 16)
S+80 Union(size: 16)
S+96 Union(size: 16)
r0 int8
S+112 Union(size: 16)
=>
M(v0 float, v1 float, v2 float, v3 float) Union(size: 16)

View file

@ -0,0 +1,12 @@
M(r0 int64) Union(size: 5)
M(r1 int64) Union(size: 5)
M(r2 int64) Union(size: 5)
M(r3 int64) Union(size: 5)
M(r4 int64) Union(size: 5)
M(r5 int64) Union(size: 5)
M(r6 int64) Union(size: 5)
M(r7 int64) Union(size: 5)
M(S+0 int64) Union(size: 5)
M(S+8 int64) Union(size: 5)
=>
M(r0 int64) Union(size: 5)

View file

@ -0,0 +1,7 @@
v0 double
v1 double
v2 double
v3 double
v4 double
=>
v0 double

View file

@ -0,0 +1,7 @@
r0 int64
r1 int64
r2 int64
r3 int64
r4 int64
=>
r0 int64

View file

@ -0,0 +1,6 @@
v0 double
v1 double
M(v2 double, v3 double, v4 double, v5 double) Struct(size: 32)
v6 double
=>
v0 double

View file

@ -0,0 +1,15 @@
v0 double
v1 double
v2 double
v3 double
v4 double
v5 double
v6 double
v7 double
S+0 float
S+8 Struct(size: 12)
r0 int64
r1 int32
S+24 Struct(size: 12)
=>
v0 double

View file

@ -0,0 +1,5 @@
v0 double
P(r0 int64) Struct(size: 20)
v1 double
=>
v0 double