| ;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. |
| ;; RUN: wasm-ctor-eval %s --ctors=test --kept-exports= --quiet -all -S -o - | filecheck %s |
| |
| ;; Multibyte stores are evaluated at compile time, and the resulting array |
| ;; contents are serialized back into the module as elements of the array's |
| ;; element type. |
| |
| (module |
| ;; CHECK: (type $i32_array (array (mut i32))) |
| (type $i32_array (array (mut i32))) |
| ;; CHECK: (type $i16_array (array (mut i16))) |
| (type $i16_array (array (mut i16))) |
| ;; CHECK: (type $v128_array (array (mut v128))) |
| (type $v128_array (array (mut v128))) |
| |
| ;; CHECK: (global $ctor-eval$global_12 (ref (exact $i32_array)) (array.new_fixed $i32_array 4 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: )) |
| |
| ;; CHECK: (global $ctor-eval$global_13 (ref (exact $i16_array)) (array.new_fixed $i16_array 4 |
| ;; CHECK-NEXT: (i32.const 256) |
| ;; CHECK-NEXT: (i32.const 2) |
| ;; CHECK-NEXT: (i32.const 3) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: )) |
| |
| ;; CHECK: (global $ctor-eval$global_14 (ref (exact $v128_array)) (array.new_fixed $v128_array 1 |
| ;; CHECK-NEXT: (v128.const i32x4 0x00000001 0x00000002 0x00000003 0x00000004) |
| ;; CHECK-NEXT: )) |
| |
| ;; CHECK: (global $i32 (mut (ref null $i32_array)) (global.get $ctor-eval$global_12)) |
| (global $i32 (export "i32") (mut (ref null $i32_array)) (ref.null $i32_array)) |
| ;; CHECK: (global $i16 (mut (ref null $i16_array)) (global.get $ctor-eval$global_13)) |
| (global $i16 (export "i16") (mut (ref null $i16_array)) (ref.null $i16_array)) |
| ;; CHECK: (global $v128 (mut (ref null $v128_array)) (global.get $ctor-eval$global_14)) |
| (global $v128 (export "v128") (mut (ref null $v128_array)) (ref.null $v128_array)) |
| |
| (func $test (export "test") |
| ;; An i64 store covers two i32 elements. |
| (global.set $i32 (array.new_default $i32_array (i32.const 4))) |
| (i64.store (type $i32_array) (global.get $i32) (i32.const 4) |
| (i64.const 0x0000000200000001) |
| ) |
| ;; An unaligned i32 store covers parts of three i16 elements. |
| (global.set $i16 (array.new_default $i16_array (i32.const 4))) |
| (i32.store (type $i16_array) offset=1 (global.get $i16) (i32.const 0) |
| (i32.const 0x03000201) |
| ) |
| ;; A v128 store covers an entire v128 element. |
| (global.set $v128 (array.new_default $v128_array (i32.const 1))) |
| (v128.store (type $v128_array) (global.get $v128) (i32.const 0) |
| (v128.const i32x4 1 2 3 4) |
| ) |
| ) |
| ) |
| ;; CHECK: (export "i32" (global $i32)) |
| |
| ;; CHECK: (export "i16" (global $i16)) |
| |
| ;; CHECK: (export "v128" (global $v128)) |