diff options
author | Alon Zakai <azakai@google.com> | 2019-05-02 11:41:34 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-02 11:41:34 -0700 |
commit | 01a4bfdb5c28d54fd480d603cba2d35c943a0bf5 (patch) | |
tree | 0bdeeb9096c8c7dec33a990022f920ebadfbd252 /test/wasm2js/address.2asm.js | |
parent | 3b4d9013c6c2dd6cfa90e02e2307a758a0f91140 (diff) | |
download | binaryen-01a4bfdb5c28d54fd480d603cba2d35c943a0bf5.tar.gz binaryen-01a4bfdb5c28d54fd480d603cba2d35c943a0bf5.tar.bz2 binaryen-01a4bfdb5c28d54fd480d603cba2d35c943a0bf5.zip |
Add a pass to lower unaligned loads and stores (#2078)
This replaces the wasm2js code that lowered them to pessimistic (1-byte aligned) loads and stores. The new pass will do the optimal thing, keeping 2-byte alignment where possible.
This is also nicer as a standalone pass, which has the simple property that after it runs all loads and stores are aligned, instead of some code scattered inside wasm2js.
Diffstat (limited to 'test/wasm2js/address.2asm.js')
-rw-r--r-- | test/wasm2js/address.2asm.js | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/test/wasm2js/address.2asm.js b/test/wasm2js/address.2asm.js index 3863702fd..fe8805d52 100644 --- a/test/wasm2js/address.2asm.js +++ b/test/wasm2js/address.2asm.js @@ -25,20 +25,19 @@ function asmFunc(global, env, buffer) { var print = env.print; function $0(i) { i = i | 0; - var wasm2js_i32$0 = 0; print(HEAPU8[i >> 0] | 0 | 0); print(HEAPU8[(i + 1 | 0) >> 0] | 0 | 0); print(HEAPU8[(i + 2 | 0) >> 0] | 0 | 0); print(HEAPU8[(i + 25 | 0) >> 0] | 0 | 0); print(HEAPU16[i >> 1] | 0 | 0); - print((wasm2js_i32$0 = i, HEAPU8[wasm2js_i32$0 >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 1 | 0) >> 0] | 0 | 0) << 8) | 0); - print((wasm2js_i32$0 = i, HEAPU8[(wasm2js_i32$0 + 1 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 2 | 0) >> 0] | 0 | 0) << 8) | 0); + print(HEAPU8[i >> 0] | 0 | ((HEAPU8[(i + 1 | 0) >> 0] | 0) << 8 | 0) | 0 | 0); + print(HEAPU8[(i + 1 | 0) >> 0] | 0 | ((HEAPU8[(i + 2 | 0) >> 0] | 0) << 8 | 0) | 0 | 0); print(HEAPU16[(i + 2 | 0) >> 1] | 0 | 0); - print((wasm2js_i32$0 = i, HEAPU8[(wasm2js_i32$0 + 25 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 26 | 0) >> 0] | 0 | 0) << 8) | 0); + print(HEAPU8[(i + 25 | 0) >> 0] | 0 | ((HEAPU8[(i + 26 | 0) >> 0] | 0) << 8 | 0) | 0 | 0); print(HEAP32[i >> 2] | 0 | 0); - print((wasm2js_i32$0 = i, HEAPU8[(wasm2js_i32$0 + 1 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 2 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2js_i32$0 + 3 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2js_i32$0 + 4 | 0) >> 0] | 0 | 0) << 24) | 0); - print((wasm2js_i32$0 = i, HEAPU8[(wasm2js_i32$0 + 2 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 3 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2js_i32$0 + 4 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2js_i32$0 + 5 | 0) >> 0] | 0 | 0) << 24) | 0); - print((wasm2js_i32$0 = i, HEAPU8[(wasm2js_i32$0 + 25 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 26 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2js_i32$0 + 27 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2js_i32$0 + 28 | 0) >> 0] | 0 | 0) << 24) | 0); + print(HEAPU8[(i + 1 | 0) >> 0] | 0 | ((HEAPU8[(i + 2 | 0) >> 0] | 0) << 8 | 0) | 0 | ((HEAPU8[(i + 3 | 0) >> 0] | 0) << 16 | 0 | ((HEAPU8[(i + 4 | 0) >> 0] | 0) << 24 | 0) | 0) | 0 | 0); + print(HEAPU16[(i + 2 | 0) >> 1] | 0 | ((HEAPU16[(i + 4 | 0) >> 1] | 0) << 16 | 0) | 0 | 0); + print(HEAPU8[(i + 25 | 0) >> 0] | 0 | ((HEAPU8[(i + 26 | 0) >> 0] | 0) << 8 | 0) | 0 | ((HEAPU8[(i + 27 | 0) >> 0] | 0) << 16 | 0 | ((HEAPU8[(i + 28 | 0) >> 0] | 0) << 24 | 0) | 0) | 0 | 0); } function $1(i) { |