3 // ignore-wasm32-bare no libc to test ffi with
7 pub struct Quad { a: u64, b: u64, c: u64, d: u64 }
10 #[derive(Copy, Clone)]
11 pub struct Floats { a: f64, b: u8, c: f64 }
14 use super::{Floats, Quad}
;
16 #[link(name = "rust_test_helpers", kind = "static")]
18 pub fn rust_dbg_abi_1(q
: Quad
) -> Quad
;
19 pub fn rust_dbg_abi_2(f
: Floats
) -> Floats
;
25 let q
= Quad
{ a
: 0xaaaa_aaaa_aaaa_aaaa,
26 b
: 0xbbbb_bbbb_bbbb_bbbb,
27 c
: 0xcccc_cccc_cccc_cccc,
28 d
: 0xdddd_dddd_dddd_dddd };
29 let qq
= rustrt
::rust_dbg_abi_1(q
);
30 println
!("a: {:x}", qq
.a
as usize);
31 println
!("b: {:x}", qq
.b
as usize);
32 println
!("c: {:x}", qq
.c
as usize);
33 println
!("d: {:x}", qq
.d
as usize);
34 assert_eq
!(qq
.a
, q
.c
+ 1);
35 assert_eq
!(qq
.b
, q
.d
- 1);
36 assert_eq
!(qq
.c
, q
.a
+ 1);
37 assert_eq
!(qq
.d
, q
.b
- 1);
41 #[cfg(target_pointer_width = "64")]
44 let f
= Floats
{ a
: 1.234567890e-15_f64,
46 c
: 1.0987654321e-15_f64 };
47 let ff
= rustrt
::rust_dbg_abi_2(f
);
48 println
!("a: {}", ff
.a
as f64);
49 println
!("b: {}", ff
.b
as usize);
50 println
!("c: {}", ff
.c
as f64);
51 assert_eq
!(ff
.a
, f
.c
+ 1.0f64);
52 assert_eq
!(ff
.b
, 0xff);
53 assert_eq
!(ff
.c
, f
.a
- 1.0f64);
57 #[cfg(target_pointer_width = "32")]