summaryrefslogtreecommitdiff
path: root/test/get-set-local.2asm.js
diff options
context:
space:
mode:
authorNathan Froyd <froydnj@gmail.com>2018-03-23 12:38:07 -0400
committerAlon Zakai <alonzakai@gmail.com>2018-03-23 09:38:07 -0700
commit9c2fa9247333233d3454c546677205b4a3c2e96a (patch)
tree3d6babf3adb4857dd266cf5756dc123112cd0419 /test/get-set-local.2asm.js
parentf7ebc7c0e53241e4604be5321134d48d640f0a40 (diff)
downloadbinaryen-9c2fa9247333233d3454c546677205b4a3c2e96a.tar.gz
binaryen-9c2fa9247333233d3454c546677205b4a3c2e96a.tar.bz2
binaryen-9c2fa9247333233d3454c546677205b4a3c2e96a.zip
remap {get,set}_local indices (#1486)
When lowering i64 values in a function, we create new local variables for all of the i64 local variables, one local for the low bits, and one for the high bits. We create a mapping between the old locals and the new as well. During translation, when we encountered a `get_local` that didn't have type `i64`, we skipped it, on the supposition that there was nothing to do. But that's not true; the local it was getting may have been remapped to a new index in the lowered function, and we need to account for that change. Similar logic holds for `set_local`.
Diffstat (limited to 'test/get-set-local.2asm.js')
-rw-r--r--test/get-set-local.2asm.js74
1 files changed, 74 insertions, 0 deletions
diff --git a/test/get-set-local.2asm.js b/test/get-set-local.2asm.js
new file mode 100644
index 000000000..78c119b78
--- /dev/null
+++ b/test/get-set-local.2asm.js
@@ -0,0 +1,74 @@
+function asmFunc(global, env, buffer) {
+ "use asm";
+ var HEAP8 = new global.Int8Array(buffer);
+ var HEAP16 = new global.Int16Array(buffer);
+ var HEAP32 = new global.Int32Array(buffer);
+ var HEAPU8 = new global.Uint8Array(buffer);
+ var HEAPU16 = new global.Uint16Array(buffer);
+ var HEAPU32 = new global.Uint32Array(buffer);
+ var HEAPF32 = new global.Float32Array(buffer);
+ var HEAPF64 = new global.Float64Array(buffer);
+ var Math_imul = global.Math.imul;
+ var Math_fround = global.Math.fround;
+ var Math_abs = global.Math.abs;
+ var Math_clz32 = global.Math.clz32;
+ var Math_min = global.Math.min;
+ var Math_max = global.Math.max;
+ var i64toi32_i32$HIGH_BITS = 0;
+ function dummy() {
+
+ }
+
+ function $1($0, r, r$hi) {
+ $0 = $0 | 0;
+ r = r | 0;
+ r$hi = r$hi | 0;
+ var i64toi32_i32$0 = 0, result$hi = 0;
+ i64toi32_i32$0 = r$hi;
+ result$hi = i64toi32_i32$0;
+ i64toi32_i32$0 = 0;
+ i64toi32_i32$0 = i64toi32_i32$0;
+ return ($0 | 0) == (r | 0) & (i64toi32_i32$0 | 0) == (result$hi | 0) | 0 | 0;
+ }
+
+ function __wasm_ctz_i32(x) {
+ x = x | 0;
+ var $1 = 0;
+ if ((x | 0) == (0 | 0)) $1 = 32; else $1 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0;
+ return $1 | 0;
+ }
+
+ function __wasm_popcnt_i32(x) {
+ x = x | 0;
+ var count = 0, $2 = 0;
+ count = 0;
+ b : {
+ l : do {
+ $2 = count;
+ if ((x | 0) == (0 | 0)) break b;
+ x = x & (x - 1 | 0) | 0;
+ count = count + 1 | 0;
+ continue l;
+ break l;
+ } while (1);
+ };
+ return $2 | 0;
+ }
+
+ function __wasm_rotl_i32(x, k) {
+ x = x | 0;
+ k = k | 0;
+ return ((4294967295 >>> (k & 31 | 0) | 0) & x | 0) << (k & 31 | 0) | 0 | (((4294967295 << (32 - (k & 31 | 0) | 0) | 0) & x | 0) >>> (32 - (k & 31 | 0) | 0) | 0) | 0 | 0;
+ }
+
+ function __wasm_rotr_i32(x, k) {
+ x = x | 0;
+ k = k | 0;
+ return ((4294967295 << (k & 31 | 0) | 0) & x | 0) >>> (k & 31 | 0) | 0 | (((4294967295 >>> (32 - (k & 31 | 0) | 0) | 0) & x | 0) << (32 - (k & 31 | 0) | 0) | 0) | 0 | 0;
+ }
+
+ return {
+ check_extend_ui32: $1
+ };
+}
+