This test:
(module
(memory (export "shared") 1 1 shared)
(func (export "eq32") (result i32)
(i32.atomic.store (i32.const 0) (i32.const 1))
(memory.atomic.wait32 (i32.const 0) (i32.const 1) (i64.const 0)))
(func (export "ne32") (result i32)
(i32.atomic.store (i32.const 0) (i32.const 1))
(memory.atomic.wait32 (i32.const 0) (i32.const 0x01000000) (i64.const 0)))
(func (export "eq64") (result i32)
(i64.atomic.store (i32.const 8) (i64.const 1))
(memory.atomic.wait64 (i32.const 8) (i64.const 1) (i64.const 0)))
(func (export "ne64") (result i32)
(i64.atomic.store (i32.const 8) (i64.const 1))
(memory.atomic.wait64 (i32.const 8) (i64.const 0x0100000000000000) (i64.const 0)))
)
(assert_return (invoke "eq32") (i32.const 2))
(assert_return (invoke "ne32") (i32.const 1))
(assert_return (invoke "eq64") (i32.const 2))
(assert_return (invoke "ne64") (i32.const 1))
passes on little-endian hosts:
$ cargo run wast atomic_wait_endianness.wast
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.15s
Running `/home/alex/code/wasmtime2/target/debug/wasmtime wast atomic_wait_endianness.wast`
and fails on big-endian hosts:
$ cargo run --target s390x-unknown-linux-gnu wast atomic_wait_endianness.wast
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.20s
Running `qemu-s390x -L /usr/s390x-linux-gnu -E LD_LIBRARY_PATH=/usr/s390x-linux-gnu/lib -E WASMTIME_TEST_NO_HOG_MEMORY=1 /home/alex/code/wasmtime2/target/s390x-unknown-linux-gnu/debug/wasmtime wast atomic_wait_endianness.wast`
Error: failed to run script file 'atomic_wait_endianness.wast'
Caused by:
0: failed directive on atomic_wait_endianness.wast:21
1: result 0 didn't match
2: expected 2 / 0x0000000000000002
actual 1 / 0x0000000000000001
This test:
passes on little-endian hosts:
and fails on big-endian hosts: