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/unaligned.2asm.js.opt | |
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/unaligned.2asm.js.opt')
-rw-r--r-- | test/wasm2js/unaligned.2asm.js.opt | 66 |
1 files changed, 46 insertions, 20 deletions
diff --git a/test/wasm2js/unaligned.2asm.js.opt b/test/wasm2js/unaligned.2asm.js.opt index 448e35abd..8a069f083 100644 --- a/test/wasm2js/unaligned.2asm.js.opt +++ b/test/wasm2js/unaligned.2asm.js.opt @@ -51,48 +51,74 @@ function asmFunc(global, env, buffer) { var setTempRet0 = env.setTempRet0; var i64toi32_i32$HIGH_BITS = 0; function $0() { - var wasm2js_i32$0 = 0; - return (wasm2js_i32$0 = 0, HEAPU8[wasm2js_i32$0 | 0] | HEAPU8[wasm2js_i32$0 + 1 | 0] << 8 | HEAPU8[wasm2js_i32$0 + 2 | 0] << 16 | HEAPU8[wasm2js_i32$0 + 3 | 0] << 24) | 0; + var $0_1 = 0; + return HEAPU8[0 | 0] | HEAPU8[$0_1 + 1 | 0] << 8 | (HEAPU8[$0_1 + 2 | 0] << 16 | HEAPU8[$0_1 + 3 | 0] << 24); + } + + function $1() { + var $0_1 = 0, $1_1 = 0; + $0_1 = HEAPU8[0 | 0] | HEAPU8[$0_1 + 1 | 0] << 8 | (HEAPU8[$0_1 + 2 | 0] << 16 | HEAPU8[$0_1 + 3 | 0] << 24); + i64toi32_i32$HIGH_BITS = HEAPU8[$1_1 + 4 | 0] | HEAPU8[$1_1 + 5 | 0] << 8 | (HEAPU8[$1_1 + 6 | 0] << 16 | HEAPU8[$1_1 + 7 | 0] << 24); + return $0_1 | 0; } function $2() { - var wasm2js_i32$0 = 0; - return Math_fround((wasm2js_scratch_store_i32(0, (wasm2js_i32$0 = 0, HEAPU8[wasm2js_i32$0 | 0] | HEAPU8[wasm2js_i32$0 + 1 | 0] << 8 | HEAPU8[wasm2js_i32$0 + 2 | 0] << 16 | HEAPU8[wasm2js_i32$0 + 3 | 0] << 24)), wasm2js_scratch_load_f32())); + var $0_1 = 0; + return Math_fround((wasm2js_scratch_store_i32(0, HEAPU8[0 | 0] | HEAPU8[$0_1 + 1 | 0] << 8 | (HEAPU8[$0_1 + 2 | 0] << 16 | HEAPU8[$0_1 + 3 | 0] << 24)), wasm2js_scratch_load_f32())); } function $3() { - var $0_1 = 0, wasm2js_i32$0 = 0; - $0_1 = (wasm2js_i32$0 = $0_1, HEAPU8[wasm2js_i32$0 + 4 | 0] | HEAPU8[wasm2js_i32$0 + 5 | 0] << 8 | HEAPU8[wasm2js_i32$0 + 6 | 0] << 16 | HEAPU8[wasm2js_i32$0 + 7 | 0] << 24); - wasm2js_scratch_store_i32(0 | 0, (wasm2js_i32$0 = 0, HEAPU8[wasm2js_i32$0 | 0] | HEAPU8[wasm2js_i32$0 + 1 | 0] << 8 | HEAPU8[wasm2js_i32$0 + 2 | 0] << 16 | HEAPU8[wasm2js_i32$0 + 3 | 0] << 24) | 0); + var $0_1 = 0, $1_1 = 0; + $1_1 = HEAPU8[0 | 0] | HEAPU8[$1_1 + 1 | 0] << 8 | (HEAPU8[$1_1 + 2 | 0] << 16 | HEAPU8[$1_1 + 3 | 0] << 24); + $0_1 = HEAPU8[$0_1 + 4 | 0] | HEAPU8[$0_1 + 5 | 0] << 8 | (HEAPU8[$0_1 + 6 | 0] << 16 | HEAPU8[$0_1 + 7 | 0] << 24); + wasm2js_scratch_store_i32(0 | 0, $1_1 | 0); wasm2js_scratch_store_i32(1 | 0, $0_1 | 0); return +wasm2js_scratch_load_f64(); } function $4() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; - (wasm2js_i32$0 = 0, wasm2js_i32$1 = 0), ((HEAP8[wasm2js_i32$0 | 0] = wasm2js_i32$1, HEAP8[wasm2js_i32$0 + 1 | 0] = wasm2js_i32$1 >>> 8), HEAP8[wasm2js_i32$0 + 2 | 0] = wasm2js_i32$1 >>> 16), HEAP8[wasm2js_i32$0 + 3 | 0] = wasm2js_i32$1 >>> 24; + var $0_1 = 0, $1_1 = 0; + HEAP8[0 | 0] = 0; + HEAP8[$0_1 + 1 | 0] = $1_1 >>> 8; + HEAP8[$0_1 + 2 | 0] = $1_1 >>> 16; + HEAP8[$0_1 + 3 | 0] = $1_1 >>> 24; } function $5() { - var $0_1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; - (wasm2js_i32$0 = 0, wasm2js_i32$1 = 0), ((HEAP8[wasm2js_i32$0 | 0] = wasm2js_i32$1, HEAP8[wasm2js_i32$0 + 1 | 0] = wasm2js_i32$1 >>> 8), HEAP8[wasm2js_i32$0 + 2 | 0] = wasm2js_i32$1 >>> 16), HEAP8[wasm2js_i32$0 + 3 | 0] = wasm2js_i32$1 >>> 24; - (wasm2js_i32$0 = $0_1, wasm2js_i32$1 = 0), ((HEAP8[wasm2js_i32$0 + 4 | 0] = wasm2js_i32$1, HEAP8[wasm2js_i32$0 + 5 | 0] = wasm2js_i32$1 >>> 8), HEAP8[wasm2js_i32$0 + 6 | 0] = wasm2js_i32$1 >>> 16), HEAP8[wasm2js_i32$0 + 7 | 0] = wasm2js_i32$1 >>> 24; + var $0_1 = 0, $1_1 = 0, $2_1 = 0; + HEAP8[0 | 0] = 0; + HEAP8[$0_1 + 1 | 0] = $2_1 >>> 8; + HEAP8[$0_1 + 2 | 0] = $2_1 >>> 16; + HEAP8[$0_1 + 3 | 0] = $2_1 >>> 24; + HEAP8[$1_1 + 4 | 0] = 0; + HEAP8[$1_1 + 5 | 0] = $0_1 >>> 8; + HEAP8[$1_1 + 6 | 0] = $0_1 >>> 16; + HEAP8[$1_1 + 7 | 0] = $0_1 >>> 24; } function $7() { - var $0_1 = 0, $1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + var $0_1 = 0, $1_1 = 0, $2_1 = 0, $3_1 = 0; wasm2js_scratch_store_f64(0.0); $0_1 = wasm2js_scratch_load_i32(1 | 0) | 0; - (wasm2js_i32$0 = 0, wasm2js_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0), ((HEAP8[wasm2js_i32$0 | 0] = wasm2js_i32$1, HEAP8[wasm2js_i32$0 + 1 | 0] = wasm2js_i32$1 >>> 8), HEAP8[wasm2js_i32$0 + 2 | 0] = wasm2js_i32$1 >>> 16), HEAP8[wasm2js_i32$0 + 3 | 0] = wasm2js_i32$1 >>> 24; - (wasm2js_i32$0 = $1, wasm2js_i32$1 = $0_1), ((HEAP8[wasm2js_i32$0 + 4 | 0] = wasm2js_i32$1, HEAP8[wasm2js_i32$0 + 5 | 0] = wasm2js_i32$1 >>> 8), HEAP8[wasm2js_i32$0 + 6 | 0] = wasm2js_i32$1 >>> 16), HEAP8[wasm2js_i32$0 + 7 | 0] = wasm2js_i32$1 >>> 24; + $1_1 = wasm2js_scratch_load_i32(0 | 0) | 0; + HEAP8[0 | 0] = $1_1; + HEAP8[$3_1 + 1 | 0] = $1_1 >>> 8; + HEAP8[$3_1 + 2 | 0] = $1_1 >>> 16; + HEAP8[$3_1 + 3 | 0] = $1_1 >>> 24; + HEAP8[$2_1 + 4 | 0] = $0_1; + HEAP8[$2_1 + 5 | 0] = $0_1 >>> 8; + HEAP8[$2_1 + 6 | 0] = $0_1 >>> 16; + HEAP8[$2_1 + 7 | 0] = $0_1 >>> 24; } function legalstub$1() { - var $0_1 = 0, wasm2js_i32$0 = 0; - $0_1 = (wasm2js_i32$0 = 0, HEAPU8[wasm2js_i32$0 | 0] | HEAPU8[wasm2js_i32$0 + 1 | 0] << 8 | HEAPU8[wasm2js_i32$0 + 2 | 0] << 16 | HEAPU8[wasm2js_i32$0 + 3 | 0] << 24); - i64toi32_i32$HIGH_BITS = (wasm2js_i32$0 = 4, HEAPU8[wasm2js_i32$0 | 0] | HEAPU8[wasm2js_i32$0 + 1 | 0] << 8 | HEAPU8[wasm2js_i32$0 + 2 | 0] << 16 | HEAPU8[wasm2js_i32$0 + 3 | 0] << 24); - setTempRet0(i64toi32_i32$HIGH_BITS | 0); - return $0_1; + var $0_1 = 0, $1_1 = 0, $2_1 = 0, $3_1 = 0; + $1_1 = $1(); + $2_1 = i64toi32_i32$HIGH_BITS; + $3_1 = 32; + $0_1 = $3_1 & 31; + setTempRet0((32 >>> 0 <= $3_1 >>> 0 ? $2_1 >>> $0_1 : ((1 << $0_1) - 1 & $2_1) << 32 - $0_1 | $1_1 >>> $0_1) | 0); + return $1_1; } var FUNCTION_TABLE = []; |