summaryrefslogtreecommitdiff
path: root/test/passes/alignment-lowering.wast
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2020-07-31 15:45:47 -0700
committerGitHub <noreply@github.com>2020-07-31 15:45:47 -0700
commitae56f9919a7263c7f8df00f0552ee0f302f8d286 (patch)
treea9e970b286be3ab20fa8bd8e4e418e81582a2320 /test/passes/alignment-lowering.wast
parentd09c607ff2f2c264546b7d4ea3593ae75a037750 (diff)
downloadbinaryen-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.wast40
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))
+ )
)