diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/passes/remove-non-js-ops.txt | 1118 | ||||
-rw-r--r-- | test/passes/remove-non-js-ops.wast | 15 | ||||
-rw-r--r-- | test/wasm2asm/br_table_temp.2asm.js | 57 | ||||
-rw-r--r-- | test/wasm2asm/conversions-modified.2asm.js | 21 | ||||
-rw-r--r-- | test/wasm2asm/f32.2asm.js | 40 | ||||
-rw-r--r-- | test/wasm2asm/f64.2asm.js | 40 | ||||
-rw-r--r-- | test/wasm2asm/float_misc.2asm.js | 84 | ||||
-rw-r--r-- | test/wasm2asm/i32.2asm.js | 58 | ||||
-rw-r--r-- | test/wasm2asm/i64-ctz.2asm.js | 158 | ||||
-rw-r--r-- | test/wasm2asm/i64-ctz.wast | 8 | ||||
-rw-r--r-- | test/wasm2asm/i64-rotate.2asm.js | 292 | ||||
-rw-r--r-- | test/wasm2asm/i64.2asm.js | 1734 | ||||
-rw-r--r-- | test/wasm2asm/unary-ops.2asm.js | 171 |
13 files changed, 3385 insertions, 411 deletions
diff --git a/test/passes/remove-non-js-ops.txt b/test/passes/remove-non-js-ops.txt index d326b51ea..528b7eaf7 100644 --- a/test/passes/remove-non-js-ops.txt +++ b/test/passes/remove-non-js-ops.txt @@ -2,9 +2,10 @@ (type $0 (func (param f64 f64) (result f64))) (type $1 (func (param f32 f32) (result f32))) (type $2 (func (param i32 i32) (result i32))) - (type $3 (func (param f64) (result f64))) - (type $4 (func (param f32) (result f32))) - (type $5 (func (param i32) (result i32))) + (type $3 (func (param i64 i64) (result i64))) + (type $4 (func (param f64) (result f64))) + (type $5 (func (param f32) (result f32))) + (type $6 (func (param i32) (result i32))) (func $copysign64 (; 0 ;) (type $0) (param $0 f64) (param $1 f64) (result f64) (f64.reinterpret/i64 (i64.or @@ -53,315 +54,1070 @@ (get_local $1) ) ) - (func $nearest64 (; 4 ;) (type $3) (param $0 f64) (result f64) + (func $rotl64 (; 4 ;) (type $3) (param $0 i64) (param $1 i64) (result i64) + (call $__wasm_rotl_i64 + (get_local $0) + (get_local $1) + ) + ) + (func $rotr64 (; 5 ;) (type $3) (param $0 i64) (param $1 i64) (result i64) + (call $__wasm_rotr_i64 + (get_local $0) + (get_local $1) + ) + ) + (func $nearest64 (; 6 ;) (type $4) (param $0 f64) (result f64) (call $__wasm_nearest_f64 (get_local $0) ) ) - (func $nearest32 (; 5 ;) (type $4) (param $0 f32) (result f32) + (func $nearest32 (; 7 ;) (type $5) (param $0 f32) (result f32) (call $__wasm_nearest_f32 (get_local $0) ) ) - (func $trunc64 (; 6 ;) (type $3) (param $0 f64) (result f64) + (func $trunc64 (; 8 ;) (type $4) (param $0 f64) (result f64) (call $__wasm_trunc_f64 (get_local $0) ) ) - (func $trunc32 (; 7 ;) (type $4) (param $0 f32) (result f32) + (func $trunc32 (; 9 ;) (type $5) (param $0 f32) (result f32) (call $__wasm_trunc_f32 (get_local $0) ) ) - (func $popcnt32 (; 8 ;) (type $5) (param $0 i32) (result i32) + (func $popcnt32 (; 10 ;) (type $6) (param $0 i32) (result i32) (call $__wasm_popcnt_i32 (get_local $0) ) ) - (func $ctz32 (; 9 ;) (type $5) (param $0 i32) (result i32) + (func $ctz32 (; 11 ;) (type $6) (param $0 i32) (result i32) (call $__wasm_ctz_i32 (get_local $0) ) ) - (func $__wasm_nearest_f32 (; 10 ;) (param $0 f32) (result f32) - (local $1 f32) - (local $2 f32) - (local $3 f32) - (local $4 f32) - (local $5 f32) - (set_local $1 - (f32.ceil - (get_local $0) - ) + (func $i64_sdiv (; 12 ;) (type $3) (param $0 i64) (param $1 i64) (result i64) + (call $__wasm_i64_sdiv + (get_local $0) + (get_local $1) ) - (set_local $2 - (f32.floor - (get_local $0) - ) + ) + (func $i64_udiv (; 13 ;) (type $3) (param $0 i64) (param $1 i64) (result i64) + (call $__wasm_i64_udiv + (get_local $0) + (get_local $1) ) - (set_local $3 - (f32.sub - (get_local $0) - (get_local $2) - ) + ) + (func $i64_srem (; 14 ;) (type $3) (param $0 i64) (param $1 i64) (result i64) + (call $__wasm_i64_srem + (get_local $0) + (get_local $1) ) - (if (result f32) - (f32.lt - (get_local $3) - (f32.const 0.5) + ) + (func $i64_urem (; 15 ;) (type $3) (param $0 i64) (param $1 i64) (result i64) + (call $__wasm_i64_urem + (get_local $0) + (get_local $1) + ) + ) + (func $i64_mul (; 16 ;) (type $3) (param $0 i64) (param $1 i64) (result i64) + (call $__wasm_i64_mul + (get_local $0) + (get_local $1) + ) + ) + (func $_ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE (; 17 ;) (param $var$0 i64) (param $var$1 i64) (result i64) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i32) + (local $var$6 i32) + (i64.or + (i64.shl + (i64.extend_u/i32 + (i32.add + (i32.add + (i32.add + (i32.add + (i32.mul + (tee_local $var$4 + (i32.shr_u + (tee_local $var$2 + (i32.wrap/i64 + (get_local $var$1) + ) + ) + (i32.const 16) + ) + ) + (tee_local $var$5 + (i32.shr_u + (tee_local $var$3 + (i32.wrap/i64 + (get_local $var$0) + ) + ) + (i32.const 16) + ) + ) + ) + (i32.mul + (get_local $var$2) + (i32.wrap/i64 + (i64.shr_u + (get_local $var$0) + (i64.const 32) + ) + ) + ) + ) + (i32.mul + (i32.wrap/i64 + (i64.shr_u + (get_local $var$1) + (i64.const 32) + ) + ) + (get_local $var$3) + ) + ) + (i32.shr_u + (tee_local $var$2 + (i32.add + (i32.shr_u + (tee_local $var$6 + (i32.mul + (tee_local $var$2 + (i32.and + (get_local $var$2) + (i32.const 65535) + ) + ) + (tee_local $var$3 + (i32.and + (get_local $var$3) + (i32.const 65535) + ) + ) + ) + ) + (i32.const 16) + ) + (i32.mul + (get_local $var$2) + (get_local $var$5) + ) + ) + ) + (i32.const 16) + ) + ) + (i32.shr_u + (tee_local $var$2 + (i32.add + (i32.and + (get_local $var$2) + (i32.const 65535) + ) + (i32.mul + (get_local $var$4) + (get_local $var$3) + ) + ) + ) + (i32.const 16) + ) + ) + ) + (i64.const 32) ) - (get_local $2) - (if (result f32) - (f32.gt - (get_local $3) - (f32.const 0.5) + (i64.extend_u/i32 + (i32.or + (i32.shl + (get_local $var$2) + (i32.const 16) + ) + (i32.and + (get_local $var$6) + (i32.const 65535) + ) ) - (get_local $1) - (block (result f32) - (set_local $4 - (f32.div - (get_local $2) - (f32.const 2) + ) + ) + ) + (func $_ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E (; 18 ;) (param $var$0 i64) (param $var$1 i64) (result i64) + (local $var$2 i64) + (i64.sub + (i64.xor + (call $__wasm_i64_udiv + (i64.sub + (i64.xor + (tee_local $var$2 + (i64.shr_s + (get_local $var$0) + (i64.const 63) + ) + ) + (get_local $var$0) ) + (get_local $var$2) ) - (if (result f32) - (f32.eq - (f32.sub - (get_local $4) - (f32.floor - (get_local $4) + (i64.sub + (i64.xor + (tee_local $var$2 + (i64.shr_s + (get_local $var$1) + (i64.const 63) ) ) - (f32.const 0) + (get_local $var$1) ) - (get_local $2) - (get_local $1) + (get_local $var$2) + ) + ) + (tee_local $var$0 + (i64.shr_s + (i64.xor + (get_local $var$1) + (get_local $var$0) + ) + (i64.const 63) ) ) ) + (get_local $var$0) ) ) - (func $__wasm_nearest_f64 (; 11 ;) (param $0 f64) (result f64) - (local $1 f64) - (local $2 f64) - (local $3 f64) - (local $4 f64) - (local $5 f64) - (set_local $1 - (f64.ceil - (get_local $0) - ) - ) - (set_local $2 - (f64.floor - (get_local $0) - ) - ) - (set_local $3 - (f64.sub - (get_local $0) - (get_local $2) + (func $_ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E (; 19 ;) (param $var$0 i64) (param $var$1 i64) (result i64) + (local $var$2 i64) + (i64.sub + (i64.xor + (call $__wasm_i64_urem + (i64.sub + (i64.xor + (tee_local $var$2 + (i64.shr_s + (get_local $var$0) + (i64.const 63) + ) + ) + (get_local $var$0) + ) + (get_local $var$2) + ) + (i64.sub + (i64.xor + (tee_local $var$0 + (i64.shr_s + (get_local $var$1) + (i64.const 63) + ) + ) + (get_local $var$1) + ) + (get_local $var$0) + ) + ) + (get_local $var$2) ) + (get_local $var$2) ) - (if (result f64) - (f64.lt - (get_local $3) - (f64.const 0.5) - ) - (get_local $2) - (if (result f64) - (f64.gt - (get_local $3) - (f64.const 0.5) + ) + (func $_ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E (; 20 ;) (param $var$0 i64) (param $var$1 i64) (result i64) + (local $var$2 i32) + (local $var$3 i32) + (local $var$4 i32) + (local $var$5 i64) + (local $var$6 i64) + (local $var$7 i64) + (local $var$8 i64) + (block $label$1 + (block $label$2 + (block $label$3 + (block $label$4 + (block $label$5 + (block $label$6 + (block $label$7 + (block $label$8 + (block $label$9 + (block $label$10 + (block $label$11 + (if + (tee_local $var$2 + (i32.wrap/i64 + (i64.shr_u + (get_local $var$0) + (i64.const 32) + ) + ) + ) + (block $block + (br_if $label$11 + (i32.eqz + (tee_local $var$3 + (i32.wrap/i64 + (get_local $var$1) + ) + ) + ) + ) + (br_if $label$9 + (i32.eqz + (tee_local $var$4 + (i32.wrap/i64 + (i64.shr_u + (get_local $var$1) + (i64.const 32) + ) + ) + ) + ) + ) + (br_if $label$8 + (i32.le_u + (tee_local $var$2 + (i32.sub + (i32.clz + (get_local $var$4) + ) + (i32.clz + (get_local $var$2) + ) + ) + ) + (i32.const 31) + ) + ) + (br $label$2) + ) + ) + (br_if $label$2 + (i64.ge_u + (get_local $var$1) + (i64.const 4294967296) + ) + ) + (i64.store + (i32.const 1024) + (i64.extend_u/i32 + (i32.sub + (tee_local $var$2 + (i32.wrap/i64 + (get_local $var$0) + ) + ) + (i32.mul + (tee_local $var$2 + (i32.div_u + (get_local $var$2) + (tee_local $var$3 + (i32.wrap/i64 + (get_local $var$1) + ) + ) + ) + ) + (get_local $var$3) + ) + ) + ) + ) + (return + (i64.extend_u/i32 + (get_local $var$2) + ) + ) + ) + (set_local $var$3 + (i32.wrap/i64 + (i64.shr_u + (get_local $var$1) + (i64.const 32) + ) + ) + ) + (br_if $label$7 + (i32.eqz + (i32.wrap/i64 + (get_local $var$0) + ) + ) + ) + (br_if $label$6 + (i32.eqz + (get_local $var$3) + ) + ) + (br_if $label$6 + (i32.and + (tee_local $var$4 + (i32.add + (get_local $var$3) + (i32.const -1) + ) + ) + (get_local $var$3) + ) + ) + (i64.store + (i32.const 1024) + (i64.or + (i64.shl + (i64.extend_u/i32 + (i32.and + (get_local $var$4) + (get_local $var$2) + ) + ) + (i64.const 32) + ) + (i64.and + (get_local $var$0) + (i64.const 4294967295) + ) + ) + ) + (return + (i64.extend_u/i32 + (i32.shr_u + (get_local $var$2) + (i32.and + (call $__wasm_ctz_i32 + (get_local $var$3) + ) + (i32.const 31) + ) + ) + ) + ) + ) + (unreachable) + ) + (br_if $label$5 + (i32.eqz + (i32.and + (tee_local $var$4 + (i32.add + (get_local $var$3) + (i32.const -1) + ) + ) + (get_local $var$3) + ) + ) + ) + (set_local $var$3 + (i32.sub + (i32.const 0) + (tee_local $var$2 + (i32.sub + (i32.add + (i32.clz + (get_local $var$3) + ) + (i32.const 33) + ) + (i32.clz + (get_local $var$2) + ) + ) + ) + ) + ) + (br $label$3) + ) + (set_local $var$3 + (i32.sub + (i32.const 63) + (get_local $var$2) + ) + ) + (set_local $var$2 + (i32.add + (get_local $var$2) + (i32.const 1) + ) + ) + (br $label$3) + ) + (i64.store + (i32.const 1024) + (i64.shl + (i64.extend_u/i32 + (i32.sub + (get_local $var$2) + (i32.mul + (tee_local $var$4 + (i32.div_u + (get_local $var$2) + (get_local $var$3) + ) + ) + (get_local $var$3) + ) + ) + ) + (i64.const 32) + ) + ) + (return + (i64.extend_u/i32 + (get_local $var$4) + ) + ) + ) + (br_if $label$4 + (i32.lt_u + (tee_local $var$2 + (i32.sub + (i32.clz + (get_local $var$3) + ) + (i32.clz + (get_local $var$2) + ) + ) + ) + (i32.const 31) + ) + ) + (br $label$2) + ) + (i64.store + (i32.const 1024) + (i64.extend_u/i32 + (i32.and + (get_local $var$4) + (i32.wrap/i64 + (get_local $var$0) + ) + ) + ) + ) + (br_if $label$1 + (i32.eq + (get_local $var$3) + (i32.const 1) + ) + ) + (return + (i64.shr_u + (get_local $var$0) + (i64.extend_u/i32 + (call $__wasm_ctz_i32 + (get_local $var$3) + ) + ) + ) + ) + ) + (set_local $var$3 + (i32.sub + (i32.const 63) + (get_local $var$2) + ) + ) + (set_local $var$2 + (i32.add + (get_local $var$2) + (i32.const 1) + ) + ) ) - (get_local $1) - (block (result f64) - (set_local $4 - (f64.div - (get_local $2) - (f64.const 2) + (set_local $var$5 + (i64.shr_u + (get_local $var$0) + (i64.extend_u/i32 + (i32.and + (get_local $var$2) + (i32.const 63) + ) ) ) - (if (result f64) - (f64.eq - (f64.sub - (get_local $4) - (f64.floor - (get_local $4) + ) + (set_local $var$0 + (i64.shl + (get_local $var$0) + (i64.extend_u/i32 + (i32.and + (get_local $var$3) + (i32.const 63) + ) + ) + ) + ) + (block $label$13 + (if + (get_local $var$2) + (block $block3 + (set_local $var$8 + (i64.add + (get_local $var$1) + (i64.const -1) ) ) - (f64.const 0) + (loop $label$15 + (set_local $var$5 + (i64.sub + (tee_local $var$5 + (i64.or + (i64.shl + (get_local $var$5) + (i64.const 1) + ) + (i64.shr_u + (get_local $var$0) + (i64.const 63) + ) + ) + ) + (i64.and + (tee_local $var$6 + (i64.shr_s + (i64.sub + (get_local $var$8) + (get_local $var$5) + ) + (i64.const 63) + ) + ) + (get_local $var$1) + ) + ) + ) + (set_local $var$0 + (i64.or + (i64.shl + (get_local $var$0) + (i64.const 1) + ) + (get_local $var$7) + ) + ) + (set_local $var$7 + (tee_local $var$6 + (i64.and + (get_local $var$6) + (i64.const 1) + ) + ) + ) + (br_if $label$15 + (tee_local $var$2 + (i32.add + (get_local $var$2) + (i32.const -1) + ) + ) + ) + ) + (br $label$13) ) - (get_local $2) - (get_local $1) + ) + ) + (i64.store + (i32.const 1024) + (get_local $var$5) + ) + (return + (i64.or + (i64.shl + (get_local $var$0) + (i64.const 1) + ) + (get_local $var$6) ) ) ) - ) - ) - (func $__wasm_trunc_f32 (; 12 ;) (param $0 f32) (result f32) - (if (result f32) - (f32.lt - (get_local $0) - (f32.const 0) + (i64.store + (i32.const 1024) + (get_local $var$0) ) - (f32.ceil - (get_local $0) + (set_local $var$0 + (i64.const 0) ) - (f32.floor - (get_local $0) + ) + (get_local $var$0) + ) + (func $__wasm_ctz_i32 (; 21 ;) (param $var$0 i32) (result i32) + (if + (get_local $var$0) + (return + (i32.sub + (i32.const 31) + (i32.clz + (i32.xor + (i32.add + (get_local $var$0) + (i32.const -1) + ) + (get_local $var$0) + ) + ) + ) ) ) + (i32.const 32) ) - (func $__wasm_trunc_f64 (; 13 ;) (param $0 f64) (result f64) - (if (result f64) - (f64.lt - (get_local $0) - (f64.const 0) + (func $__wasm_i64_mul (; 22 ;) (param $var$0 i64) (param $var$1 i64) (result i64) + (call $_ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE + (get_local $var$0) + (get_local $var$1) + ) + ) + (func $__wasm_i64_sdiv (; 23 ;) (param $var$0 i64) (param $var$1 i64) (result i64) + (call $_ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E + (get_local $var$0) + (get_local $var$1) + ) + ) + (func $__wasm_i64_srem (; 24 ;) (param $var$0 i64) (param $var$1 i64) (result i64) + (call $_ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E + (get_local $var$0) + (get_local $var$1) + ) + ) + (func $__wasm_i64_udiv (; 25 ;) (param $var$0 i64) (param $var$1 i64) (result i64) + (call $_ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E + (get_local $var$0) + (get_local $var$1) + ) + ) + (func $__wasm_i64_urem (; 26 ;) (param $var$0 i64) (param $var$1 i64) (result i64) + (drop + (call $_ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E + (get_local $var$0) + (get_local $var$1) ) - (f64.ceil - (get_local $0) + ) + (i64.load + (i32.const 1024) + ) + ) + (func $__wasm_nearest_f32 (; 27 ;) (param $var$0 f32) (result f32) + (local $var$1 f32) + (local $var$2 f32) + (if + (i32.eqz + (f32.lt + (tee_local $var$2 + (f32.sub + (get_local $var$0) + (tee_local $var$1 + (f32.floor + (get_local $var$0) + ) + ) + ) + ) + (f32.const 0.5) + ) ) - (f64.floor - (get_local $0) + (block $block + (set_local $var$0 + (f32.ceil + (get_local $var$0) + ) + ) + (if + (f32.gt + (get_local $var$2) + (f32.const 0.5) + ) + (return + (get_local $var$0) + ) + ) + (set_local $var$1 + (select + (get_local $var$1) + (get_local $var$0) + (f32.eq + (f32.sub + (tee_local $var$2 + (f32.mul + (get_local $var$1) + (f32.const 0.5) + ) + ) + (f32.floor + (get_local $var$2) + ) + ) + (f32.const 0) + ) + ) + ) ) ) + (get_local $var$1) ) - (func $__wasm_ctz_i32 (; 14 ;) (param $x i32) (result i32) - (if (result i32) + (func $__wasm_nearest_f64 (; 28 ;) (param $var$0 f64) (result f64) + (local $var$1 f64) + (local $var$2 f64) + (if (i32.eqz - (get_local $x) + (f64.lt + (tee_local $var$2 + (f64.sub + (get_local $var$0) + (tee_local $var$1 + (f64.floor + (get_local $var$0) + ) + ) + ) + ) + (f64.const 0.5) + ) ) - (i32.const 32) - (i32.sub - (i32.const 31) - (i32.clz - (i32.xor - (get_local $x) - (i32.sub - (get_local $x) - (i32.const 1) + (block $block + (set_local $var$0 + (f64.ceil + (get_local $var$0) + ) + ) + (if + (f64.gt + (get_local $var$2) + (f64.const 0.5) + ) + (return + (get_local $var$0) + ) + ) + (set_local $var$1 + (select + (get_local $var$1) + (get_local $var$0) + (f64.eq + (f64.sub + (tee_local $var$2 + (f64.mul + (get_local $var$1) + (f64.const 0.5) + ) + ) + (f64.floor + (get_local $var$2) + ) + ) + (f64.const 0) ) ) ) ) ) + (get_local $var$1) ) - (func $__wasm_popcnt_i32 (; 15 ;) (param $x i32) (result i32) - (local $count i32) - (set_local $count - (i32.const 0) - ) - (block $b (result i32) - (loop $l + (func $__wasm_popcnt_i32 (; 29 ;) (param $var$0 i32) (result i32) + (local $var$1 i32) + (block $label$1 (result i32) + (loop $label$2 (drop - (br_if $b - (get_local $count) + (br_if $label$1 + (get_local $var$1) (i32.eqz - (get_local $x) + (get_local $var$0) ) ) ) - (set_local $x + (set_local $var$0 (i32.and - (get_local $x) + (get_local $var$0) (i32.sub - (get_local $x) + (get_local $var$0) (i32.const 1) ) ) ) - (set_local $count + (set_local $var$1 (i32.add - (get_local $count) + (get_local $var$1) (i32.const 1) ) ) - (br $l) + (br $label$2) ) ) ) - (func $__wasm_rotl_i32 (; 16 ;) (param $x i32) (param $k i32) (result i32) + (func $__wasm_rotl_i32 (; 30 ;) (param $var$0 i32) (param $var$1 i32) (result i32) + (local $var$2 i32) (i32.or (i32.shl (i32.and (i32.shr_u (i32.const -1) - (i32.and - (get_local $k) - (i32.const 31) + (tee_local $var$2 + (i32.and + (get_local $var$1) + (i32.const 31) + ) ) ) - (get_local $x) - ) - (i32.and - (get_local $k) - (i32.const 31) + (get_local $var$0) ) + (get_local $var$2) ) (i32.shr_u (i32.and (i32.shl (i32.const -1) - (i32.sub - (i32.const 32) + (tee_local $var$1 (i32.and - (get_local $k) + (i32.sub + (i32.const 0) + (get_local $var$1) + ) (i32.const 31) ) ) ) - (get_local $x) + (get_local $var$0) ) - (i32.sub - (i32.const 32) - (i32.and - (get_local $k) - (i32.const 31) + (get_local $var$1) + ) + ) + ) + (func $__wasm_rotl_i64 (; 31 ;) (param $var$0 i64) (param $var$1 i64) (result i64) + (local $var$2 i64) + (i64.or + (i64.shl + (i64.and + (i64.shr_u + (i64.const -1) + (tee_local $var$2 + (i64.and + (get_local $var$1) + (i64.const 63) + ) + ) ) + (get_local $var$0) ) + (get_local $var$2) + ) + (i64.shr_u + (i64.and + (i64.shl + (i64.const -1) + (tee_local $var$1 + (i64.and + (i64.sub + (i64.const 0) + (get_local $var$1) + ) + (i64.const 63) + ) + ) + ) + (get_local $var$0) + ) + (get_local $var$1) ) ) ) - (func $__wasm_rotr_i32 (; 17 ;) (param $x i32) (param $k i32) (result i32) + (func $__wasm_rotr_i32 (; 32 ;) (param $var$0 i32) (param $var$1 i32) (result i32) + (local $var$2 i32) (i32.or (i32.shr_u (i32.and (i32.shl (i32.const -1) - (i32.and - (get_local $k) - (i32.const 31) + (tee_local $var$2 + (i32.and + (get_local $var$1) + (i32.const 31) + ) ) ) - (get_local $x) - ) - (i32.and - (get_local $k) - (i32.const 31) + (get_local $var$0) ) + (get_local $var$2) ) (i32.shl (i32.and (i32.shr_u (i32.const -1) - (i32.sub - (i32.const 32) + (tee_local $var$1 (i32.and - (get_local $k) + (i32.sub + (i32.const 0) + (get_local $var$1) + ) (i32.const 31) ) ) ) - (get_local $x) + (get_local $var$0) ) - (i32.sub - (i32.const 32) - (i32.and - (get_local $k) - (i32.const 31) + (get_local $var$1) + ) + ) + ) + (func $__wasm_rotr_i64 (; 33 ;) (param $var$0 i64) (param $var$1 i64) (result i64) + (local $var$2 i64) + (i64.or + (i64.shr_u + (i64.and + (i64.shl + (i64.const -1) + (tee_local $var$2 + (i64.and + (get_local $var$1) + (i64.const 63) + ) + ) + ) + (get_local $var$0) + ) + (get_local $var$2) + ) + (i64.shl + (i64.and + (i64.shr_u + (i64.const -1) + (tee_local $var$1 + (i64.and + (i64.sub + (i64.const 0) + (get_local $var$1) + ) + (i64.const 63) + ) + ) ) + (get_local $var$0) ) + (get_local $var$1) + ) + ) + ) + (func $__wasm_trunc_f32 (; 34 ;) (param $var$0 f32) (result f32) + (select + (f32.ceil + (get_local $var$0) + ) + (f32.floor + (get_local $var$0) + ) + (f32.lt + (get_local $var$0) + (f32.const 0) + ) + ) + ) + (func $__wasm_trunc_f64 (; 35 ;) (param $var$0 f64) (result f64) + (select + (f64.ceil + (get_local $var$0) + ) + (f64.floor + (get_local $var$0) + ) + (f64.lt + (get_local $var$0) + (f64.const 0) ) ) ) diff --git a/test/passes/remove-non-js-ops.wast b/test/passes/remove-non-js-ops.wast index 884fe367d..0fd4958e0 100644 --- a/test/passes/remove-non-js-ops.wast +++ b/test/passes/remove-non-js-ops.wast @@ -8,6 +8,10 @@ (i32.rotl (get_local $0) (get_local $1))) (func $rotr32 (param $0 i32) (param $1 i32) (result i32) (i32.rotr (get_local $0) (get_local $1))) + (func $rotl64 (param $0 i64) (param $1 i64) (result i64) + (i64.rotl (get_local $0) (get_local $1))) + (func $rotr64 (param $0 i64) (param $1 i64) (result i64) + (i64.rotr (get_local $0) (get_local $1))) (func $nearest64 (param $0 f64) (result f64) (f64.nearest (get_local $0))) @@ -23,5 +27,16 @@ (i32.popcnt (get_local $0))) (func $ctz32 (param $0 i32) (result i32) (i32.ctz (get_local $0))) + + (func $i64_sdiv (param $0 i64) (param $1 i64) (result i64) + (i64.div_s (get_local $0) (get_local $1))) + (func $i64_udiv (param $0 i64) (param $1 i64) (result i64) + (i64.div_u (get_local $0) (get_local $1))) + (func $i64_srem (param $0 i64) (param $1 i64) (result i64) + (i64.rem_s (get_local $0) (get_local $1))) + (func $i64_urem (param $0 i64) (param $1 i64) (result i64) + (i64.rem_u (get_local $0) (get_local $1))) + (func $i64_mul (param $0 i64) (param $1 i64) (result i64) + (i64.mul (get_local $0) (get_local $1))) ) diff --git a/test/wasm2asm/br_table_temp.2asm.js b/test/wasm2asm/br_table_temp.2asm.js index db022539f..c5b01c332 100644 --- a/test/wasm2asm/br_table_temp.2asm.js +++ b/test/wasm2asm/br_table_temp.2asm.js @@ -50188,11 +50188,58 @@ function asmFunc(global, env, buffer) { return $3 | 0; } - function __wasm_ctz_i32(x) { - x = x | 0; - var $9 = 0; - if ((x | 0) == (0 | 0)) $9 = 32; else $9 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0; - return $9 | 0; + function __wasm_ctz_i32(var$0) { + var$0 = var$0 | 0; + if (var$0) return 31 - Math_clz32((var$0 + 4294967295 | 0) ^ var$0 | 0) | 0 | 0; + return 32 | 0; + } + + function __wasm_ctz_i64(var$0, var$0$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, $10 = 0, $5$hi = 0, $8$hi = 0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + if (((var$0 | i64toi32_i32$0 | 0 | 0) == (0 | 0) | 0) == (0 | 0)) { + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$0; + i64toi32_i32$1 = 4294967295; + i64toi32_i32$3 = 4294967295; + i64toi32_i32$4 = i64toi32_i32$2 + i64toi32_i32$3 | 0; + i64toi32_i32$5 = i64toi32_i32$0 + i64toi32_i32$1 | 0; + if (i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0) i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0; + $5$hi = i64toi32_i32$5; + i64toi32_i32$5 = var$0$hi; + i64toi32_i32$5 = $5$hi; + i64toi32_i32$0 = i64toi32_i32$4; + i64toi32_i32$2 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$2 = i64toi32_i32$5 ^ i64toi32_i32$2 | 0; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$0 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; + i64toi32_i32$3 = Math_clz32(i64toi32_i32$2); + i64toi32_i32$5 = 0; + if ((i64toi32_i32$3 | 0) == (32 | 0)) $10 = Math_clz32(i64toi32_i32$0) + 32 | 0; else $10 = i64toi32_i32$3; + $8$hi = i64toi32_i32$5; + i64toi32_i32$5 = 0; + i64toi32_i32$0 = 63; + i64toi32_i32$2 = $8$hi; + i64toi32_i32$3 = $10; + i64toi32_i32$1 = i64toi32_i32$0 - i64toi32_i32$3 | 0; + i64toi32_i32$4 = (i64toi32_i32$0 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$2 | 0; + i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; + i64toi32_i32$4 = i64toi32_i32$4; + i64toi32_i32$0 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$4; + return i64toi32_i32$0 | 0; + } + i64toi32_i32$0 = 0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$4 = 64; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$4 | 0; } var FUNCTION_TABLE_iiii = [f]; diff --git a/test/wasm2asm/conversions-modified.2asm.js b/test/wasm2asm/conversions-modified.2asm.js index b4613c407..a8ec0b104 100644 --- a/test/wasm2asm/conversions-modified.2asm.js +++ b/test/wasm2asm/conversions-modified.2asm.js @@ -20,24 +20,22 @@ function asmFunc(global, env, buffer) { var i64toi32_i32$HIGH_BITS = 0; function $0(x) { x = x | 0; - var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, wasm2asm_i32$0 = 0; + var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0; i64toi32_i32$1 = x; i64toi32_i32$0 = i64toi32_i32$1 >> 31 | 0; i64toi32_i32$0 = i64toi32_i32$0; i64toi32_i32$1 = i64toi32_i32$1; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; - return wasm2asm_i32$0 | 0; } function $1(x) { x = x | 0; - var i64toi32_i32$0 = 0, wasm2asm_i32$0 = 0; + var i64toi32_i32$0 = 0; i64toi32_i32$0 = 0; i64toi32_i32$0 = i64toi32_i32$0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return x | 0; - return wasm2asm_i32$0 | 0; } function $2(x, x$hi) { @@ -68,7 +66,7 @@ function asmFunc(global, env, buffer) { function $7(x) { x = Math_fround(x); - var i64toi32_i32$0 = Math_fround(0), i64toi32_i32$1 = 0, $4 = 0, $5 = 0, i64toi32_i32$2 = 0, wasm2asm_i32$0 = 0; + var i64toi32_i32$0 = Math_fround(0), i64toi32_i32$1 = 0, $4 = 0, $5 = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = x; if (Math_fround(Math_abs(i64toi32_i32$0)) >= Math_fround(1.0)) { if (i64toi32_i32$0 > Math_fround(0.0)) $4 = ~~Math_fround(Math_min(Math_fround(Math_floor(Math_fround(i64toi32_i32$0 / Math_fround(4294967296.0)))), Math_fround(Math_fround(4294967296.0) - Math_fround(1.0)))) >>> 0; else $4 = ~~Math_fround(Math_ceil(Math_fround(Math_fround(i64toi32_i32$0 - Math_fround(~~i64toi32_i32$0 >>> 0 >>> 0)) / Math_fround(4294967296.0)))) >>> 0; @@ -79,12 +77,11 @@ function asmFunc(global, env, buffer) { i64toi32_i32$2 = ~~i64toi32_i32$0 >>> 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; - return wasm2asm_i32$0 | 0; } function $8(x) { x = Math_fround(x); - var i64toi32_i32$0 = Math_fround(0), i64toi32_i32$1 = 0, $4 = 0, $5 = 0, i64toi32_i32$2 = 0, wasm2asm_i32$0 = 0; + var i64toi32_i32$0 = Math_fround(0), i64toi32_i32$1 = 0, $4 = 0, $5 = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = x; if (Math_fround(Math_abs(i64toi32_i32$0)) >= Math_fround(1.0)) { if (i64toi32_i32$0 > Math_fround(0.0)) $4 = ~~Math_fround(Math_min(Math_fround(Math_floor(Math_fround(i64toi32_i32$0 / Math_fround(4294967296.0)))), Math_fround(Math_fround(4294967296.0) - Math_fround(1.0)))) >>> 0; else $4 = ~~Math_fround(Math_ceil(Math_fround(Math_fround(i64toi32_i32$0 - Math_fround(~~i64toi32_i32$0 >>> 0 >>> 0)) / Math_fround(4294967296.0)))) >>> 0; @@ -95,12 +92,11 @@ function asmFunc(global, env, buffer) { i64toi32_i32$2 = ~~i64toi32_i32$0 >>> 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; - return wasm2asm_i32$0 | 0; } function $9(x) { x = +x; - var i64toi32_i32$0 = 0.0, i64toi32_i32$1 = 0, $4 = 0, $5 = 0, i64toi32_i32$2 = 0, wasm2asm_i32$0 = 0; + var i64toi32_i32$0 = 0.0, i64toi32_i32$1 = 0, $4 = 0, $5 = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = x; if (Math_abs(i64toi32_i32$0) >= 1.0) { if (i64toi32_i32$0 > 0.0) $4 = ~~Math_min(Math_floor(i64toi32_i32$0 / 4294967296.0), 4294967296.0 - 1.0) >>> 0; else $4 = ~~Math_ceil((i64toi32_i32$0 - +(~~i64toi32_i32$0 >>> 0 >>> 0)) / 4294967296.0) >>> 0; @@ -111,12 +107,11 @@ function asmFunc(global, env, buffer) { i64toi32_i32$2 = ~~i64toi32_i32$0 >>> 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; - return wasm2asm_i32$0 | 0; } function $10(x) { x = +x; - var i64toi32_i32$0 = 0.0, i64toi32_i32$1 = 0, $4 = 0, $5 = 0, i64toi32_i32$2 = 0, wasm2asm_i32$0 = 0; + var i64toi32_i32$0 = 0.0, i64toi32_i32$1 = 0, $4 = 0, $5 = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = x; if (Math_abs(i64toi32_i32$0) >= 1.0) { if (i64toi32_i32$0 > 0.0) $4 = ~~Math_min(Math_floor(i64toi32_i32$0 / 4294967296.0), 4294967296.0 - 1.0) >>> 0; else $4 = ~~Math_ceil((i64toi32_i32$0 - +(~~i64toi32_i32$0 >>> 0 >>> 0)) / 4294967296.0) >>> 0; @@ -127,7 +122,6 @@ function asmFunc(global, env, buffer) { i64toi32_i32$2 = ~~i64toi32_i32$0 >>> 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$2 | 0; - return wasm2asm_i32$0 | 0; } function $11(x) { @@ -219,14 +213,13 @@ function asmFunc(global, env, buffer) { function $24(x) { x = +x; - var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2asm_i32$0 = 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; HEAPF64[0 >> 3] = x; i64toi32_i32$0 = HEAP32[(0 + 4 | 0) >> 2] | 0; i64toi32_i32$0 = i64toi32_i32$0; i64toi32_i32$1 = HEAP32[0 >> 2] | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return i64toi32_i32$1 | 0; - return wasm2asm_i32$0 | 0; } return { diff --git a/test/wasm2asm/f32.2asm.js b/test/wasm2asm/f32.2asm.js index 478c8c881..cf3ba5481 100644 --- a/test/wasm2asm/f32.2asm.js +++ b/test/wasm2asm/f32.2asm.js @@ -95,28 +95,24 @@ function asmFunc(global, env, buffer) { return Math_fround((HEAP32[0] = (HEAPF32[0] = x, HEAP32[0]) & 2147483647 | 0 | ((HEAPF32[0] = y, HEAP32[0]) & 2147483648 | 0) | 0, HEAPF32[0])); } - function __wasm_nearest_f32($0) { - $0 = Math_fround($0); - var $2 = Math_fround(0), $1 = Math_fround(0), $3 = Math_fround(0), $34 = Math_fround(0), $32 = Math_fround(0), $4 = Math_fround(0), $28 = Math_fround(0); - $1 = Math_fround(Math_ceil($0)); - $2 = Math_fround(Math_floor($0)); - $3 = Math_fround($0 - $2); - if ($3 < Math_fround(.5)) $34 = $2; else { - if ($3 > Math_fround(.5)) $32 = $1; else { - $4 = Math_fround($2 / Math_fround(2.0)); - if (Math_fround($4 - Math_fround(Math_floor($4))) == Math_fround(0.0)) $28 = $2; else $28 = $1; - $32 = $28; - } - $34 = $32; - } - return Math_fround($34); - } - - function __wasm_trunc_f32($0) { - $0 = Math_fround($0); - var $7 = Math_fround(0); - if ($0 < Math_fround(0.0)) $7 = Math_fround(Math_ceil($0)); else $7 = Math_fround(Math_floor($0)); - return Math_fround($7); + function __wasm_nearest_f32(var$0) { + var$0 = Math_fround(var$0); + var var$1 = Math_fround(0), var$2 = Math_fround(0), wasm2asm_f32$0 = Math_fround(0), wasm2asm_f32$1 = Math_fround(0), wasm2asm_i32$0 = 0; + var$1 = Math_fround(Math_floor(var$0)); + var$2 = Math_fround(var$0 - var$1); + if ((var$2 < Math_fround(.5) | 0) == (0 | 0)) block : { + var$0 = Math_fround(Math_ceil(var$0)); + if (var$2 > Math_fround(.5)) return Math_fround(var$0); + var$2 = Math_fround(var$1 * Math_fround(.5)); + var$1 = (wasm2asm_i32$0 = Math_fround(var$2 - Math_fround(Math_floor(var$2))) == Math_fround(0.0), wasm2asm_f32$0 = var$1, wasm2asm_f32$1 = var$0, wasm2asm_i32$0 ? wasm2asm_f32$0 : wasm2asm_f32$1); + }; + return Math_fround(var$1); + } + + function __wasm_trunc_f32(var$0) { + var$0 = Math_fround(var$0); + var wasm2asm_f32$0 = Math_fround(0), wasm2asm_f32$1 = Math_fround(0), wasm2asm_i32$0 = 0; + return Math_fround((wasm2asm_i32$0 = var$0 < Math_fround(0.0), wasm2asm_f32$0 = Math_fround(Math_ceil(var$0)), wasm2asm_f32$1 = Math_fround(Math_floor(var$0)), wasm2asm_i32$0 ? wasm2asm_f32$0 : wasm2asm_f32$1)); } return { diff --git a/test/wasm2asm/f64.2asm.js b/test/wasm2asm/f64.2asm.js index 5b6358f27..5f3adbacd 100644 --- a/test/wasm2asm/f64.2asm.js +++ b/test/wasm2asm/f64.2asm.js @@ -122,28 +122,24 @@ function asmFunc(global, env, buffer) { return +(+HEAPF64[0 >> 3]); } - function __wasm_nearest_f64($0) { - $0 = +$0; - var $2 = 0.0, $1 = 0.0, $3 = 0.0, $34 = 0.0, $32 = 0.0, $4 = 0.0, $28 = 0.0; - $1 = Math_ceil($0); - $2 = Math_floor($0); - $3 = $0 - $2; - if ($3 < .5) $34 = $2; else { - if ($3 > .5) $32 = $1; else { - $4 = $2 / 2.0; - if ($4 - Math_floor($4) == 0.0) $28 = $2; else $28 = $1; - $32 = $28; - } - $34 = $32; - } - return +$34; - } - - function __wasm_trunc_f64($0) { - $0 = +$0; - var $7 = 0.0; - if ($0 < 0.0) $7 = Math_ceil($0); else $7 = Math_floor($0); - return +$7; + function __wasm_nearest_f64(var$0) { + var$0 = +var$0; + var var$1 = 0.0, var$2 = 0.0, wasm2asm_f64$0 = 0.0, wasm2asm_f64$1 = 0.0, wasm2asm_i32$0 = 0; + var$1 = Math_floor(var$0); + var$2 = var$0 - var$1; + if ((var$2 < .5 | 0) == (0 | 0)) block : { + var$0 = Math_ceil(var$0); + if (var$2 > .5) return +var$0; + var$2 = var$1 * .5; + var$1 = (wasm2asm_i32$0 = var$2 - Math_floor(var$2) == 0.0, wasm2asm_f64$0 = var$1, wasm2asm_f64$1 = var$0, wasm2asm_i32$0 ? wasm2asm_f64$0 : wasm2asm_f64$1); + }; + return +var$1; + } + + function __wasm_trunc_f64(var$0) { + var$0 = +var$0; + var wasm2asm_f64$0 = 0.0, wasm2asm_f64$1 = 0.0, wasm2asm_i32$0 = 0; + return +(wasm2asm_i32$0 = var$0 < 0.0, wasm2asm_f64$0 = Math_ceil(var$0), wasm2asm_f64$1 = Math_floor(var$0), wasm2asm_i32$0 ? wasm2asm_f64$0 : wasm2asm_f64$1); } return { diff --git a/test/wasm2asm/float_misc.2asm.js b/test/wasm2asm/float_misc.2asm.js index 71ba6e79b..6b78f6108 100644 --- a/test/wasm2asm/float_misc.2asm.js +++ b/test/wasm2asm/float_misc.2asm.js @@ -199,52 +199,44 @@ function asmFunc(global, env, buffer) { return +Math_max(x, y); } - function __wasm_nearest_f32($0) { - $0 = Math_fround($0); - var $2 = Math_fround(0), $1 = Math_fround(0), $3 = Math_fround(0), $34 = Math_fround(0), $32 = Math_fround(0), $4 = Math_fround(0), $28 = Math_fround(0); - $1 = Math_fround(Math_ceil($0)); - $2 = Math_fround(Math_floor($0)); - $3 = Math_fround($0 - $2); - if ($3 < Math_fround(.5)) $34 = $2; else { - if ($3 > Math_fround(.5)) $32 = $1; else { - $4 = Math_fround($2 / Math_fround(2.0)); - if (Math_fround($4 - Math_fround(Math_floor($4))) == Math_fround(0.0)) $28 = $2; else $28 = $1; - $32 = $28; - } - $34 = $32; - } - return Math_fround($34); - } - - function __wasm_nearest_f64($0) { - $0 = +$0; - var $2 = 0.0, $1 = 0.0, $3 = 0.0, $34 = 0.0, $32 = 0.0, $4 = 0.0, $28 = 0.0; - $1 = Math_ceil($0); - $2 = Math_floor($0); - $3 = $0 - $2; - if ($3 < .5) $34 = $2; else { - if ($3 > .5) $32 = $1; else { - $4 = $2 / 2.0; - if ($4 - Math_floor($4) == 0.0) $28 = $2; else $28 = $1; - $32 = $28; - } - $34 = $32; - } - return +$34; - } - - function __wasm_trunc_f32($0) { - $0 = Math_fround($0); - var $7 = Math_fround(0); - if ($0 < Math_fround(0.0)) $7 = Math_fround(Math_ceil($0)); else $7 = Math_fround(Math_floor($0)); - return Math_fround($7); - } - - function __wasm_trunc_f64($0) { - $0 = +$0; - var $7 = 0.0; - if ($0 < 0.0) $7 = Math_ceil($0); else $7 = Math_floor($0); - return +$7; + function __wasm_nearest_f32(var$0) { + var$0 = Math_fround(var$0); + var var$1 = Math_fround(0), var$2 = Math_fround(0), wasm2asm_f32$0 = Math_fround(0), wasm2asm_f32$1 = Math_fround(0), wasm2asm_i32$0 = 0; + var$1 = Math_fround(Math_floor(var$0)); + var$2 = Math_fround(var$0 - var$1); + if ((var$2 < Math_fround(.5) | 0) == (0 | 0)) block : { + var$0 = Math_fround(Math_ceil(var$0)); + if (var$2 > Math_fround(.5)) return Math_fround(var$0); + var$2 = Math_fround(var$1 * Math_fround(.5)); + var$1 = (wasm2asm_i32$0 = Math_fround(var$2 - Math_fround(Math_floor(var$2))) == Math_fround(0.0), wasm2asm_f32$0 = var$1, wasm2asm_f32$1 = var$0, wasm2asm_i32$0 ? wasm2asm_f32$0 : wasm2asm_f32$1); + }; + return Math_fround(var$1); + } + + function __wasm_nearest_f64(var$0) { + var$0 = +var$0; + var var$1 = 0.0, var$2 = 0.0, wasm2asm_f64$0 = 0.0, wasm2asm_f64$1 = 0.0, wasm2asm_i32$0 = 0; + var$1 = Math_floor(var$0); + var$2 = var$0 - var$1; + if ((var$2 < .5 | 0) == (0 | 0)) block : { + var$0 = Math_ceil(var$0); + if (var$2 > .5) return +var$0; + var$2 = var$1 * .5; + var$1 = (wasm2asm_i32$0 = var$2 - Math_floor(var$2) == 0.0, wasm2asm_f64$0 = var$1, wasm2asm_f64$1 = var$0, wasm2asm_i32$0 ? wasm2asm_f64$0 : wasm2asm_f64$1); + }; + return +var$1; + } + + function __wasm_trunc_f32(var$0) { + var$0 = Math_fround(var$0); + var wasm2asm_f32$0 = Math_fround(0), wasm2asm_f32$1 = Math_fround(0), wasm2asm_i32$0 = 0; + return Math_fround((wasm2asm_i32$0 = var$0 < Math_fround(0.0), wasm2asm_f32$0 = Math_fround(Math_ceil(var$0)), wasm2asm_f32$1 = Math_fround(Math_floor(var$0)), wasm2asm_i32$0 ? wasm2asm_f32$0 : wasm2asm_f32$1)); + } + + function __wasm_trunc_f64(var$0) { + var$0 = +var$0; + var wasm2asm_f64$0 = 0.0, wasm2asm_f64$1 = 0.0, wasm2asm_i32$0 = 0; + return +(wasm2asm_i32$0 = var$0 < 0.0, wasm2asm_f64$0 = Math_ceil(var$0), wasm2asm_f64$1 = Math_floor(var$0), wasm2asm_i32$0 ? wasm2asm_f64$0 : wasm2asm_f64$1); } return { diff --git a/test/wasm2asm/i32.2asm.js b/test/wasm2asm/i32.2asm.js index 7c319ba5e..00ce2866e 100644 --- a/test/wasm2asm/i32.2asm.js +++ b/test/wasm2asm/i32.2asm.js @@ -188,40 +188,44 @@ function asmFunc(global, env, buffer) { return x >>> 0 >= y >>> 0 | 0; } - function __wasm_ctz_i32(x) { - x = x | 0; - var $9 = 0; - if ((x | 0) == (0 | 0)) $9 = 32; else $9 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0; - return $9 | 0; - } - - function __wasm_popcnt_i32(x) { - x = x | 0; - var count = 0, $5 = 0; - count = 0; - b : { - l : do { - $5 = count; - if ((x | 0) == (0 | 0)) break b; - x = x & (x - 1 | 0) | 0; - count = count + 1 | 0; - continue l; - break l; + function __wasm_ctz_i32(var$0) { + var$0 = var$0 | 0; + if (var$0) return 31 - Math_clz32((var$0 + 4294967295 | 0) ^ var$0 | 0) | 0 | 0; + return 32 | 0; + } + + function __wasm_popcnt_i32(var$0) { + var$0 = var$0 | 0; + var var$1 = 0, $5 = 0; + label$1 : { + label$2 : do { + $5 = var$1; + if ((var$0 | 0) == (0 | 0)) break label$1; + var$0 = var$0 & (var$0 - 1 | 0) | 0; + var$1 = var$1 + 1 | 0; + continue label$2; + break label$2; } while (1); }; return $5 | 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_rotl_i32(var$0, var$1) { + var$0 = var$0 | 0; + var$1 = var$1 | 0; + var var$2 = 0; + var$2 = var$1 & 31 | 0; + var$1 = (0 - var$1 | 0) & 31 | 0; + return ((4294967295 >>> var$2 | 0) & var$0 | 0) << var$2 | 0 | (((4294967295 << var$1 | 0) & var$0 | 0) >>> var$1 | 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; + function __wasm_rotr_i32(var$0, var$1) { + var$0 = var$0 | 0; + var$1 = var$1 | 0; + var var$2 = 0; + var$2 = var$1 & 31 | 0; + var$1 = (0 - var$1 | 0) & 31 | 0; + return ((4294967295 << var$2 | 0) & var$0 | 0) >>> var$2 | 0 | (((4294967295 >>> var$1 | 0) & var$0 | 0) << var$1 | 0) | 0 | 0; } return { diff --git a/test/wasm2asm/i64-ctz.2asm.js b/test/wasm2asm/i64-ctz.2asm.js new file mode 100644 index 000000000..a85ad8e82 --- /dev/null +++ b/test/wasm2asm/i64-ctz.2asm.js @@ -0,0 +1,158 @@ +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 Math_floor = global.Math.floor; + var Math_ceil = global.Math.ceil; + var Math_sqrt = global.Math.sqrt; + var i64toi32_i32$HIGH_BITS = 0; + function popcnt64($0, $0$hi) { + $0 = $0 | 0; + $0$hi = $0$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = $0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = __wasm_popcnt_i64($0 | 0, i64toi32_i32$0 | 0) | 0; + i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$0 | 0; + } + + function ctz64($0, $0$hi) { + $0 = $0 | 0; + $0$hi = $0$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = $0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = __wasm_ctz_i64($0 | 0, i64toi32_i32$0 | 0) | 0; + i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$0 | 0; + } + + function __wasm_ctz_i64(var$0, var$0$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, $10 = 0, $5$hi = 0, $8$hi = 0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + if (((var$0 | i64toi32_i32$0 | 0 | 0) == (0 | 0) | 0) == (0 | 0)) { + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$0; + i64toi32_i32$1 = 4294967295; + i64toi32_i32$3 = 4294967295; + i64toi32_i32$4 = i64toi32_i32$2 + i64toi32_i32$3 | 0; + i64toi32_i32$5 = i64toi32_i32$0 + i64toi32_i32$1 | 0; + if (i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0) i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0; + $5$hi = i64toi32_i32$5; + i64toi32_i32$5 = var$0$hi; + i64toi32_i32$5 = $5$hi; + i64toi32_i32$0 = i64toi32_i32$4; + i64toi32_i32$2 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$2 = i64toi32_i32$5 ^ i64toi32_i32$2 | 0; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$0 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; + i64toi32_i32$3 = Math_clz32(i64toi32_i32$2); + i64toi32_i32$5 = 0; + if ((i64toi32_i32$3 | 0) == (32 | 0)) $10 = Math_clz32(i64toi32_i32$0) + 32 | 0; else $10 = i64toi32_i32$3; + $8$hi = i64toi32_i32$5; + i64toi32_i32$5 = 0; + i64toi32_i32$0 = 63; + i64toi32_i32$2 = $8$hi; + i64toi32_i32$3 = $10; + i64toi32_i32$1 = i64toi32_i32$0 - i64toi32_i32$3 | 0; + i64toi32_i32$4 = (i64toi32_i32$0 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$2 | 0; + i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; + i64toi32_i32$4 = i64toi32_i32$4; + i64toi32_i32$0 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$4; + return i64toi32_i32$0 | 0; + } + i64toi32_i32$0 = 0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$4 = 64; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$4 | 0; + } + + function __wasm_popcnt_i64(var$0, var$0$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$5 = 0, i64toi32_i32$3 = 0, i64toi32_i32$1 = 0, var$1$hi = 0, var$1 = 0, $5 = 0, $5$hi = 0, $4 = 0, $9$hi = 0; + label$1 : { + label$2 : do { + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + $4 = (var$0 | i64toi32_i32$0 | 0 | 0) == (0 | 0); + i64toi32_i32$0 = var$1$hi; + $5 = var$1; + $5$hi = i64toi32_i32$0; + if ($4) break label$1; + i64toi32_i32$0 = $5$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$0; + i64toi32_i32$1 = 0; + i64toi32_i32$3 = 1; + i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$3 | 0; + i64toi32_i32$5 = (i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$1 | 0; + i64toi32_i32$5 = i64toi32_i32$0 - i64toi32_i32$5 | 0; + $9$hi = i64toi32_i32$5; + i64toi32_i32$5 = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$2; + i64toi32_i32$2 = $9$hi; + i64toi32_i32$3 = i64toi32_i32$4; + i64toi32_i32$2 = i64toi32_i32$5 & i64toi32_i32$2 | 0; + i64toi32_i32$2 = i64toi32_i32$2; + var$0 = i64toi32_i32$0 & i64toi32_i32$4 | 0; + var$0$hi = i64toi32_i32$2; + i64toi32_i32$2 = var$1$hi; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$5 = var$1; + i64toi32_i32$0 = 0; + i64toi32_i32$3 = 1; + i64toi32_i32$1 = i64toi32_i32$5 + i64toi32_i32$3 | 0; + i64toi32_i32$4 = i64toi32_i32$2 + i64toi32_i32$0 | 0; + if (i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0) i64toi32_i32$4 = i64toi32_i32$4 + 1 | 0; + i64toi32_i32$4 = i64toi32_i32$4; + var$1 = i64toi32_i32$1; + var$1$hi = i64toi32_i32$4; + continue label$2; + break label$2; + } while (1); + }; + i64toi32_i32$4 = $5$hi; + i64toi32_i32$4 = i64toi32_i32$4; + i64toi32_i32$5 = $5; + i64toi32_i32$HIGH_BITS = i64toi32_i32$4; + return i64toi32_i32$5 | 0; + } + + return { + a: popcnt64, + b: ctz64 + }; +} + diff --git a/test/wasm2asm/i64-ctz.wast b/test/wasm2asm/i64-ctz.wast new file mode 100644 index 000000000..ce3a27d89 --- /dev/null +++ b/test/wasm2asm/i64-ctz.wast @@ -0,0 +1,8 @@ +(module + (export "a" (func $popcnt64)) + (export "b" (func $ctz64)) + (func $popcnt64 (param $0 i64) (result i64) + (i64.popcnt (get_local $0))) + (func $ctz64 (param $0 i64) (result i64) + (i64.ctz (get_local $0))) + ) diff --git a/test/wasm2asm/i64-rotate.2asm.js b/test/wasm2asm/i64-rotate.2asm.js index 860ad7fbb..7c18f699c 100644 --- a/test/wasm2asm/i64-rotate.2asm.js +++ b/test/wasm2asm/i64-rotate.2asm.js @@ -29,20 +29,19 @@ function asmFunc(global, env, buffer) { $1$hi = $1$hi | 0; $2 = $2 | 0; $2$hi = $2$hi | 0; - var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, $5$hi = 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $5$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; - i64toi32_i32$3 = $1; - i64toi32_i32$4 = __wasm_rotl_i64($0 | 0, i64toi32_i32$0 | 0, i64toi32_i32$3 & 63 | 0 | 0) | 0; - i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; - $5$hi = i64toi32_i32$1; + i64toi32_i32$1 = __wasm_rotl_i64($0 | 0, i64toi32_i32$0 | 0, $1 | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; + $5$hi = i64toi32_i32$0; + i64toi32_i32$0 = $2$hi; + i64toi32_i32$0 = $5$hi; + i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$1 = $2$hi; - i64toi32_i32$1 = $5$hi; - i64toi32_i32$0 = i64toi32_i32$4; - i64toi32_i32$3 = $2; - return (i64toi32_i32$0 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$1 | 0) == ($2$hi | 0) | 0 | 0; + return (i64toi32_i32$2 | 0) == ($2 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0 | 0; } function $2($0, $0$hi, $1, $1$hi, $2, $2$hi) { @@ -52,68 +51,245 @@ function asmFunc(global, env, buffer) { $1$hi = $1$hi | 0; $2 = $2 | 0; $2$hi = $2$hi | 0; - var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, $5$hi = 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $5$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = $1$hi; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; - i64toi32_i32$3 = $1; - i64toi32_i32$4 = __wasm_rotr_i64($0 | 0, i64toi32_i32$0 | 0, i64toi32_i32$3 & 63 | 0 | 0) | 0; - i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; - $5$hi = i64toi32_i32$1; + i64toi32_i32$1 = __wasm_rotr_i64($0 | 0, i64toi32_i32$0 | 0, $1 | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; + $5$hi = i64toi32_i32$0; + i64toi32_i32$0 = $2$hi; + i64toi32_i32$0 = $5$hi; + i64toi32_i32$2 = i64toi32_i32$1; i64toi32_i32$1 = $2$hi; - i64toi32_i32$1 = $5$hi; - i64toi32_i32$0 = i64toi32_i32$4; - i64toi32_i32$3 = $2; - return (i64toi32_i32$0 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$1 | 0) == ($2$hi | 0) | 0 | 0; + return (i64toi32_i32$2 | 0) == ($2 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0 | 0; } - function __wasm_rotl_i64($0, $1, $2) { - $0 = $0 | 0; - $1 = $1 | 0; - $2 = $2 | 0; - var $3 = 0, $4 = 0, $5 = 0; - if (($2 | 0) == (32 | 0)) { - i64toi32_i32$HIGH_BITS = $0; - $4 = $1; + function __wasm_rotl_i64(var$0, var$0$hi, var$1, var$1$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var$1 = var$1 | 0; + var$1$hi = var$1$hi | 0; + var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, var$2$hi = 0, var$2 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $6$hi = 0, $8$hi = 0, $10 = 0, $10$hi = 0, $15$hi = 0, $17$hi = 0, $19$hi = 0; + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$1; + i64toi32_i32$1 = 0; + i64toi32_i32$3 = 63; + i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$1 | 0; + i64toi32_i32$1 = i64toi32_i32$1; + var$2 = i64toi32_i32$2 & i64toi32_i32$3 | 0; + var$2$hi = i64toi32_i32$1; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$1 = 4294967295; + i64toi32_i32$0 = 4294967295; + i64toi32_i32$2 = var$2$hi; + i64toi32_i32$3 = var$2; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$2 = 0; + $19 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; + $19 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; + } + $6$hi = i64toi32_i32$2; + i64toi32_i32$2 = var$0$hi; + i64toi32_i32$2 = $6$hi; + i64toi32_i32$1 = $19; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$0 = i64toi32_i32$2 & i64toi32_i32$0 | 0; + $8$hi = i64toi32_i32$0; + i64toi32_i32$0 = var$2$hi; + i64toi32_i32$0 = $8$hi; + i64toi32_i32$2 = i64toi32_i32$1 & i64toi32_i32$3 | 0; + i64toi32_i32$1 = var$2$hi; + i64toi32_i32$3 = var$2; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; + $20 = 0; + } else { + i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; + $20 = i64toi32_i32$2 << i64toi32_i32$4 | 0; + } + $10 = $20; + $10$hi = i64toi32_i32$1; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = 0; + i64toi32_i32$0 = 0; + i64toi32_i32$2 = var$1$hi; + i64toi32_i32$3 = var$1; + i64toi32_i32$4 = i64toi32_i32$0 - i64toi32_i32$3 | 0; + i64toi32_i32$5 = (i64toi32_i32$0 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$2 | 0; + i64toi32_i32$5 = i64toi32_i32$1 - i64toi32_i32$5 | 0; + i64toi32_i32$5 = i64toi32_i32$5; + i64toi32_i32$1 = i64toi32_i32$4; + i64toi32_i32$0 = 0; + i64toi32_i32$3 = 63; + i64toi32_i32$0 = i64toi32_i32$5 & i64toi32_i32$0 | 0; + i64toi32_i32$0 = i64toi32_i32$0; + var$1 = i64toi32_i32$1 & i64toi32_i32$3 | 0; + var$1$hi = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = 4294967295; + i64toi32_i32$5 = 4294967295; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$3 = var$1; + i64toi32_i32$2 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = i64toi32_i32$5 << i64toi32_i32$2 | 0; + $21 = 0; + } else { + i64toi32_i32$1 = ((1 << i64toi32_i32$2 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$2 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$2 | 0) | 0; + $21 = i64toi32_i32$5 << i64toi32_i32$2 | 0; + } + $15$hi = i64toi32_i32$1; + i64toi32_i32$1 = var$0$hi; + i64toi32_i32$1 = $15$hi; + i64toi32_i32$0 = $21; + i64toi32_i32$5 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$5 = i64toi32_i32$1 & i64toi32_i32$5 | 0; + $17$hi = i64toi32_i32$5; + i64toi32_i32$5 = var$1$hi; + i64toi32_i32$5 = $17$hi; + i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$3 | 0; + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$3 = var$1; + i64toi32_i32$2 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$0 = 0; + $22 = i64toi32_i32$5 >>> i64toi32_i32$2 | 0; } else { - if ($2 >>> 0 >= 32 >>> 0) { - $2 = $2 - 32 | 0; - $3 = 32 - $2 | 0; - i64toi32_i32$HIGH_BITS = $0 << $2 | 0 | ($1 >>> $3 | 0) | 0; - $5 = $1 << $2 | 0 | ($0 >>> $3 | 0) | 0; - } else { - $3 = 32 - $2 | 0; - i64toi32_i32$HIGH_BITS = $1 << $2 | 0 | ($0 >>> $3 | 0) | 0; - $5 = $0 << $2 | 0 | ($1 >>> $3 | 0) | 0; - } - $4 = $5; + i64toi32_i32$0 = i64toi32_i32$5 >>> i64toi32_i32$2 | 0; + $22 = (((1 << i64toi32_i32$2 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$2 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$2 | 0) | 0; } - return $4 | 0; + $19$hi = i64toi32_i32$0; + i64toi32_i32$0 = $10$hi; + i64toi32_i32$5 = $10; + i64toi32_i32$1 = $19$hi; + i64toi32_i32$3 = $22; + i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$5 = i64toi32_i32$5 | i64toi32_i32$3 | 0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$5 | 0; } - function __wasm_rotr_i64($0, $1, $2) { - $0 = $0 | 0; - $1 = $1 | 0; - $2 = $2 | 0; - var $3 = 0, $4 = 0, $5 = 0; - if (($2 | 0) == (32 | 0)) { - i64toi32_i32$HIGH_BITS = $0; - $4 = $1; + function __wasm_rotr_i64(var$0, var$0$hi, var$1, var$1$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var$1 = var$1 | 0; + var$1$hi = var$1$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, var$2$hi = 0, var$2 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $6$hi = 0, $8$hi = 0, $10 = 0, $10$hi = 0, $15$hi = 0, $17$hi = 0, $19$hi = 0; + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$1; + i64toi32_i32$1 = 0; + i64toi32_i32$3 = 63; + i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$1 | 0; + i64toi32_i32$1 = i64toi32_i32$1; + var$2 = i64toi32_i32$2 & i64toi32_i32$3 | 0; + var$2$hi = i64toi32_i32$1; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$1 = 4294967295; + i64toi32_i32$0 = 4294967295; + i64toi32_i32$2 = var$2$hi; + i64toi32_i32$3 = var$2; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$2 = i64toi32_i32$0 << i64toi32_i32$4 | 0; + $19 = 0; + } else { + i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$0 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; + $19 = i64toi32_i32$0 << i64toi32_i32$4 | 0; + } + $6$hi = i64toi32_i32$2; + i64toi32_i32$2 = var$0$hi; + i64toi32_i32$2 = $6$hi; + i64toi32_i32$1 = $19; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$0 = i64toi32_i32$2 & i64toi32_i32$0 | 0; + $8$hi = i64toi32_i32$0; + i64toi32_i32$0 = var$2$hi; + i64toi32_i32$0 = $8$hi; + i64toi32_i32$2 = i64toi32_i32$1 & i64toi32_i32$3 | 0; + i64toi32_i32$1 = var$2$hi; + i64toi32_i32$3 = var$2; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = 0; + $20 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; + $20 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; + } + $10 = $20; + $10$hi = i64toi32_i32$1; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = 0; + i64toi32_i32$0 = 0; + i64toi32_i32$2 = var$1$hi; + i64toi32_i32$3 = var$1; + i64toi32_i32$4 = i64toi32_i32$0 - i64toi32_i32$3 | 0; + i64toi32_i32$5 = (i64toi32_i32$0 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$2 | 0; + i64toi32_i32$5 = i64toi32_i32$1 - i64toi32_i32$5 | 0; + i64toi32_i32$5 = i64toi32_i32$5; + i64toi32_i32$1 = i64toi32_i32$4; + i64toi32_i32$0 = 0; + i64toi32_i32$3 = 63; + i64toi32_i32$0 = i64toi32_i32$5 & i64toi32_i32$0 | 0; + i64toi32_i32$0 = i64toi32_i32$0; + var$1 = i64toi32_i32$1 & i64toi32_i32$3 | 0; + var$1$hi = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = 4294967295; + i64toi32_i32$5 = 4294967295; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$3 = var$1; + i64toi32_i32$2 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = 0; + $21 = i64toi32_i32$0 >>> i64toi32_i32$2 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$2 | 0; + $21 = (((1 << i64toi32_i32$2 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$2 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$2 | 0) | 0; + } + $15$hi = i64toi32_i32$1; + i64toi32_i32$1 = var$0$hi; + i64toi32_i32$1 = $15$hi; + i64toi32_i32$0 = $21; + i64toi32_i32$5 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$5 = i64toi32_i32$1 & i64toi32_i32$5 | 0; + $17$hi = i64toi32_i32$5; + i64toi32_i32$5 = var$1$hi; + i64toi32_i32$5 = $17$hi; + i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$3 | 0; + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$3 = var$1; + i64toi32_i32$2 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$2 | 0; + $22 = 0; } else { - if ($2 >>> 0 >= 32 >>> 0) { - $2 = $2 - 32 | 0; - $3 = 32 - $2 | 0; - i64toi32_i32$HIGH_BITS = $0 >>> $2 | 0 | ($1 << $3 | 0) | 0; - $5 = $1 >>> $2 | 0 | ($0 << $3 | 0) | 0; - } else { - $3 = 32 - $2 | 0; - i64toi32_i32$HIGH_BITS = $1 >>> $2 | 0 | ($0 << $3 | 0) | 0; - $5 = $0 >>> $2 | 0 | ($1 << $3 | 0) | 0; - } - $4 = $5; + i64toi32_i32$0 = ((1 << i64toi32_i32$2 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$2 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$2 | 0) | 0; + $22 = i64toi32_i32$1 << i64toi32_i32$2 | 0; } - return $4 | 0; + $19$hi = i64toi32_i32$0; + i64toi32_i32$0 = $10$hi; + i64toi32_i32$5 = $10; + i64toi32_i32$1 = $19$hi; + i64toi32_i32$3 = $22; + i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$5 = i64toi32_i32$5 | i64toi32_i32$3 | 0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$5 | 0; } return { diff --git a/test/wasm2asm/i64.2asm.js b/test/wasm2asm/i64.2asm.js new file mode 100644 index 000000000..18bd71861 --- /dev/null +++ b/test/wasm2asm/i64.2asm.js @@ -0,0 +1,1734 @@ +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 Math_floor = global.Math.floor; + var Math_ceil = global.Math.ceil; + var Math_sqrt = global.Math.sqrt; + var i64toi32_i32$HIGH_BITS = 0; + function $0(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$3 = y; + i64toi32_i32$4 = x + i64toi32_i32$3 | 0; + i64toi32_i32$5 = i64toi32_i32$0 + y$hi | 0; + if (i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0) i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0; + i64toi32_i32$5 = i64toi32_i32$5; + i64toi32_i32$HIGH_BITS = i64toi32_i32$5; + return i64toi32_i32$4 | 0; + } + + function $1(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$2 = x; + i64toi32_i32$3 = y; + i64toi32_i32$5 = (i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0) + y$hi | 0; + i64toi32_i32$5 = i64toi32_i32$0 - i64toi32_i32$5 | 0; + i64toi32_i32$5 = i64toi32_i32$5; + i64toi32_i32$2 = i64toi32_i32$2 - i64toi32_i32$3 | 0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$5; + return i64toi32_i32$2 | 0; + } + + function $2(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$1 = y$hi; + i64toi32_i32$1 = __wasm_i64_mul(x | 0, i64toi32_i32$0 | 0, y | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$1 | 0; + } + + function $3(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$1 = y$hi; + i64toi32_i32$1 = __wasm_i64_sdiv(x | 0, i64toi32_i32$0 | 0, y | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$1 | 0; + } + + function $4(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$1 = y$hi; + i64toi32_i32$1 = __wasm_i64_udiv(x | 0, i64toi32_i32$0 | 0, y | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$1 | 0; + } + + function $5(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$1 = y$hi; + i64toi32_i32$1 = __wasm_i64_srem(x | 0, i64toi32_i32$0 | 0, y | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$1 | 0; + } + + function $6(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$1 = y$hi; + i64toi32_i32$1 = __wasm_i64_urem(x | 0, i64toi32_i32$0 | 0, y | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$1 | 0; + } + + function $7(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$2 = x; + i64toi32_i32$1 = y$hi; + i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$1 | 0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$2 = i64toi32_i32$2 & y | 0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$2 | 0; + } + + function $8(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$2 = x; + i64toi32_i32$1 = y$hi; + i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$2 = i64toi32_i32$2 | y | 0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$2 | 0; + } + + function $9(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$2 = x; + i64toi32_i32$1 = y$hi; + i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$1 | 0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$2 = i64toi32_i32$2 ^ y | 0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$2 | 0; + } + + function $10(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $9 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$2 = x; + i64toi32_i32$1 = y$hi; + i64toi32_i32$3 = y; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; + $9 = 0; + } else { + i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; + $9 = i64toi32_i32$2 << i64toi32_i32$4 | 0; + } + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$2 = $9; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$2 | 0; + } + + function $11(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, $9 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$2 = x; + i64toi32_i32$1 = y$hi; + i64toi32_i32$3 = y; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; + $9 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; + $9 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; + } + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$2 = $9; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$2 | 0; + } + + function $12(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, $9 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$2 = x; + i64toi32_i32$1 = y$hi; + i64toi32_i32$3 = y; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = 0; + $9 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; + $9 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; + } + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$2 = $9; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$2 | 0; + } + + function $13(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$1 = y$hi; + i64toi32_i32$1 = __wasm_rotl_i64(x | 0, i64toi32_i32$0 | 0, y | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$1 | 0; + } + + function $14(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$1 = y$hi; + i64toi32_i32$1 = __wasm_rotr_i64(x | 0, i64toi32_i32$0 | 0, y | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$1 | 0; + } + + function $15(x, x$hi) { + x = x | 0; + x$hi = x$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, $6 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$1 = x; + i64toi32_i32$3 = Math_clz32(i64toi32_i32$0); + i64toi32_i32$2 = 0; + if ((i64toi32_i32$3 | 0) == (32 | 0)) $6 = Math_clz32(i64toi32_i32$1) + 32 | 0; else $6 = i64toi32_i32$3; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$0 = $6; + i64toi32_i32$HIGH_BITS = i64toi32_i32$2; + return i64toi32_i32$0 | 0; + } + + function $16(x, x$hi) { + x = x | 0; + x$hi = x$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = __wasm_ctz_i64(x | 0, i64toi32_i32$0 | 0) | 0; + i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$0 | 0; + } + + function $17(x, x$hi) { + x = x | 0; + x$hi = x$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = __wasm_popcnt_i64(x | 0, i64toi32_i32$0 | 0) | 0; + i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$0 | 0; + } + + function $18(x, x$hi) { + x = x | 0; + x$hi = x$hi | 0; + var i64toi32_i32$0 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = i64toi32_i32$0; + return (x | i64toi32_i32$0 | 0 | 0) == (0 | 0) | 0; + } + + function $19(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + return (x | 0) == (y | 0) & (i64toi32_i32$0 | 0) == (y$hi | 0) | 0 | 0; + } + + function $20(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + return (x | 0) != (y | 0) | (i64toi32_i32$0 | 0) != (y$hi | 0) | 0 | 0; + } + + function $21(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, $8 = 0, $9 = 0, $10 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$2 = x; + i64toi32_i32$1 = y$hi; + i64toi32_i32$3 = y; + if ((i64toi32_i32$0 | 0) < (y$hi | 0)) $8 = 1; else { + if ((i64toi32_i32$0 | 0) <= (i64toi32_i32$1 | 0)) { + if (i64toi32_i32$2 >>> 0 >= i64toi32_i32$3 >>> 0) $9 = 0; else $9 = 1; + $10 = $9; + } else $10 = 0; + $8 = $10; + } + return $8 | 0; + } + + function $22(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + return i64toi32_i32$0 >>> 0 < y$hi >>> 0 | ((i64toi32_i32$0 | 0) == (y$hi | 0) & x >>> 0 < y >>> 0 | 0) | 0 | 0; + } + + function $23(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, $8 = 0, $9 = 0, $10 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$2 = x; + i64toi32_i32$1 = y$hi; + i64toi32_i32$3 = y; + if ((i64toi32_i32$0 | 0) < (y$hi | 0)) $8 = 1; else { + if ((i64toi32_i32$0 | 0) <= (i64toi32_i32$1 | 0)) { + if (i64toi32_i32$2 >>> 0 > i64toi32_i32$3 >>> 0) $9 = 0; else $9 = 1; + $10 = $9; + } else $10 = 0; + $8 = $10; + } + return $8 | 0; + } + + function $24(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + return i64toi32_i32$0 >>> 0 < y$hi >>> 0 | ((i64toi32_i32$0 | 0) == (y$hi | 0) & x >>> 0 <= y >>> 0 | 0) | 0 | 0; + } + + function $25(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, $8 = 0, $9 = 0, $10 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$2 = x; + i64toi32_i32$1 = y$hi; + i64toi32_i32$3 = y; + if ((i64toi32_i32$0 | 0) > (y$hi | 0)) $8 = 1; else { + if ((i64toi32_i32$0 | 0) >= (i64toi32_i32$1 | 0)) { + if (i64toi32_i32$2 >>> 0 <= i64toi32_i32$3 >>> 0) $9 = 0; else $9 = 1; + $10 = $9; + } else $10 = 0; + $8 = $10; + } + return $8 | 0; + } + + function $26(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + return i64toi32_i32$0 >>> 0 > y$hi >>> 0 | ((i64toi32_i32$0 | 0) == (y$hi | 0) & x >>> 0 > y >>> 0 | 0) | 0 | 0; + } + + function $27(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0, $8 = 0, $9 = 0, $10 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, i64toi32_i32$3 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + i64toi32_i32$2 = x; + i64toi32_i32$1 = y$hi; + i64toi32_i32$3 = y; + if ((i64toi32_i32$0 | 0) > (y$hi | 0)) $8 = 1; else { + if ((i64toi32_i32$0 | 0) >= (i64toi32_i32$1 | 0)) { + if (i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0) $9 = 0; else $9 = 1; + $10 = $9; + } else $10 = 0; + $8 = $10; + } + return $8 | 0; + } + + function $28(x, x$hi, y, y$hi) { + x = x | 0; + x$hi = x$hi | 0; + y = y | 0; + y$hi = y$hi | 0; + var i64toi32_i32$0 = 0; + i64toi32_i32$0 = x$hi; + i64toi32_i32$0 = y$hi; + i64toi32_i32$0 = x$hi; + return i64toi32_i32$0 >>> 0 > y$hi >>> 0 | ((i64toi32_i32$0 | 0) == (y$hi | 0) & x >>> 0 >= y >>> 0 | 0) | 0 | 0; + } + + function _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE(var$0, var$0$hi, var$1, var$1$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var$1 = var$1 | 0; + var$1$hi = var$1$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, var$2 = 0, i64toi32_i32$3 = 0, var$3 = 0, var$4 = 0, var$5 = 0, $21 = 0, $22 = 0, var$6 = 0, $24 = 0, $17 = 0, $18 = 0, $23 = 0, $29 = 0, $45 = 0, $56$hi = 0, $62$hi = 0; + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$0 = i64toi32_i32$0; + var$2 = var$1; + var$4 = var$2 >>> 16 | 0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + var$3 = var$0; + var$5 = var$3 >>> 16 | 0; + $17 = Math_imul(var$4, var$5); + $18 = var$2; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$3; + i64toi32_i32$1 = 0; + i64toi32_i32$3 = 32; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = 0; + $21 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; + $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; + } + i64toi32_i32$1 = i64toi32_i32$1; + $23 = $17 + Math_imul($18, $21) | 0; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$0 = var$1; + i64toi32_i32$2 = 0; + i64toi32_i32$3 = 32; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$2 = 0; + $22 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; + $22 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; + } + i64toi32_i32$2 = i64toi32_i32$2; + $29 = $23 + Math_imul($22, var$3) | 0; + var$2 = var$2 & 65535 | 0; + var$3 = var$3 & 65535 | 0; + var$6 = Math_imul(var$2, var$3); + var$2 = (var$6 >>> 16 | 0) + Math_imul(var$2, var$5) | 0; + $45 = $29 + (var$2 >>> 16 | 0) | 0; + var$2 = (var$2 & 65535 | 0) + Math_imul(var$4, var$3) | 0; + i64toi32_i32$2 = 0; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$1 = $45 + (var$2 >>> 16 | 0) | 0; + i64toi32_i32$0 = 0; + i64toi32_i32$3 = 32; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$4 | 0; + $24 = 0; + } else { + i64toi32_i32$0 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$2 << i64toi32_i32$4 | 0) | 0; + $24 = i64toi32_i32$1 << i64toi32_i32$4 | 0; + } + $56$hi = i64toi32_i32$0; + i64toi32_i32$0 = 0; + $62$hi = i64toi32_i32$0; + i64toi32_i32$0 = $56$hi; + i64toi32_i32$2 = $24; + i64toi32_i32$1 = $62$hi; + i64toi32_i32$3 = var$2 << 16 | 0 | (var$6 & 65535 | 0) | 0; + i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$2 = i64toi32_i32$2 | i64toi32_i32$3 | 0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$2 | 0; + } + + function _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0, var$0$hi, var$1, var$1$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var$1 = var$1 | 0; + var$1$hi = var$1$hi | 0; + var i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, $21 = 0, $22 = 0, $23 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17 = 0, $17$hi = 0, $23$hi = 0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$0; + i64toi32_i32$1 = 0; + i64toi32_i32$3 = 63; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; + $21 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; + $21 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; + } + i64toi32_i32$1 = i64toi32_i32$1; + var$2 = $21; + var$2$hi = i64toi32_i32$1; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$1 = var$0$hi; + i64toi32_i32$1 = var$2$hi; + i64toi32_i32$0 = var$2; + i64toi32_i32$2 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; + $7$hi = i64toi32_i32$2; + i64toi32_i32$2 = i64toi32_i32$1; + i64toi32_i32$2 = $7$hi; + i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; + i64toi32_i32$0 = var$2$hi; + i64toi32_i32$3 = var$2; + i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; + i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; + i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; + i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; + $9 = i64toi32_i32$4; + $9$hi = i64toi32_i32$5; + i64toi32_i32$5 = var$1$hi; + i64toi32_i32$5 = i64toi32_i32$5; + i64toi32_i32$2 = var$1; + i64toi32_i32$1 = 0; + i64toi32_i32$3 = 63; + i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; + $22 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; + $22 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; + } + i64toi32_i32$1 = i64toi32_i32$1; + var$2 = $22; + var$2$hi = i64toi32_i32$1; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = var$2$hi; + i64toi32_i32$5 = var$2; + i64toi32_i32$2 = var$1$hi; + i64toi32_i32$3 = var$1; + i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; + $14$hi = i64toi32_i32$2; + i64toi32_i32$2 = i64toi32_i32$1; + i64toi32_i32$2 = $14$hi; + i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; + i64toi32_i32$5 = var$2$hi; + i64toi32_i32$3 = var$2; + i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; + i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; + i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; + i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; + $16$hi = i64toi32_i32$4; + i64toi32_i32$4 = $9$hi; + i64toi32_i32$1 = $16$hi; + i64toi32_i32$1 = __wasm_i64_udiv($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; + $17 = i64toi32_i32$1; + $17$hi = i64toi32_i32$4; + i64toi32_i32$4 = var$1$hi; + i64toi32_i32$4 = var$0$hi; + i64toi32_i32$4 = var$1$hi; + i64toi32_i32$2 = var$1; + i64toi32_i32$1 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; + i64toi32_i32$2 = 0; + i64toi32_i32$3 = 63; + i64toi32_i32$5 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$2 = i64toi32_i32$1 >> 31 | 0; + $23 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; + } else { + i64toi32_i32$2 = i64toi32_i32$1 >> i64toi32_i32$5 | 0; + $23 = (((1 << i64toi32_i32$5 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$5 | 0) | 0 | (i64toi32_i32$4 >>> i64toi32_i32$5 | 0) | 0; + } + i64toi32_i32$2 = i64toi32_i32$2; + var$0 = $23; + var$0$hi = i64toi32_i32$2; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$2 = $17$hi; + i64toi32_i32$1 = $17; + i64toi32_i32$4 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$4 | 0; + $23$hi = i64toi32_i32$4; + i64toi32_i32$4 = var$0$hi; + i64toi32_i32$4 = $23$hi; + i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$3 | 0; + i64toi32_i32$1 = var$0$hi; + i64toi32_i32$3 = i64toi32_i32$3; + i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$3 | 0; + i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0; + i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$1 | 0; + i64toi32_i32$0 = i64toi32_i32$4 - i64toi32_i32$0 | 0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = i64toi32_i32$5; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$2 | 0; + } + + function _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0, var$0$hi, var$1, var$1$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var$1 = var$1 | 0; + var$1$hi = var$1$hi | 0; + var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, var$2$hi = 0, i64toi32_i32$6 = 0, var$2 = 0, $20 = 0, $21 = 0, $7$hi = 0, $9 = 0, $9$hi = 0, $14$hi = 0, $16$hi = 0, $17$hi = 0, $19$hi = 0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$0; + i64toi32_i32$1 = 0; + i64toi32_i32$3 = 63; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = i64toi32_i32$0 >> 31 | 0; + $20 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$0 >> i64toi32_i32$4 | 0; + $20 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; + } + i64toi32_i32$1 = i64toi32_i32$1; + var$2 = $20; + var$2$hi = i64toi32_i32$1; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$1 = var$0$hi; + i64toi32_i32$1 = var$2$hi; + i64toi32_i32$0 = var$2; + i64toi32_i32$2 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; + $7$hi = i64toi32_i32$2; + i64toi32_i32$2 = i64toi32_i32$1; + i64toi32_i32$2 = $7$hi; + i64toi32_i32$1 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; + i64toi32_i32$0 = var$2$hi; + i64toi32_i32$3 = var$2; + i64toi32_i32$4 = i64toi32_i32$1 - i64toi32_i32$3 | 0; + i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; + i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; + i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; + $9 = i64toi32_i32$4; + $9$hi = i64toi32_i32$5; + i64toi32_i32$5 = var$1$hi; + i64toi32_i32$5 = i64toi32_i32$5; + i64toi32_i32$2 = var$1; + i64toi32_i32$1 = 0; + i64toi32_i32$3 = 63; + i64toi32_i32$0 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = i64toi32_i32$5 >> 31 | 0; + $21 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$5 >> i64toi32_i32$0 | 0; + $21 = (((1 << i64toi32_i32$0 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$0 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$0 | 0) | 0; + } + i64toi32_i32$1 = i64toi32_i32$1; + var$0 = $21; + var$0$hi = i64toi32_i32$1; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = var$0$hi; + i64toi32_i32$5 = var$0; + i64toi32_i32$2 = var$1$hi; + i64toi32_i32$3 = var$1; + i64toi32_i32$2 = i64toi32_i32$1 ^ i64toi32_i32$2 | 0; + $14$hi = i64toi32_i32$2; + i64toi32_i32$2 = i64toi32_i32$1; + i64toi32_i32$2 = $14$hi; + i64toi32_i32$1 = i64toi32_i32$5 ^ i64toi32_i32$3 | 0; + i64toi32_i32$5 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$3 | 0; + i64toi32_i32$6 = i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0; + i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; + i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$4 | 0; + $16$hi = i64toi32_i32$4; + i64toi32_i32$4 = $9$hi; + i64toi32_i32$1 = $16$hi; + i64toi32_i32$1 = __wasm_i64_urem($9 | 0, i64toi32_i32$4 | 0, i64toi32_i32$0 | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$4 = i64toi32_i32$HIGH_BITS; + $17$hi = i64toi32_i32$4; + i64toi32_i32$4 = var$2$hi; + i64toi32_i32$4 = $17$hi; + i64toi32_i32$2 = i64toi32_i32$1; + i64toi32_i32$1 = var$2$hi; + i64toi32_i32$3 = var$2; + i64toi32_i32$1 = i64toi32_i32$4 ^ i64toi32_i32$1 | 0; + $19$hi = i64toi32_i32$1; + i64toi32_i32$1 = var$2$hi; + i64toi32_i32$1 = $19$hi; + i64toi32_i32$4 = i64toi32_i32$2 ^ i64toi32_i32$3 | 0; + i64toi32_i32$2 = var$2$hi; + i64toi32_i32$3 = i64toi32_i32$3; + i64toi32_i32$5 = i64toi32_i32$4 - i64toi32_i32$3 | 0; + i64toi32_i32$6 = i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0; + i64toi32_i32$0 = i64toi32_i32$6 + i64toi32_i32$2 | 0; + i64toi32_i32$0 = i64toi32_i32$1 - i64toi32_i32$0 | 0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$4 = i64toi32_i32$5; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$4 | 0; + } + + function _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0, var$0$hi, var$1, var$1$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var$1 = var$1 | 0; + var$1$hi = var$1$hi | 0; + var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, var$2 = 0, var$3 = 0, var$4 = 0, var$5 = 0, var$5$hi = 0, var$6 = 0, var$6$hi = 0, i64toi32_i32$6 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, var$8$hi = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, var$7$hi = 0, $50 = 0, $63$hi = 0, $65 = 0, $65$hi = 0, $66 = 0, $120$hi = 0, $129$hi = 0, $134$hi = 0, var$8 = 0, $140 = 0, $140$hi = 0, $142$hi = 0, $144 = 0, $144$hi = 0, $151 = 0, $151$hi = 0, $154$hi = 0, var$7 = 0, $165$hi = 0, wasm2asm_i32$0 = 0, wasm2asm_i32$1 = 0; + label$1 : { + label$2 : { + label$3 : { + label$4 : { + label$5 : { + label$6 : { + label$7 : { + label$8 : { + label$9 : { + label$10 : { + label$11 : { + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$0; + i64toi32_i32$1 = 0; + i64toi32_i32$3 = 32; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = 0; + $38 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; + $38 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; + } + i64toi32_i32$1 = i64toi32_i32$1; + var$2 = $38; + if (var$2) block : { + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$1; + var$3 = var$1; + if ((var$3 | 0) == (0 | 0)) break label$11; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$0 = var$1; + i64toi32_i32$2 = 0; + i64toi32_i32$3 = 32; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$2 = 0; + $39 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; + $39 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; + } + i64toi32_i32$2 = i64toi32_i32$2; + var$4 = $39; + if ((var$4 | 0) == (0 | 0)) break label$9; + var$2 = Math_clz32(var$4) - Math_clz32(var$2) | 0; + if (var$2 >>> 0 <= 31 >>> 0) break label$8; + break label$2; + }; + i64toi32_i32$2 = var$1$hi; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$1 = var$1; + i64toi32_i32$0 = 1; + i64toi32_i32$3 = 0; + if (i64toi32_i32$2 >>> 0 > i64toi32_i32$0 >>> 0 | ((i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$1 >>> 0 >= i64toi32_i32$3 >>> 0 | 0) | 0) break label$2; + i64toi32_i32$1 = var$0$hi; + i64toi32_i32$1 = i64toi32_i32$1; + var$2 = var$0; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = i64toi32_i32$1; + var$3 = var$1; + var$2 = (var$2 >>> 0) / (var$3 >>> 0) | 0; + i64toi32_i32$1 = 0; + i64toi32_i32$2 = 1024; + i64toi32_i32$1 = i64toi32_i32$1; + HEAP32[i64toi32_i32$2 >> 2] = var$0 - Math_imul(var$2, var$3) | 0; + (wasm2asm_i32$0 = i64toi32_i32$2, wasm2asm_i32$1 = i64toi32_i32$1), ((HEAP8[(wasm2asm_i32$0 + 4 | 0) >> 0] = wasm2asm_i32$1 & 255 | 0, HEAP8[(wasm2asm_i32$0 + 5 | 0) >> 0] = (wasm2asm_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 6 | 0) >> 0] = (wasm2asm_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 7 | 0) >> 0] = (wasm2asm_i32$1 >>> 24 | 0) & 255 | 0; + i64toi32_i32$1 = 0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$2 = var$2; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$2 | 0; + }; + i64toi32_i32$2 = var$1$hi; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$3 = var$1; + i64toi32_i32$1 = 0; + i64toi32_i32$0 = 32; + i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { + i64toi32_i32$1 = 0; + $40 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; + $40 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; + } + i64toi32_i32$1 = i64toi32_i32$1; + var$3 = $40; + i64toi32_i32$1 = var$0$hi; + i64toi32_i32$1 = i64toi32_i32$1; + if ((var$0 | 0) == (0 | 0)) break label$7; + if ((var$3 | 0) == (0 | 0)) break label$6; + var$4 = var$3 + 4294967295 | 0; + if (var$4 & var$3 | 0) break label$6; + i64toi32_i32$1 = 0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$2 = var$4 & var$2 | 0; + i64toi32_i32$3 = 0; + i64toi32_i32$0 = 32; + i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { + i64toi32_i32$3 = i64toi32_i32$2 << i64toi32_i32$4 | 0; + $41 = 0; + } else { + i64toi32_i32$3 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; + $41 = i64toi32_i32$2 << i64toi32_i32$4 | 0; + } + $63$hi = i64toi32_i32$3; + i64toi32_i32$3 = var$0$hi; + i64toi32_i32$3 = i64toi32_i32$3; + i64toi32_i32$1 = var$0; + i64toi32_i32$2 = 0; + i64toi32_i32$0 = 4294967295; + i64toi32_i32$2 = i64toi32_i32$3 & i64toi32_i32$2 | 0; + $65 = i64toi32_i32$1 & i64toi32_i32$0 | 0; + $65$hi = i64toi32_i32$2; + i64toi32_i32$2 = $63$hi; + i64toi32_i32$3 = $41; + i64toi32_i32$1 = $65$hi; + i64toi32_i32$0 = $65; + i64toi32_i32$1 = i64toi32_i32$2 | i64toi32_i32$1 | 0; + $66 = i64toi32_i32$3 | i64toi32_i32$0 | 0; + i64toi32_i32$3 = 1024; + i64toi32_i32$1 = i64toi32_i32$1; + HEAP32[i64toi32_i32$3 >> 2] = $66; + (wasm2asm_i32$0 = i64toi32_i32$3, wasm2asm_i32$1 = i64toi32_i32$1), ((HEAP8[(wasm2asm_i32$0 + 4 | 0) >> 0] = wasm2asm_i32$1 & 255 | 0, HEAP8[(wasm2asm_i32$0 + 5 | 0) >> 0] = (wasm2asm_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 6 | 0) >> 0] = (wasm2asm_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 7 | 0) >> 0] = (wasm2asm_i32$1 >>> 24 | 0) & 255 | 0; + i64toi32_i32$1 = 0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$3 = var$2 >>> ((__wasm_ctz_i32(var$3 | 0) | 0) & 31 | 0) | 0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$3 | 0; + }; + }; + var$4 = var$3 + 4294967295 | 0; + if ((var$4 & var$3 | 0 | 0) == (0 | 0)) break label$5; + var$2 = (Math_clz32(var$3) + 33 | 0) - Math_clz32(var$2) | 0; + var$3 = 0 - var$2 | 0; + break label$3; + }; + var$3 = 63 - var$2 | 0; + var$2 = var$2 + 1 | 0; + break label$3; + }; + var$4 = (var$2 >>> 0) / (var$3 >>> 0) | 0; + i64toi32_i32$3 = 0; + i64toi32_i32$3 = i64toi32_i32$3; + i64toi32_i32$2 = var$2 - Math_imul(var$4, var$3) | 0; + i64toi32_i32$1 = 0; + i64toi32_i32$0 = 32; + i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { + i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; + $42 = 0; + } else { + i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; + $42 = i64toi32_i32$2 << i64toi32_i32$4 | 0; + } + i64toi32_i32$2 = 1024; + i64toi32_i32$1 = i64toi32_i32$1; + HEAP32[i64toi32_i32$2 >> 2] = $42; + (wasm2asm_i32$0 = i64toi32_i32$2, wasm2asm_i32$1 = i64toi32_i32$1), ((HEAP8[(wasm2asm_i32$0 + 4 | 0) >> 0] = wasm2asm_i32$1 & 255 | 0, HEAP8[(wasm2asm_i32$0 + 5 | 0) >> 0] = (wasm2asm_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 6 | 0) >> 0] = (wasm2asm_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 7 | 0) >> 0] = (wasm2asm_i32$1 >>> 24 | 0) & 255 | 0; + i64toi32_i32$1 = 0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$2 = var$4; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$2 | 0; + }; + var$2 = Math_clz32(var$3) - Math_clz32(var$2) | 0; + if (var$2 >>> 0 < 31 >>> 0) break label$4; + break label$2; + }; + i64toi32_i32$2 = var$0$hi; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$2 = 0; + i64toi32_i32$1 = 1024; + i64toi32_i32$2 = i64toi32_i32$2; + HEAP32[i64toi32_i32$1 >> 2] = var$4 & var$0 | 0; + (wasm2asm_i32$0 = i64toi32_i32$1, wasm2asm_i32$1 = i64toi32_i32$2), ((HEAP8[(wasm2asm_i32$0 + 4 | 0) >> 0] = wasm2asm_i32$1 & 255 | 0, HEAP8[(wasm2asm_i32$0 + 5 | 0) >> 0] = (wasm2asm_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 6 | 0) >> 0] = (wasm2asm_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 7 | 0) >> 0] = (wasm2asm_i32$1 >>> 24 | 0) & 255 | 0; + if ((var$3 | 0) == (1 | 0)) break label$1; + i64toi32_i32$2 = var$0$hi; + i64toi32_i32$2 = 0; + $120$hi = i64toi32_i32$2; + i64toi32_i32$2 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$1 = $120$hi; + i64toi32_i32$0 = __wasm_ctz_i32(var$3 | 0) | 0; + i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { + i64toi32_i32$1 = 0; + $43 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$2 >>> i64toi32_i32$4 | 0; + $43 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$2 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$3 >>> i64toi32_i32$4 | 0) | 0; + } + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$3 = $43; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$3 | 0; + }; + var$3 = 63 - var$2 | 0; + var$2 = var$2 + 1 | 0; + }; + i64toi32_i32$3 = var$0$hi; + i64toi32_i32$3 = 0; + $129$hi = i64toi32_i32$3; + i64toi32_i32$3 = var$0$hi; + i64toi32_i32$2 = var$0; + i64toi32_i32$1 = $129$hi; + i64toi32_i32$0 = var$2 & 63 | 0; + i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { + i64toi32_i32$1 = 0; + $44 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$3 >>> i64toi32_i32$4 | 0; + $44 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$3 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; + } + i64toi32_i32$1 = i64toi32_i32$1; + var$5 = $44; + var$5$hi = i64toi32_i32$1; + i64toi32_i32$1 = var$0$hi; + i64toi32_i32$1 = 0; + $134$hi = i64toi32_i32$1; + i64toi32_i32$1 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$2 = $134$hi; + i64toi32_i32$0 = var$3 & 63 | 0; + i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { + i64toi32_i32$2 = i64toi32_i32$3 << i64toi32_i32$4 | 0; + $45 = 0; + } else { + i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$3 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; + $45 = i64toi32_i32$3 << i64toi32_i32$4 | 0; + } + i64toi32_i32$2 = i64toi32_i32$2; + var$0 = $45; + var$0$hi = i64toi32_i32$2; + label$13 : { + if (var$2) block3 : { + i64toi32_i32$2 = var$1$hi; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$1 = var$1; + i64toi32_i32$3 = 4294967295; + i64toi32_i32$0 = 4294967295; + i64toi32_i32$4 = i64toi32_i32$1 + i64toi32_i32$0 | 0; + i64toi32_i32$5 = i64toi32_i32$2 + i64toi32_i32$3 | 0; + if (i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0) i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0; + i64toi32_i32$5 = i64toi32_i32$5; + var$8 = i64toi32_i32$4; + var$8$hi = i64toi32_i32$5; + label$15 : do { + i64toi32_i32$5 = var$5$hi; + i64toi32_i32$5 = i64toi32_i32$5; + i64toi32_i32$2 = var$5; + i64toi32_i32$1 = 0; + i64toi32_i32$0 = 1; + i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { + i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$3 | 0; + $46 = 0; + } else { + i64toi32_i32$1 = ((1 << i64toi32_i32$3 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$3 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$3 | 0) | 0; + $46 = i64toi32_i32$2 << i64toi32_i32$3 | 0; + } + $140 = $46; + $140$hi = i64toi32_i32$1; + i64toi32_i32$1 = var$0$hi; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$5 = var$0; + i64toi32_i32$2 = 0; + i64toi32_i32$0 = 63; + i64toi32_i32$3 = i64toi32_i32$0 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { + i64toi32_i32$2 = 0; + $47 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; + } else { + i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$3 | 0; + $47 = (((1 << i64toi32_i32$3 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$3 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$3 | 0) | 0; + } + $142$hi = i64toi32_i32$2; + i64toi32_i32$2 = $140$hi; + i64toi32_i32$1 = $140; + i64toi32_i32$5 = $142$hi; + i64toi32_i32$0 = $47; + i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; + i64toi32_i32$5 = i64toi32_i32$5; + var$5 = i64toi32_i32$1 | i64toi32_i32$0 | 0; + var$5$hi = i64toi32_i32$5; + i64toi32_i32$5 = i64toi32_i32$5; + $144 = var$5; + $144$hi = i64toi32_i32$5; + i64toi32_i32$5 = var$8$hi; + i64toi32_i32$5 = var$5$hi; + i64toi32_i32$5 = var$8$hi; + i64toi32_i32$2 = var$8; + i64toi32_i32$1 = var$5$hi; + i64toi32_i32$0 = var$5; + i64toi32_i32$3 = i64toi32_i32$2 - i64toi32_i32$0 | 0; + i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; + i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$1 | 0; + i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; + i64toi32_i32$4 = i64toi32_i32$4; + i64toi32_i32$5 = i64toi32_i32$3; + i64toi32_i32$2 = 0; + i64toi32_i32$0 = 63; + i64toi32_i32$1 = i64toi32_i32$0 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { + i64toi32_i32$2 = i64toi32_i32$4 >> 31 | 0; + $48 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; + } else { + i64toi32_i32$2 = i64toi32_i32$4 >> i64toi32_i32$1 | 0; + $48 = (((1 << i64toi32_i32$1 | 0) - 1 | 0) & i64toi32_i32$4 | 0) << (32 - i64toi32_i32$1 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$1 | 0) | 0; + } + i64toi32_i32$2 = i64toi32_i32$2; + var$6 = $48; + var$6$hi = i64toi32_i32$2; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$2 = var$1$hi; + i64toi32_i32$2 = var$6$hi; + i64toi32_i32$4 = var$6; + i64toi32_i32$5 = var$1$hi; + i64toi32_i32$0 = var$1; + i64toi32_i32$5 = i64toi32_i32$2 & i64toi32_i32$5 | 0; + $151 = i64toi32_i32$4 & i64toi32_i32$0 | 0; + $151$hi = i64toi32_i32$5; + i64toi32_i32$5 = $144$hi; + i64toi32_i32$2 = $144; + i64toi32_i32$4 = $151$hi; + i64toi32_i32$0 = $151; + i64toi32_i32$1 = i64toi32_i32$2 - i64toi32_i32$0 | 0; + i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$0 >>> 0; + i64toi32_i32$3 = i64toi32_i32$6 + i64toi32_i32$4 | 0; + i64toi32_i32$3 = i64toi32_i32$5 - i64toi32_i32$3 | 0; + i64toi32_i32$3 = i64toi32_i32$3; + var$5 = i64toi32_i32$1; + var$5$hi = i64toi32_i32$3; + i64toi32_i32$3 = var$0$hi; + i64toi32_i32$3 = i64toi32_i32$3; + i64toi32_i32$5 = var$0; + i64toi32_i32$2 = 0; + i64toi32_i32$0 = 1; + i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { + i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; + $49 = 0; + } else { + i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; + $49 = i64toi32_i32$5 << i64toi32_i32$4 | 0; + } + $154$hi = i64toi32_i32$2; + i64toi32_i32$2 = var$7$hi; + i64toi32_i32$2 = $154$hi; + i64toi32_i32$3 = $49; + i64toi32_i32$5 = var$7$hi; + i64toi32_i32$0 = var$7; + i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; + i64toi32_i32$5 = i64toi32_i32$5; + var$0 = i64toi32_i32$3 | i64toi32_i32$0 | 0; + var$0$hi = i64toi32_i32$5; + i64toi32_i32$5 = var$6$hi; + i64toi32_i32$5 = i64toi32_i32$5; + i64toi32_i32$2 = var$6; + i64toi32_i32$3 = 0; + i64toi32_i32$0 = 1; + i64toi32_i32$3 = i64toi32_i32$5 & i64toi32_i32$3 | 0; + i64toi32_i32$3 = i64toi32_i32$3; + var$6 = i64toi32_i32$2 & i64toi32_i32$0 | 0; + var$6$hi = i64toi32_i32$3; + i64toi32_i32$3 = i64toi32_i32$3; + i64toi32_i32$3 = i64toi32_i32$3; + var$7 = var$6; + var$7$hi = i64toi32_i32$3; + var$2 = var$2 + 4294967295 | 0; + if (var$2) continue label$15; + break label$15; + } while (1); + break label$13; + }; + }; + i64toi32_i32$3 = var$5$hi; + i64toi32_i32$2 = 1024; + i64toi32_i32$3 = i64toi32_i32$3; + HEAP32[i64toi32_i32$2 >> 2] = var$5; + (wasm2asm_i32$0 = i64toi32_i32$2, wasm2asm_i32$1 = i64toi32_i32$3), ((HEAP8[(wasm2asm_i32$0 + 4 | 0) >> 0] = wasm2asm_i32$1 & 255 | 0, HEAP8[(wasm2asm_i32$0 + 5 | 0) >> 0] = (wasm2asm_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 6 | 0) >> 0] = (wasm2asm_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 7 | 0) >> 0] = (wasm2asm_i32$1 >>> 24 | 0) & 255 | 0; + i64toi32_i32$3 = var$0$hi; + i64toi32_i32$3 = i64toi32_i32$3; + i64toi32_i32$5 = var$0; + i64toi32_i32$2 = 0; + i64toi32_i32$0 = 1; + i64toi32_i32$4 = i64toi32_i32$0 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$0 & 63 | 0) >>> 0) { + i64toi32_i32$2 = i64toi32_i32$5 << i64toi32_i32$4 | 0; + $50 = 0; + } else { + i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$3 << i64toi32_i32$4 | 0) | 0; + $50 = i64toi32_i32$5 << i64toi32_i32$4 | 0; + } + $165$hi = i64toi32_i32$2; + i64toi32_i32$2 = var$6$hi; + i64toi32_i32$2 = $165$hi; + i64toi32_i32$3 = $50; + i64toi32_i32$5 = var$6$hi; + i64toi32_i32$0 = var$6; + i64toi32_i32$5 = i64toi32_i32$2 | i64toi32_i32$5 | 0; + i64toi32_i32$5 = i64toi32_i32$5; + i64toi32_i32$3 = i64toi32_i32$3 | i64toi32_i32$0 | 0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$5; + return i64toi32_i32$3 | 0; + }; + i64toi32_i32$3 = var$0$hi; + i64toi32_i32$5 = 1024; + i64toi32_i32$3 = i64toi32_i32$3; + HEAP32[i64toi32_i32$5 >> 2] = var$0; + (wasm2asm_i32$0 = i64toi32_i32$5, wasm2asm_i32$1 = i64toi32_i32$3), ((HEAP8[(wasm2asm_i32$0 + 4 | 0) >> 0] = wasm2asm_i32$1 & 255 | 0, HEAP8[(wasm2asm_i32$0 + 5 | 0) >> 0] = (wasm2asm_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 6 | 0) >> 0] = (wasm2asm_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 7 | 0) >> 0] = (wasm2asm_i32$1 >>> 24 | 0) & 255 | 0; + i64toi32_i32$3 = 0; + var$0 = 0; + var$0$hi = i64toi32_i32$3; + }; + i64toi32_i32$3 = var$0$hi; + i64toi32_i32$3 = i64toi32_i32$3; + i64toi32_i32$3 = i64toi32_i32$3; + i64toi32_i32$3 = i64toi32_i32$3; + i64toi32_i32$5 = var$0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$3; + return i64toi32_i32$5 | 0; + } + + function __wasm_ctz_i64(var$0, var$0$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, $10 = 0, $5$hi = 0, $8$hi = 0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + if (((var$0 | i64toi32_i32$0 | 0 | 0) == (0 | 0) | 0) == (0 | 0)) { + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$0; + i64toi32_i32$1 = 4294967295; + i64toi32_i32$3 = 4294967295; + i64toi32_i32$4 = i64toi32_i32$2 + i64toi32_i32$3 | 0; + i64toi32_i32$5 = i64toi32_i32$0 + i64toi32_i32$1 | 0; + if (i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0) i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0; + $5$hi = i64toi32_i32$5; + i64toi32_i32$5 = var$0$hi; + i64toi32_i32$5 = $5$hi; + i64toi32_i32$0 = i64toi32_i32$4; + i64toi32_i32$2 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$2 = i64toi32_i32$5 ^ i64toi32_i32$2 | 0; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$0 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; + i64toi32_i32$3 = Math_clz32(i64toi32_i32$2); + i64toi32_i32$5 = 0; + if ((i64toi32_i32$3 | 0) == (32 | 0)) $10 = Math_clz32(i64toi32_i32$0) + 32 | 0; else $10 = i64toi32_i32$3; + $8$hi = i64toi32_i32$5; + i64toi32_i32$5 = 0; + i64toi32_i32$0 = 63; + i64toi32_i32$2 = $8$hi; + i64toi32_i32$3 = $10; + i64toi32_i32$1 = i64toi32_i32$0 - i64toi32_i32$3 | 0; + i64toi32_i32$4 = (i64toi32_i32$0 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$2 | 0; + i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; + i64toi32_i32$4 = i64toi32_i32$4; + i64toi32_i32$0 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$4; + return i64toi32_i32$0 | 0; + } + i64toi32_i32$0 = 0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$4 = 64; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$4 | 0; + } + + function __wasm_i64_mul(var$0, var$0$hi, var$1, var$1$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var$1 = var$1 | 0; + var$1$hi = var$1$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$1 | 0; + } + + function __wasm_i64_sdiv(var$0, var$0$hi, var$1, var$1$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var$1 = var$1 | 0; + var$1$hi = var$1$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Div3div17he78fc483e41d7ec7E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$1 | 0; + } + + function __wasm_i64_srem(var$0, var$0$hi, var$1, var$1$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var$1 = var$1 | 0; + var$1$hi = var$1$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = _ZN17compiler_builtins3int4sdiv3Mod4mod_17h2cbb7bbf36e41d68E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$1 | 0; + } + + function __wasm_i64_udiv(var$0, var$0$hi, var$1, var$1$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var$1 = var$1 | 0; + var$1$hi = var$1$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$1 | 0; + } + + function __wasm_i64_urem(var$0, var$0$hi, var$1, var$1$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var$1 = var$1 | 0; + var$1$hi = var$1$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2asm_i32$0 = 0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = _ZN17compiler_builtins3int4udiv10divmod_u6417h6026910b5ed08e40E(var$0 | 0, i64toi32_i32$0 | 0, var$1 | 0, i64toi32_i32$1 | 0) | 0; + i64toi32_i32$0 = i64toi32_i32$HIGH_BITS; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$1 = 1024; + i64toi32_i32$0 = (wasm2asm_i32$0 = i64toi32_i32$1, HEAPU8[(wasm2asm_i32$0 + 4 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 5 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2asm_i32$0 + 6 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2asm_i32$0 + 7 | 0) >> 0] | 0 | 0) << 24); + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$1 = HEAPU32[i64toi32_i32$1 >> 2] | 0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$1 | 0; + } + + function __wasm_popcnt_i64(var$0, var$0$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$5 = 0, i64toi32_i32$3 = 0, i64toi32_i32$1 = 0, var$1$hi = 0, var$1 = 0, $5 = 0, $5$hi = 0, $4 = 0, $9$hi = 0; + label$1 : { + label$2 : do { + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + $4 = (var$0 | i64toi32_i32$0 | 0 | 0) == (0 | 0); + i64toi32_i32$0 = var$1$hi; + $5 = var$1; + $5$hi = i64toi32_i32$0; + if ($4) break label$1; + i64toi32_i32$0 = $5$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$0; + i64toi32_i32$1 = 0; + i64toi32_i32$3 = 1; + i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$3 | 0; + i64toi32_i32$5 = (i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$1 | 0; + i64toi32_i32$5 = i64toi32_i32$0 - i64toi32_i32$5 | 0; + $9$hi = i64toi32_i32$5; + i64toi32_i32$5 = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$2; + i64toi32_i32$2 = $9$hi; + i64toi32_i32$3 = i64toi32_i32$4; + i64toi32_i32$2 = i64toi32_i32$5 & i64toi32_i32$2 | 0; + i64toi32_i32$2 = i64toi32_i32$2; + var$0 = i64toi32_i32$0 & i64toi32_i32$4 | 0; + var$0$hi = i64toi32_i32$2; + i64toi32_i32$2 = var$1$hi; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$5 = var$1; + i64toi32_i32$0 = 0; + i64toi32_i32$3 = 1; + i64toi32_i32$1 = i64toi32_i32$5 + i64toi32_i32$3 | 0; + i64toi32_i32$4 = i64toi32_i32$2 + i64toi32_i32$0 | 0; + if (i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0) i64toi32_i32$4 = i64toi32_i32$4 + 1 | 0; + i64toi32_i32$4 = i64toi32_i32$4; + var$1 = i64toi32_i32$1; + var$1$hi = i64toi32_i32$4; + continue label$2; + break label$2; + } while (1); + }; + i64toi32_i32$4 = $5$hi; + i64toi32_i32$4 = i64toi32_i32$4; + i64toi32_i32$5 = $5; + i64toi32_i32$HIGH_BITS = i64toi32_i32$4; + return i64toi32_i32$5 | 0; + } + + function __wasm_rotl_i64(var$0, var$0$hi, var$1, var$1$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var$1 = var$1 | 0; + var$1$hi = var$1$hi | 0; + var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, var$2$hi = 0, var$2 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $6$hi = 0, $8$hi = 0, $10 = 0, $10$hi = 0, $15$hi = 0, $17$hi = 0, $19$hi = 0; + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$1; + i64toi32_i32$1 = 0; + i64toi32_i32$3 = 63; + i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$1 | 0; + i64toi32_i32$1 = i64toi32_i32$1; + var$2 = i64toi32_i32$2 & i64toi32_i32$3 | 0; + var$2$hi = i64toi32_i32$1; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$1 = 4294967295; + i64toi32_i32$0 = 4294967295; + i64toi32_i32$2 = var$2$hi; + i64toi32_i32$3 = var$2; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$2 = 0; + $19 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$2 = i64toi32_i32$1 >>> i64toi32_i32$4 | 0; + $19 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$1 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$0 >>> i64toi32_i32$4 | 0) | 0; + } + $6$hi = i64toi32_i32$2; + i64toi32_i32$2 = var$0$hi; + i64toi32_i32$2 = $6$hi; + i64toi32_i32$1 = $19; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$0 = i64toi32_i32$2 & i64toi32_i32$0 | 0; + $8$hi = i64toi32_i32$0; + i64toi32_i32$0 = var$2$hi; + i64toi32_i32$0 = $8$hi; + i64toi32_i32$2 = i64toi32_i32$1 & i64toi32_i32$3 | 0; + i64toi32_i32$1 = var$2$hi; + i64toi32_i32$3 = var$2; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = i64toi32_i32$2 << i64toi32_i32$4 | 0; + $20 = 0; + } else { + i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; + $20 = i64toi32_i32$2 << i64toi32_i32$4 | 0; + } + $10 = $20; + $10$hi = i64toi32_i32$1; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = 0; + i64toi32_i32$0 = 0; + i64toi32_i32$2 = var$1$hi; + i64toi32_i32$3 = var$1; + i64toi32_i32$4 = i64toi32_i32$0 - i64toi32_i32$3 | 0; + i64toi32_i32$5 = (i64toi32_i32$0 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$2 | 0; + i64toi32_i32$5 = i64toi32_i32$1 - i64toi32_i32$5 | 0; + i64toi32_i32$5 = i64toi32_i32$5; + i64toi32_i32$1 = i64toi32_i32$4; + i64toi32_i32$0 = 0; + i64toi32_i32$3 = 63; + i64toi32_i32$0 = i64toi32_i32$5 & i64toi32_i32$0 | 0; + i64toi32_i32$0 = i64toi32_i32$0; + var$1 = i64toi32_i32$1 & i64toi32_i32$3 | 0; + var$1$hi = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = 4294967295; + i64toi32_i32$5 = 4294967295; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$3 = var$1; + i64toi32_i32$2 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = i64toi32_i32$5 << i64toi32_i32$2 | 0; + $21 = 0; + } else { + i64toi32_i32$1 = ((1 << i64toi32_i32$2 | 0) - 1 | 0) & (i64toi32_i32$5 >>> (32 - i64toi32_i32$2 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$2 | 0) | 0; + $21 = i64toi32_i32$5 << i64toi32_i32$2 | 0; + } + $15$hi = i64toi32_i32$1; + i64toi32_i32$1 = var$0$hi; + i64toi32_i32$1 = $15$hi; + i64toi32_i32$0 = $21; + i64toi32_i32$5 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$5 = i64toi32_i32$1 & i64toi32_i32$5 | 0; + $17$hi = i64toi32_i32$5; + i64toi32_i32$5 = var$1$hi; + i64toi32_i32$5 = $17$hi; + i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$3 | 0; + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$3 = var$1; + i64toi32_i32$2 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$0 = 0; + $22 = i64toi32_i32$5 >>> i64toi32_i32$2 | 0; + } else { + i64toi32_i32$0 = i64toi32_i32$5 >>> i64toi32_i32$2 | 0; + $22 = (((1 << i64toi32_i32$2 | 0) - 1 | 0) & i64toi32_i32$5 | 0) << (32 - i64toi32_i32$2 | 0) | 0 | (i64toi32_i32$1 >>> i64toi32_i32$2 | 0) | 0; + } + $19$hi = i64toi32_i32$0; + i64toi32_i32$0 = $10$hi; + i64toi32_i32$5 = $10; + i64toi32_i32$1 = $19$hi; + i64toi32_i32$3 = $22; + i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$5 = i64toi32_i32$5 | i64toi32_i32$3 | 0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$5 | 0; + } + + function __wasm_rotr_i64(var$0, var$0$hi, var$1, var$1$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var$1 = var$1 | 0; + var$1$hi = var$1$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, var$2$hi = 0, var$2 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $6$hi = 0, $8$hi = 0, $10 = 0, $10$hi = 0, $15$hi = 0, $17$hi = 0, $19$hi = 0; + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$1; + i64toi32_i32$1 = 0; + i64toi32_i32$3 = 63; + i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$1 | 0; + i64toi32_i32$1 = i64toi32_i32$1; + var$2 = i64toi32_i32$2 & i64toi32_i32$3 | 0; + var$2$hi = i64toi32_i32$1; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$1 = 4294967295; + i64toi32_i32$0 = 4294967295; + i64toi32_i32$2 = var$2$hi; + i64toi32_i32$3 = var$2; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$2 = i64toi32_i32$0 << i64toi32_i32$4 | 0; + $19 = 0; + } else { + i64toi32_i32$2 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$0 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$1 << i64toi32_i32$4 | 0) | 0; + $19 = i64toi32_i32$0 << i64toi32_i32$4 | 0; + } + $6$hi = i64toi32_i32$2; + i64toi32_i32$2 = var$0$hi; + i64toi32_i32$2 = $6$hi; + i64toi32_i32$1 = $19; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$0 = i64toi32_i32$2 & i64toi32_i32$0 | 0; + $8$hi = i64toi32_i32$0; + i64toi32_i32$0 = var$2$hi; + i64toi32_i32$0 = $8$hi; + i64toi32_i32$2 = i64toi32_i32$1 & i64toi32_i32$3 | 0; + i64toi32_i32$1 = var$2$hi; + i64toi32_i32$3 = var$2; + i64toi32_i32$4 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = 0; + $20 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$4 | 0; + $20 = (((1 << i64toi32_i32$4 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$4 | 0) | 0 | (i64toi32_i32$2 >>> i64toi32_i32$4 | 0) | 0; + } + $10 = $20; + $10$hi = i64toi32_i32$1; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$1 = 0; + i64toi32_i32$0 = 0; + i64toi32_i32$2 = var$1$hi; + i64toi32_i32$3 = var$1; + i64toi32_i32$4 = i64toi32_i32$0 - i64toi32_i32$3 | 0; + i64toi32_i32$5 = (i64toi32_i32$0 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$2 | 0; + i64toi32_i32$5 = i64toi32_i32$1 - i64toi32_i32$5 | 0; + i64toi32_i32$5 = i64toi32_i32$5; + i64toi32_i32$1 = i64toi32_i32$4; + i64toi32_i32$0 = 0; + i64toi32_i32$3 = 63; + i64toi32_i32$0 = i64toi32_i32$5 & i64toi32_i32$0 | 0; + i64toi32_i32$0 = i64toi32_i32$0; + var$1 = i64toi32_i32$1 & i64toi32_i32$3 | 0; + var$1$hi = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = 4294967295; + i64toi32_i32$5 = 4294967295; + i64toi32_i32$1 = var$1$hi; + i64toi32_i32$3 = var$1; + i64toi32_i32$2 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$1 = 0; + $21 = i64toi32_i32$0 >>> i64toi32_i32$2 | 0; + } else { + i64toi32_i32$1 = i64toi32_i32$0 >>> i64toi32_i32$2 | 0; + $21 = (((1 << i64toi32_i32$2 | 0) - 1 | 0) & i64toi32_i32$0 | 0) << (32 - i64toi32_i32$2 | 0) | 0 | (i64toi32_i32$5 >>> i64toi32_i32$2 | 0) | 0; + } + $15$hi = i64toi32_i32$1; + i64toi32_i32$1 = var$0$hi; + i64toi32_i32$1 = $15$hi; + i64toi32_i32$0 = $21; + i64toi32_i32$5 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$5 = i64toi32_i32$1 & i64toi32_i32$5 | 0; + $17$hi = i64toi32_i32$5; + i64toi32_i32$5 = var$1$hi; + i64toi32_i32$5 = $17$hi; + i64toi32_i32$1 = i64toi32_i32$0 & i64toi32_i32$3 | 0; + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$3 = var$1; + i64toi32_i32$2 = i64toi32_i32$3 & 31 | 0; + if (32 >>> 0 <= (i64toi32_i32$3 & 63 | 0) >>> 0) { + i64toi32_i32$0 = i64toi32_i32$1 << i64toi32_i32$2 | 0; + $22 = 0; + } else { + i64toi32_i32$0 = ((1 << i64toi32_i32$2 | 0) - 1 | 0) & (i64toi32_i32$1 >>> (32 - i64toi32_i32$2 | 0) | 0) | 0 | (i64toi32_i32$5 << i64toi32_i32$2 | 0) | 0; + $22 = i64toi32_i32$1 << i64toi32_i32$2 | 0; + } + $19$hi = i64toi32_i32$0; + i64toi32_i32$0 = $10$hi; + i64toi32_i32$5 = $10; + i64toi32_i32$1 = $19$hi; + i64toi32_i32$3 = $22; + i64toi32_i32$1 = i64toi32_i32$0 | i64toi32_i32$1 | 0; + i64toi32_i32$1 = i64toi32_i32$1; + i64toi32_i32$5 = i64toi32_i32$5 | i64toi32_i32$3 | 0; + i64toi32_i32$HIGH_BITS = i64toi32_i32$1; + return i64toi32_i32$5 | 0; + } + + function __wasm_ctz_i32(var$0) { + var$0 = var$0 | 0; + if (var$0) return 31 - Math_clz32((var$0 + 4294967295 | 0) ^ var$0 | 0) | 0 | 0; + return 32 | 0; + } + + return { + add: $0, + sub: $1, + mul: $2, + div_s: $3, + div_u: $4, + rem_s: $5, + rem_u: $6, + and: $7, + or: $8, + xor: $9, + shl: $10, + shr_s: $11, + shr_u: $12, + rotl: $13, + rotr: $14, + clz: $15, + ctz: $16, + popcnt: $17, + eqz: $18, + eq: $19, + ne: $20, + lt_s: $21, + lt_u: $22, + le_s: $23, + le_u: $24, + gt_s: $25, + gt_u: $26, + ge_s: $27, + ge_u: $28 + }; +} + diff --git a/test/wasm2asm/unary-ops.2asm.js b/test/wasm2asm/unary-ops.2asm.js index ebc4d11e4..a0ec853d1 100644 --- a/test/wasm2asm/unary-ops.2asm.js +++ b/test/wasm2asm/unary-ops.2asm.js @@ -32,17 +32,17 @@ function asmFunc(global, env, buffer) { $0$hi = $0$hi | 0; r = r | 0; r$hi = r$hi | 0; - var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, $3$hi = 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $3$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = i64toi32_i32$0; - i64toi32_i32$1 = $0; - i64toi32_i32$2 = 0; - $3$hi = i64toi32_i32$2; - i64toi32_i32$2 = r$hi; - i64toi32_i32$2 = $3$hi; - i64toi32_i32$1 = (__wasm_popcnt_i32(i64toi32_i32$0) | 0) + (__wasm_popcnt_i32(i64toi32_i32$1) | 0) | 0; + i64toi32_i32$0 = __wasm_popcnt_i64($0 | 0, i64toi32_i32$0 | 0) | 0; + i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; + $3$hi = i64toi32_i32$1; + i64toi32_i32$1 = r$hi; + i64toi32_i32$1 = $3$hi; + i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = r$hi; - return (i64toi32_i32$1 | 0) == (r | 0) & (i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) | 0 | 0; + return (i64toi32_i32$2 | 0) == (r | 0) & (i64toi32_i32$1 | 0) == (i64toi32_i32$0 | 0) | 0 | 0; } function $3($0, r, r$hi) { @@ -116,46 +116,145 @@ function asmFunc(global, env, buffer) { $0$hi = $0$hi | 0; r = r | 0; r$hi = r$hi | 0; - var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$1 = 0, $9 = 0, $3$hi = 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, $3$hi = 0, i64toi32_i32$2 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$0 = i64toi32_i32$0; - i64toi32_i32$1 = $0; - i64toi32_i32$3 = __wasm_ctz_i32(i64toi32_i32$1) | 0; - i64toi32_i32$2 = 0; - if ((i64toi32_i32$3 | 0) == (32 | 0)) $9 = (__wasm_ctz_i32(i64toi32_i32$0) | 0) + 32 | 0; else $9 = i64toi32_i32$3; - $3$hi = i64toi32_i32$2; - i64toi32_i32$2 = r$hi; - i64toi32_i32$2 = $3$hi; - i64toi32_i32$1 = $9; + i64toi32_i32$0 = __wasm_ctz_i64($0 | 0, i64toi32_i32$0 | 0) | 0; + i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; + $3$hi = i64toi32_i32$1; + i64toi32_i32$1 = r$hi; + i64toi32_i32$1 = $3$hi; + i64toi32_i32$2 = i64toi32_i32$0; i64toi32_i32$0 = r$hi; - i64toi32_i32$3 = r; - return (i64toi32_i32$1 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$2 | 0) == (i64toi32_i32$0 | 0) | 0 | 0; + return (i64toi32_i32$2 | 0) == (r | 0) & (i64toi32_i32$1 | 0) == (i64toi32_i32$0 | 0) | 0 | 0; } - function __wasm_ctz_i32(x) { - x = x | 0; - var $9 = 0; - if ((x | 0) == (0 | 0)) $9 = 32; else $9 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0; - return $9 | 0; + function __wasm_ctz_i32(var$0) { + var$0 = var$0 | 0; + if (var$0) return 31 - Math_clz32((var$0 + 4294967295 | 0) ^ var$0 | 0) | 0 | 0; + return 32 | 0; } - function __wasm_popcnt_i32(x) { - x = x | 0; - var count = 0, $5 = 0; - count = 0; - b : { - l : do { - $5 = count; - if ((x | 0) == (0 | 0)) break b; - x = x & (x - 1 | 0) | 0; - count = count + 1 | 0; - continue l; - break l; + function __wasm_ctz_i64(var$0, var$0$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$5 = 0, i64toi32_i32$3 = 0, i64toi32_i32$4 = 0, i64toi32_i32$2 = 0, i64toi32_i32$1 = 0, $10 = 0, $5$hi = 0, $8$hi = 0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + if (((var$0 | i64toi32_i32$0 | 0 | 0) == (0 | 0) | 0) == (0 | 0)) { + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$0; + i64toi32_i32$1 = 4294967295; + i64toi32_i32$3 = 4294967295; + i64toi32_i32$4 = i64toi32_i32$2 + i64toi32_i32$3 | 0; + i64toi32_i32$5 = i64toi32_i32$0 + i64toi32_i32$1 | 0; + if (i64toi32_i32$4 >>> 0 < i64toi32_i32$3 >>> 0) i64toi32_i32$5 = i64toi32_i32$5 + 1 | 0; + $5$hi = i64toi32_i32$5; + i64toi32_i32$5 = var$0$hi; + i64toi32_i32$5 = $5$hi; + i64toi32_i32$0 = i64toi32_i32$4; + i64toi32_i32$2 = var$0$hi; + i64toi32_i32$3 = var$0; + i64toi32_i32$2 = i64toi32_i32$5 ^ i64toi32_i32$2 | 0; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$0 = i64toi32_i32$0 ^ i64toi32_i32$3 | 0; + i64toi32_i32$3 = Math_clz32(i64toi32_i32$2); + i64toi32_i32$5 = 0; + if ((i64toi32_i32$3 | 0) == (32 | 0)) $10 = Math_clz32(i64toi32_i32$0) + 32 | 0; else $10 = i64toi32_i32$3; + $8$hi = i64toi32_i32$5; + i64toi32_i32$5 = 0; + i64toi32_i32$0 = 63; + i64toi32_i32$2 = $8$hi; + i64toi32_i32$3 = $10; + i64toi32_i32$1 = i64toi32_i32$0 - i64toi32_i32$3 | 0; + i64toi32_i32$4 = (i64toi32_i32$0 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$2 | 0; + i64toi32_i32$4 = i64toi32_i32$5 - i64toi32_i32$4 | 0; + i64toi32_i32$4 = i64toi32_i32$4; + i64toi32_i32$0 = i64toi32_i32$1; + i64toi32_i32$HIGH_BITS = i64toi32_i32$4; + return i64toi32_i32$0 | 0; + } + i64toi32_i32$0 = 0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$4 = 64; + i64toi32_i32$HIGH_BITS = i64toi32_i32$0; + return i64toi32_i32$4 | 0; + } + + function __wasm_popcnt_i32(var$0) { + var$0 = var$0 | 0; + var var$1 = 0, $5 = 0; + label$1 : { + label$2 : do { + $5 = var$1; + if ((var$0 | 0) == (0 | 0)) break label$1; + var$0 = var$0 & (var$0 - 1 | 0) | 0; + var$1 = var$1 + 1 | 0; + continue label$2; + break label$2; } while (1); }; return $5 | 0; } + function __wasm_popcnt_i64(var$0, var$0$hi) { + var$0 = var$0 | 0; + var$0$hi = var$0$hi | 0; + var i64toi32_i32$0 = 0, i64toi32_i32$2 = 0, i64toi32_i32$4 = 0, i64toi32_i32$5 = 0, i64toi32_i32$3 = 0, i64toi32_i32$1 = 0, var$1$hi = 0, var$1 = 0, $5 = 0, $5$hi = 0, $4 = 0, $9$hi = 0; + label$1 : { + label$2 : do { + i64toi32_i32$0 = var$1$hi; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + $4 = (var$0 | i64toi32_i32$0 | 0 | 0) == (0 | 0); + i64toi32_i32$0 = var$1$hi; + $5 = var$1; + $5$hi = i64toi32_i32$0; + if ($4) break label$1; + i64toi32_i32$0 = $5$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = var$0$hi; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$2 = var$0; + i64toi32_i32$1 = 0; + i64toi32_i32$3 = 1; + i64toi32_i32$4 = i64toi32_i32$2 - i64toi32_i32$3 | 0; + i64toi32_i32$5 = (i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0) + i64toi32_i32$1 | 0; + i64toi32_i32$5 = i64toi32_i32$0 - i64toi32_i32$5 | 0; + $9$hi = i64toi32_i32$5; + i64toi32_i32$5 = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$2; + i64toi32_i32$2 = $9$hi; + i64toi32_i32$3 = i64toi32_i32$4; + i64toi32_i32$2 = i64toi32_i32$5 & i64toi32_i32$2 | 0; + i64toi32_i32$2 = i64toi32_i32$2; + var$0 = i64toi32_i32$0 & i64toi32_i32$4 | 0; + var$0$hi = i64toi32_i32$2; + i64toi32_i32$2 = var$1$hi; + i64toi32_i32$2 = i64toi32_i32$2; + i64toi32_i32$5 = var$1; + i64toi32_i32$0 = 0; + i64toi32_i32$3 = 1; + i64toi32_i32$1 = i64toi32_i32$5 + i64toi32_i32$3 | 0; + i64toi32_i32$4 = i64toi32_i32$2 + i64toi32_i32$0 | 0; + if (i64toi32_i32$1 >>> 0 < i64toi32_i32$3 >>> 0) i64toi32_i32$4 = i64toi32_i32$4 + 1 | 0; + i64toi32_i32$4 = i64toi32_i32$4; + var$1 = i64toi32_i32$1; + var$1$hi = i64toi32_i32$4; + continue label$2; + break label$2; + } while (1); + }; + i64toi32_i32$4 = $5$hi; + i64toi32_i32$4 = i64toi32_i32$4; + i64toi32_i32$5 = $5; + i64toi32_i32$HIGH_BITS = i64toi32_i32$4; + return i64toi32_i32$5 | 0; + } + return { i32_popcnt: $1, check_popcnt_i64: $2, |