unaligned-store64.js (1064B)
1 var ins = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary( 2 `(module 3 (memory (export "mem") 1 1) 4 (func (export "store_32_1") (param $ptr i32) 5 (i64.store32 align=1 (local.get $ptr) (i64.const 0xabba1337))) 6 (func (export "store_32_2") (param $ptr i32) 7 (i64.store32 align=2 (local.get $ptr) (i64.const 0xabba1337))) 8 (func (export "store_16") (param $ptr i32) 9 (i64.store16 align=1 (local.get $ptr) (i64.const 0x1337))))`))).exports; 10 11 var mem = new Uint8Array(ins.mem.buffer); 12 13 ins.store_16(1); 14 assertEq(mem[1], 0x37); 15 assertEq(mem[2], 0x13); 16 17 ins.store_32_1(11); 18 assertEq(mem[11], 0x37); 19 assertEq(mem[12], 0x13); 20 assertEq(mem[13], 0xba); 21 assertEq(mem[14], 0xab); 22 23 ins.store_32_2(18); 24 assertEq(mem[18], 0x37); 25 assertEq(mem[19], 0x13); 26 assertEq(mem[20], 0xba); 27 assertEq(mem[21], 0xab); 28 29 // This must also work on all platforms even though we're lying about the 30 // alignment. 31 ins.store_32_2(29); 32 assertEq(mem[29], 0x37); 33 assertEq(mem[30], 0x13); 34 assertEq(mem[31], 0xba); 35 assertEq(mem[32], 0xab);