ffi 0.2: fold Pair64 + Quad32 back into small-struct baseline
Now that emit_llvm.zig bridges the struct<->[2 x i64] ABI mismatch
(previous commit), the 9..16-byte integer-only shapes round-trip
cleanly. Extended `examples/ffi-02-small-struct.sx` to cover all
four aggregate ABI slots in one place:
Vec2 — 8 B, two f32 (register pair, float)
Vec4f — 16 B, four f32 (HFA — homogeneous float aggregate)
Pair64 — 16 B, two s64 (9..16 B int — [2 x i64] coercion slot)
Quad32 — 16 B, four s32 (same slot as Pair64)
Vendor helpers (`vendors/ffi_structs/{ffi_structs.h,ffi_structs.c}`)
grow `ffi_pair64_*` + `ffi_quad32_*` companions. Snapshot updated
to capture the full output. 89/89 regression tests pass.
`examples/101-ffi-medium-struct.sx` keeps a minimal focused repro
of the Pair64 case so the issue's emergence-and-fix history stays
greppable.
This commit is contained in:
@@ -1,6 +1,12 @@
|
||||
vec2 make = (1.500000, 2.500000)
|
||||
vec2 swap = (2.500000, 1.500000)
|
||||
vec2 sum = 4.000000
|
||||
vec4f make = (1.000000, 2.000000, 3.000000, 4.000000)
|
||||
vec4f rev = (4.000000, 3.000000, 2.000000, 1.000000)
|
||||
vec4f sum = 10.000000
|
||||
vec2 make = (1.500000, 2.500000)
|
||||
vec2 swap = (2.500000, 1.500000)
|
||||
vec2 sum = 4.000000
|
||||
vec4f make = (1.000000, 2.000000, 3.000000, 4.000000)
|
||||
vec4f rev = (4.000000, 3.000000, 2.000000, 1.000000)
|
||||
vec4f sum = 10.000000
|
||||
pair64 make = (100, 200)
|
||||
pair64 swap = (200, 100)
|
||||
pair64 sum = 300
|
||||
quad32 make = (10, 20, 30, 40)
|
||||
quad32 rev = (40, 30, 20, 10)
|
||||
quad32 sum = 100
|
||||
|
||||
Reference in New Issue
Block a user