summaryrefslogtreecommitdiff
path: root/test/wasm2js/unaligned.2asm.js.opt
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2019-05-02 11:41:34 -0700
committerGitHub <noreply@github.com>2019-05-02 11:41:34 -0700
commit01a4bfdb5c28d54fd480d603cba2d35c943a0bf5 (patch)
tree0bdeeb9096c8c7dec33a990022f920ebadfbd252 /test/wasm2js/unaligned.2asm.js.opt
parent3b4d9013c6c2dd6cfa90e02e2307a758a0f91140 (diff)
downloadbinaryen-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.opt66
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 = [];