diff options
Diffstat (limited to 'test/spec/align64.wast')
-rw-r--r-- | test/spec/align64.wast | 866 |
1 files changed, 0 insertions, 866 deletions
diff --git a/test/spec/align64.wast b/test/spec/align64.wast deleted file mode 100644 index da34947f6..000000000 --- a/test/spec/align64.wast +++ /dev/null @@ -1,866 +0,0 @@ -;; Test alignment annotation rules - -(module (memory i64 0) (func (drop (i32.load8_s align=1 (i64.const 0))))) -(module (memory i64 0) (func (drop (i32.load8_u align=1 (i64.const 0))))) -(module (memory i64 0) (func (drop (i32.load16_s align=2 (i64.const 0))))) -(module (memory i64 0) (func (drop (i32.load16_u align=2 (i64.const 0))))) -(module (memory i64 0) (func (drop (i32.load align=4 (i64.const 0))))) -(module (memory i64 0) (func (drop (i64.load8_s align=1 (i64.const 0))))) -(module (memory i64 0) (func (drop (i64.load8_u align=1 (i64.const 0))))) -(module (memory i64 0) (func (drop (i64.load16_s align=2 (i64.const 0))))) -(module (memory i64 0) (func (drop (i64.load16_u align=2 (i64.const 0))))) -(module (memory i64 0) (func (drop (i64.load32_s align=4 (i64.const 0))))) -(module (memory i64 0) (func (drop (i64.load32_u align=4 (i64.const 0))))) -(module (memory i64 0) (func (drop (i64.load align=8 (i64.const 0))))) -(module (memory i64 0) (func (drop (f32.load align=4 (i64.const 0))))) -(module (memory i64 0) (func (drop (f64.load align=8 (i64.const 0))))) -(module (memory i64 0) (func (i32.store8 align=1 (i64.const 0) (i32.const 1)))) -(module (memory i64 0) (func (i32.store16 align=2 (i64.const 0) (i32.const 1)))) -(module (memory i64 0) (func (i32.store align=4 (i64.const 0) (i32.const 1)))) -(module (memory i64 0) (func (i64.store8 align=1 (i64.const 0) (i64.const 1)))) -(module (memory i64 0) (func (i64.store16 align=2 (i64.const 0) (i64.const 1)))) -(module (memory i64 0) (func (i64.store32 align=4 (i64.const 0) (i64.const 1)))) -(module (memory i64 0) (func (i64.store align=8 (i64.const 0) (i64.const 1)))) -(module (memory i64 0) (func (f32.store align=4 (i64.const 0) (f32.const 1.0)))) -(module (memory i64 0) (func (f64.store align=8 (i64.const 0) (f64.const 1.0)))) - -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i32.load8_s align=0 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i32.load8_s align=7 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i32.load8_u align=0 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i32.load8_u align=7 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i32.load16_s align=0 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i32.load16_s align=7 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i32.load16_u align=0 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i32.load16_u align=7 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i32.load align=0 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i32.load align=7 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i64.load8_s align=0 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i64.load8_s align=7 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i64.load8_u align=0 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i64.load8_u align=7 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i64.load16_s align=0 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i64.load16_s align=7 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i64.load16_u align=0 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i64.load16_u align=7 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i64.load32_s align=0 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i64.load32_s align=7 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i64.load32_u align=0 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i64.load32_u align=7 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i64.load align=0 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (i64.load align=7 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (f32.load align=0 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (f32.load align=7 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (f64.load align=0 (i64.const 0)))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (drop (f64.load align=7 (i64.const 0)))))" - ) - "alignment" -) - -(assert_malformed - (module quote - "(module (memory i64 0) (func (i32.store8 align=0 (i64.const 0) (i32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (i32.store8 align=7 (i64.const 0) (i32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (i32.store16 align=0 (i64.const 0) (i32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (i32.store16 align=7 (i64.const 0) (i32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (i32.store align=0 (i64.const 0) (i32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (i32.store align=7 (i64.const 0) (i32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (i64.store8 align=0 (i64.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (i64.store8 align=7 (i64.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (i64.store16 align=0 (i64.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (i64.store16 align=7 (i64.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (i64.store32 align=0 (i64.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (i64.store32 align=7 (i64.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (i64.store align=0 (i64.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (i64.store align=7 (i64.const 0) (i64.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (f32.store align=0 (i64.const 0) (f32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (f32.store align=7 (i64.const 0) (f32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (f64.store align=0 (i64.const 0) (f32.const 0))))" - ) - "alignment" -) -(assert_malformed - (module quote - "(module (memory i64 0) (func (f64.store align=7 (i64.const 0) (f32.const 0))))" - ) - "alignment" -) - -(assert_invalid - (module (memory i64 0) (func (drop (i32.load8_s align=2 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i32.load8_u align=2 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i32.load16_s align=4 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i32.load16_u align=4 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i32.load align=8 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i64.load8_s align=2 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i64.load8_u align=2 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i64.load16_s align=4 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i64.load16_u align=4 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i64.load32_s align=8 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i64.load32_u align=8 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i64.load align=16 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (f32.load align=8 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (f64.load align=16 (i64.const 0))))) - "alignment must not be larger than natural" -) - -(assert_invalid - (module (memory i64 0) (func (drop (i32.load8_s align=2 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i32.load8_u align=2 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i32.load16_s align=4 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i32.load16_u align=4 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i32.load align=8 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i64.load8_s align=2 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i64.load8_u align=2 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i64.load16_s align=4 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i64.load16_u align=4 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i64.load32_s align=8 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i64.load32_u align=8 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (i64.load align=16 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (f32.load align=8 (i64.const 0))))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (drop (f64.load align=16 (i64.const 0))))) - "alignment must not be larger than natural" -) - -(assert_invalid - (module (memory i64 0) (func (i32.store8 align=2 (i64.const 0) (i32.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (i32.store16 align=4 (i64.const 0) (i32.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (i32.store align=8 (i64.const 0) (i32.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (i64.store8 align=2 (i64.const 0) (i64.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (i64.store16 align=4 (i64.const 0) (i64.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (i64.store32 align=8 (i64.const 0) (i64.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (i64.store align=16 (i64.const 0) (i64.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (f32.store align=8 (i64.const 0) (f32.const 0)))) - "alignment must not be larger than natural" -) -(assert_invalid - (module (memory i64 0) (func (f64.store align=16 (i64.const 0) (f64.const 0)))) - "alignment must not be larger than natural" -) - -;; Test aligned and unaligned read/write - -(module - (memory i64 1) - - ;; $default: natural alignment, $1: align=1, $2: align=2, $4: align=4, $8: align=8 - - (func (export "f32_align_switch") (param i32) (result f32) - (local f32 f32) - (local.set 1 (f32.const 10.0)) - (block $4 - (block $2 - (block $1 - (block $default - (block $0 - (br_table $0 $default $1 $2 $4 (local.get 0)) - ) ;; 0 - (f32.store (i64.const 0) (local.get 1)) - (local.set 2 (f32.load (i64.const 0))) - (br $4) - ) ;; default - (f32.store align=1 (i64.const 0) (local.get 1)) - (local.set 2 (f32.load align=1 (i64.const 0))) - (br $4) - ) ;; 1 - (f32.store align=2 (i64.const 0) (local.get 1)) - (local.set 2 (f32.load align=2 (i64.const 0))) - (br $4) - ) ;; 2 - (f32.store align=4 (i64.const 0) (local.get 1)) - (local.set 2 (f32.load align=4 (i64.const 0))) - ) ;; 4 - (local.get 2) - ) - - (func (export "f64_align_switch") (param i32) (result f64) - (local f64 f64) - (local.set 1 (f64.const 10.0)) - (block $8 - (block $4 - (block $2 - (block $1 - (block $default - (block $0 - (br_table $0 $default $1 $2 $4 $8 (local.get 0)) - ) ;; 0 - (f64.store (i64.const 0) (local.get 1)) - (local.set 2 (f64.load (i64.const 0))) - (br $8) - ) ;; default - (f64.store align=1 (i64.const 0) (local.get 1)) - (local.set 2 (f64.load align=1 (i64.const 0))) - (br $8) - ) ;; 1 - (f64.store align=2 (i64.const 0) (local.get 1)) - (local.set 2 (f64.load align=2 (i64.const 0))) - (br $8) - ) ;; 2 - (f64.store align=4 (i64.const 0) (local.get 1)) - (local.set 2 (f64.load align=4 (i64.const 0))) - (br $8) - ) ;; 4 - (f64.store align=8 (i64.const 0) (local.get 1)) - (local.set 2 (f64.load align=8 (i64.const 0))) - ) ;; 8 - (local.get 2) - ) - - ;; $8s: i32/i64.load8_s, $8u: i32/i64.load8_u, $16s: i32/i64.load16_s, $16u: i32/i64.load16_u, $32: i32.load - ;; $32s: i64.load32_s, $32u: i64.load32_u, $64: i64.load - - (func (export "i32_align_switch") (param i32 i32) (result i32) - (local i32 i32) - (local.set 2 (i32.const 10)) - (block $32 - (block $16u - (block $16s - (block $8u - (block $8s - (block $0 - (br_table $0 $8s $8u $16s $16u $32 (local.get 0)) - ) ;; 0 - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i32.store8 (i64.const 0) (local.get 2)) - (local.set 3 (i32.load8_s (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i32.store8 align=1 (i64.const 0) (local.get 2)) - (local.set 3 (i32.load8_s align=1 (i64.const 0))) - ) - ) - (br $32) - ) ;; 8s - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i32.store8 (i64.const 0) (local.get 2)) - (local.set 3 (i32.load8_u (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i32.store8 align=1 (i64.const 0) (local.get 2)) - (local.set 3 (i32.load8_u align=1 (i64.const 0))) - ) - ) - (br $32) - ) ;; 8u - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i32.store16 (i64.const 0) (local.get 2)) - (local.set 3 (i32.load16_s (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i32.store16 align=1 (i64.const 0) (local.get 2)) - (local.set 3 (i32.load16_s align=1 (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i32.store16 align=2 (i64.const 0) (local.get 2)) - (local.set 3 (i32.load16_s align=2 (i64.const 0))) - ) - ) - (br $32) - ) ;; 16s - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i32.store16 (i64.const 0) (local.get 2)) - (local.set 3 (i32.load16_u (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i32.store16 align=1 (i64.const 0) (local.get 2)) - (local.set 3 (i32.load16_u align=1 (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i32.store16 align=2 (i64.const 0) (local.get 2)) - (local.set 3 (i32.load16_u align=2 (i64.const 0))) - ) - ) - (br $32) - ) ;; 16u - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i32.store (i64.const 0) (local.get 2)) - (local.set 3 (i32.load (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i32.store align=1 (i64.const 0) (local.get 2)) - (local.set 3 (i32.load align=1 (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i32.store align=2 (i64.const 0) (local.get 2)) - (local.set 3 (i32.load align=2 (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 4)) - (then - (i32.store align=4 (i64.const 0) (local.get 2)) - (local.set 3 (i32.load align=4 (i64.const 0))) - ) - ) - ) ;; 32 - (local.get 3) - ) - - (func (export "i64_align_switch") (param i32 i32) (result i64) - (local i64 i64) - (local.set 2 (i64.const 10)) - (block $64 - (block $32u - (block $32s - (block $16u - (block $16s - (block $8u - (block $8s - (block $0 - (br_table $0 $8s $8u $16s $16u $32s $32u $64 (local.get 0)) - ) ;; 0 - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i64.store8 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load8_s (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i64.store8 align=1 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load8_s align=1 (i64.const 0))) - ) - ) - (br $64) - ) ;; 8s - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i64.store8 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load8_u (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i64.store8 align=1 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load8_u align=1 (i64.const 0))) - ) - ) - (br $64) - ) ;; 8u - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i64.store16 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load16_s (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i64.store16 align=1 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load16_s align=1 (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i64.store16 align=2 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load16_s align=2 (i64.const 0))) - ) - ) - (br $64) - ) ;; 16s - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i64.store16 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load16_u (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i64.store16 align=1 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load16_u align=1 (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i64.store16 align=2 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load16_u align=2 (i64.const 0))) - ) - ) - (br $64) - ) ;; 16u - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i64.store32 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load32_s (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i64.store32 align=1 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load32_s align=1 (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i64.store32 align=2 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load32_s align=2 (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 4)) - (then - (i64.store32 align=4 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load32_s align=4 (i64.const 0))) - ) - ) - (br $64) - ) ;; 32s - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i64.store32 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load32_u (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i64.store32 align=1 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load32_u align=1 (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i64.store32 align=2 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load32_u align=2 (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 4)) - (then - (i64.store32 align=4 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load32_u align=4 (i64.const 0))) - ) - ) - (br $64) - ) ;; 32u - (if (i32.eq (local.get 1) (i32.const 0)) - (then - (i64.store (i64.const 0) (local.get 2)) - (local.set 3 (i64.load (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 1)) - (then - (i64.store align=1 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load align=1 (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 2)) - (then - (i64.store align=2 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load align=2 (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 4)) - (then - (i64.store align=4 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load align=4 (i64.const 0))) - ) - ) - (if (i32.eq (local.get 1) (i32.const 8)) - (then - (i64.store align=8 (i64.const 0) (local.get 2)) - (local.set 3 (i64.load align=8 (i64.const 0))) - ) - ) - ) ;; 64 - (local.get 3) - ) -) - -(assert_return (invoke "f32_align_switch" (i32.const 0)) (f32.const 10.0)) -(assert_return (invoke "f32_align_switch" (i32.const 1)) (f32.const 10.0)) -(assert_return (invoke "f32_align_switch" (i32.const 2)) (f32.const 10.0)) -(assert_return (invoke "f32_align_switch" (i32.const 3)) (f32.const 10.0)) - -(assert_return (invoke "f64_align_switch" (i32.const 0)) (f64.const 10.0)) -(assert_return (invoke "f64_align_switch" (i32.const 1)) (f64.const 10.0)) -(assert_return (invoke "f64_align_switch" (i32.const 2)) (f64.const 10.0)) -(assert_return (invoke "f64_align_switch" (i32.const 3)) (f64.const 10.0)) -(assert_return (invoke "f64_align_switch" (i32.const 4)) (f64.const 10.0)) - -(assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 0)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 1)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 0)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 1)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 0)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 1)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 2)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 0)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 1)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 2)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 0)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 1)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 2)) (i32.const 10)) -(assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 4)) (i32.const 10)) - -(assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 0)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 1)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 0)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 1)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 0)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 1)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 2)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 0)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 1)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 2)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 0)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 1)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 2)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 4)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 0)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 1)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 2)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 4)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 0)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 1)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 2)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 4)) (i64.const 10)) -(assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 8)) (i64.const 10)) - -;; Test that an i64 store with 4-byte alignment that's 4 bytes out of bounds traps without storing anything - -(module - (memory i64 1) - (func (export "store") (param i64 i64) - (i64.store align=4 (local.get 0) (local.get 1)) - ) - (func (export "load") (param i64) (result i32) - (i32.load (local.get 0)) - ) -) - -(assert_trap (invoke "store" (i64.const 65532) (i64.const -1)) "out of bounds memory access") -;; No memory was changed -(assert_return (invoke "load" (i64.const 65532)) (i32.const 0)) |