diff options
author | Alon Zakai <azakai@google.com> | 2020-07-31 15:45:47 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-31 15:45:47 -0700 |
commit | ae56f9919a7263c7f8df00f0552ee0f302f8d286 (patch) | |
tree | a9e970b286be3ab20fa8bd8e4e418e81582a2320 /test/passes/alignment-lowering.wast | |
parent | d09c607ff2f2c264546b7d4ea3593ae75a037750 (diff) | |
download | binaryen-ae56f9919a7263c7f8df00f0552ee0f302f8d286.tar.gz binaryen-ae56f9919a7263c7f8df00f0552ee0f302f8d286.tar.bz2 binaryen-ae56f9919a7263c7f8df00f0552ee0f302f8d286.zip |
AlignmentLowering: Handle all possible cases for i64, f32, f64 (#3008)
Previously we only handled i32. That was enough for all real-world code
people have run through wasm2js apparently (which is the only place the
pass is needed - it lowers unaligned loads to individual loads etc., as
unaligned operations fail in JS). Apparently it's pretty rare to have
unaligned f32 loads for example.
This will be useful in fuzzing wasm2js, as without this we can't compare
results to the interpreter (which does alignment properly).
Diffstat (limited to 'test/passes/alignment-lowering.wast')
-rw-r--r-- | test/passes/alignment-lowering.wast | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/test/passes/alignment-lowering.wast b/test/passes/alignment-lowering.wast index 135fd281e..bbfdd5cb2 100644 --- a/test/passes/alignment-lowering.wast +++ b/test/passes/alignment-lowering.wast @@ -60,4 +60,44 @@ (drop (i32.load16_s offset=100 align=2 (i32.const 4))) (drop (i32.load16_s offset=100 align=1 (unreachable))) ) + (func $i64-load + (drop (i64.load align=1 (i32.const 12))) + (drop (i64.load align=2 (i32.const 16))) + (drop (i64.load align=4 (i32.const 20))) + (drop (i64.load align=1 offset=3 (i32.const 20))) + (drop (i64.load16_s align=1 (i32.const 28))) + (drop (i64.load32_s align=1 (i32.const 32))) + (drop (i64.load16_u align=1 (i32.const 40))) + (drop (i64.load32_u align=1 (i32.const 44))) + ) + (func $f32-load + (drop (f32.load align=1 (i32.const 12))) + (drop (f32.load align=2 (i32.const 16))) + (drop (f32.load align=1 offset=3 (i32.const 20))) + ) + (func $f64-load + (drop (f64.load align=1 (i32.const 12))) + (drop (f64.load align=2 (i32.const 16))) + (drop (f64.load align=4 (i32.const 20))) + (drop (f64.load align=1 offset=3 (i32.const 20))) + ) + (func $i64-store + (i64.store align=1 (i32.const 12) (i64.const 100)) + (i64.store align=2 (i32.const 16) (i64.const 200)) + (i64.store align=4 (i32.const 20) (i64.const 300)) + (i64.store align=1 offset=3 (i32.const 24) (i64.const 400)) + (i64.store16 align=1 (i32.const 20) (i64.const 600)) + (i64.store32 align=1 (i32.const 20) (i64.const 700)) + ) + (func $f32-store + (f32.store align=1 (i32.const 12) (f32.const 100)) + (f32.store align=2 (i32.const 16) (f32.const 200)) + (f32.store align=1 offset=3 (i32.const 24) (f32.const 400)) + ) + (func $f64-store + (f64.store align=1 (i32.const 12) (f64.const 100)) + (f64.store align=2 (i32.const 16) (f64.const 200)) + (f64.store align=4 (i32.const 20) (f64.const 300)) + (f64.store align=1 offset=3 (i32.const 24) (f64.const 400)) + ) ) |