mirror of
https://github.com/mii443/wasmer.git
synced 2025-12-08 13:48:26 +00:00
spec:
https://github.com/WebAssembly/spec/commit/e3c10811
simd:
https://github.com/WebAssembly/simd/commit/de4409bc
gc:
https://github.com/WebAssembly/gc/commit/db1c01a9
tail-call:
https://github.com/WebAssembly/tail-call/commit/394d0aa3
This change was automatically generated by `update-testsuite.sh`
356 lines
12 KiB
Plaintext
Vendored
356 lines
12 KiB
Plaintext
Vendored
;; Valid alignment
|
|
|
|
(module (memory 1) (func (drop (v128.load align=1 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load align=2 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load align=4 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load align=8 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load align=16 (i32.const 0)))))
|
|
|
|
(module (memory 1) (func (v128.store align=1 (i32.const 0) (v128.const i32x4 0 1 2 3))))
|
|
(module (memory 1) (func (v128.store align=2 (i32.const 0) (v128.const i32x4 0 1 2 3))))
|
|
(module (memory 1) (func (v128.store align=4 (i32.const 0) (v128.const i32x4 0 1 2 3))))
|
|
(module (memory 1) (func (v128.store align=8 (i32.const 0) (v128.const i32x4 0 1 2 3))))
|
|
(module (memory 1) (func (v128.store align=16 (i32.const 0) (v128.const i32x4 0 1 2 3))))
|
|
|
|
(module (memory 1) (func (drop (v128.load8x8_s align=1 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load8x8_s align=2 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load8x8_s align=4 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load8x8_s align=8 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load8x8_u align=1 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load8x8_u align=2 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load8x8_u align=4 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load8x8_u align=8 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load16x4_s align=1 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load16x4_s align=2 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load16x4_s align=4 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load16x4_s align=8 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load16x4_u align=1 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load16x4_u align=2 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load16x4_u align=4 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load16x4_u align=8 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load32x2_s align=1 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load32x2_s align=2 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load32x2_s align=4 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load32x2_s align=8 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load32x2_u align=1 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load32x2_u align=2 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load32x2_u align=4 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load32x2_u align=8 (i32.const 0)))))
|
|
|
|
(module (memory 1) (func (drop (v128.load8_splat align=1 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load16_splat align=1 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load16_splat align=2 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load32_splat align=1 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load32_splat align=2 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load32_splat align=4 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load64_splat align=1 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load64_splat align=2 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load64_splat align=4 (i32.const 0)))))
|
|
(module (memory 1) (func (drop (v128.load64_splat align=8 (i32.const 0)))))
|
|
|
|
;; Invalid alignment
|
|
|
|
(assert_invalid
|
|
(module (memory 1) (func (drop (v128.load align=32 (i32.const 0)))))
|
|
"alignment must not be larger than natural"
|
|
)
|
|
(assert_invalid
|
|
(module (memory 0) (func(v128.store align=32 (i32.const 0) (v128.const i32x4 0 0 0 0))))
|
|
"alignment must not be larger than natural"
|
|
)
|
|
(assert_invalid
|
|
(module (memory 1) (func (result v128) (v128.load8x8_s align=16 (i32.const 0))))
|
|
"alignment must not be larger than natural"
|
|
)
|
|
(assert_invalid
|
|
(module (memory 1) (func (result v128) (v128.load8x8_u align=16 (i32.const 0))))
|
|
"alignment must not be larger than natural"
|
|
)
|
|
(assert_invalid
|
|
(module (memory 1) (func (result v128) (v128.load16x4_s align=16 (i32.const 0))))
|
|
"alignment must not be larger than natural"
|
|
)
|
|
(assert_invalid
|
|
(module (memory 1) (func (result v128) (v128.load16x4_u align=16 (i32.const 0))))
|
|
"alignment must not be larger than natural"
|
|
)
|
|
(assert_invalid
|
|
(module (memory 1) (func (result v128) (v128.load32x2_s align=16 (i32.const 0))))
|
|
"alignment must not be larger than natural"
|
|
)
|
|
(assert_invalid
|
|
(module (memory 1) (func (result v128) (v128.load32x2_u align=16 (i32.const 0))))
|
|
"alignment must not be larger than natural"
|
|
)
|
|
(assert_invalid
|
|
(module (memory 1) (func (result v128) (v128.load8_splat align=2 (i32.const 0))))
|
|
"alignment must not be larger than natural"
|
|
)
|
|
(assert_invalid
|
|
(module (memory 1) (func (result v128) (v128.load16_splat align=4 (i32.const 0))))
|
|
"alignment must not be larger than natural"
|
|
)
|
|
(assert_invalid
|
|
(module (memory 1) (func (result v128) (v128.load32_splat align=8 (i32.const 0))))
|
|
"alignment must not be larger than natural"
|
|
)
|
|
(assert_invalid
|
|
(module (memory 1) (func (result v128) (v128.load64_splat align=16 (i32.const 0))))
|
|
"alignment must not be larger than natural"
|
|
)
|
|
|
|
;; Malformed alignment
|
|
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (drop (v128.load align=-1 (i32.const 0))))"
|
|
)
|
|
"unknown operator"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (drop (v128.load align=0 (i32.const 0))))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (drop (v128.load align=7 (i32.const 0))))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (v128.store align=-1 (i32.const 0) (v128.const i32x4 0 0 0 0)))"
|
|
)
|
|
"unknown operator"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 0) (func (v128.store align=0 (i32.const 0) (v128.const i32x4 0 0 0 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 0) (func (v128.store align=7 (i32.const 0) (v128.const i32x4 0 0 0 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load8x8_s align=-1 (i32.const 0)))"
|
|
)
|
|
"unknown operator"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load8x8_s align=0 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load8x8_s align=7 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load8x8_u align=-1 (i32.const 0)))"
|
|
)
|
|
"unknown operator"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load8x8_u align=0 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load8x8_u align=7 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load16x4_s align=-1 (i32.const 0)))"
|
|
)
|
|
"unknown operator"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load16x4_s align=0 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load16x4_s align=7 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load16x4_u align=-1 (i32.const 0)))"
|
|
)
|
|
"unknown operator"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load16x4_u align=0 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load16x4_u align=7 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load32x2_s align=-1 (i32.const 0)))"
|
|
)
|
|
"unknown operator"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load32x2_s align=0 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load32x2_s align=7 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load32x2_u align=-1 (i32.const 0)))"
|
|
)
|
|
"unknown operator"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load32x2_u align=0 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load32x2_u align=7 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load8_splat align=-1 (i32.const 0)))"
|
|
)
|
|
"unknown operator"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load8_splat align=0 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load16_splat align=-1 (i32.const 0)))"
|
|
)
|
|
"unknown operator"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load16_splat align=0 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load32_splat align=-1 (i32.const 0)))"
|
|
)
|
|
"unknown operator"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load32_splat align=0 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load32_splat align=3 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load64_splat align=-1 (i32.const 0)))"
|
|
)
|
|
"unknown operator"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load64_splat align=0 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
(assert_malformed
|
|
(module quote
|
|
"(memory 1) (func (result v128) (v128.load64_splat align=7 (i32.const 0)))"
|
|
)
|
|
"alignment must be a power of two"
|
|
)
|
|
|
|
;; Test that misaligned SIMD loads/stores don't trap
|
|
|
|
(module
|
|
(memory 1 1)
|
|
(func (export "v128.load align=16") (param $address i32) (result v128)
|
|
(v128.load align=16 (local.get $address))
|
|
)
|
|
(func (export "v128.store align=16") (param $address i32) (param $value v128)
|
|
(v128.store align=16 (local.get $address) (local.get $value))
|
|
)
|
|
)
|
|
|
|
(assert_return (invoke "v128.load align=16" (i32.const 0)) (v128.const i32x4 0 0 0 0))
|
|
(assert_return (invoke "v128.load align=16" (i32.const 1)) (v128.const i32x4 0 0 0 0))
|
|
(assert_return (invoke "v128.store align=16" (i32.const 1) (v128.const i8x16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)))
|
|
(assert_return (invoke "v128.load align=16" (i32.const 0)) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))
|
|
|
|
;; Test aligned and unaligned read/write
|
|
|
|
(module
|
|
(memory 1)
|
|
(func (export "v128_unaligned_read_and_write") (result v128)
|
|
(local v128)
|
|
(v128.store (i32.const 0) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))
|
|
(v128.load (i32.const 0))
|
|
)
|
|
(func (export "v128_aligned_read_and_write") (result v128)
|
|
(local v128)
|
|
(v128.store align=2 (i32.const 0) (v128.const i16x8 0 1 2 3 4 5 6 7))
|
|
(v128.load align=2 (i32.const 0))
|
|
)
|
|
(func (export "v128_aligned_read_and_unaligned_write") (result v128)
|
|
(local v128)
|
|
(v128.store (i32.const 0) (v128.const i32x4 0 1 2 3))
|
|
(v128.load align=2 (i32.const 0))
|
|
)
|
|
(func (export "v128_unaligned_read_and_aligned_write") (result v128)
|
|
(local v128)
|
|
(v128.store align=2 (i32.const 0) (v128.const i32x4 0 1 2 3))
|
|
(v128.load (i32.const 0))
|
|
)
|
|
)
|
|
|
|
(assert_return (invoke "v128_unaligned_read_and_write") (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))
|
|
(assert_return (invoke "v128_aligned_read_and_write") (v128.const i16x8 0 1 2 3 4 5 6 7))
|
|
(assert_return (invoke "v128_aligned_read_and_unaligned_write") (v128.const i32x4 0 1 2 3))
|
|
(assert_return (invoke "v128_unaligned_read_and_aligned_write") (v128.const i32x4 0 1 2 3))
|