diff --git a/std/assembly/util/number.ts b/std/assembly/util/number.ts index 99d624de02..e3d85bb5c2 100644 --- a/std/assembly/util/number.ts +++ b/std/assembly/util/number.ts @@ -122,6 +122,12 @@ f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"; 0x9E19DB92B4E31BA9, 0xEB96BF6EBADF77D9, 0xAF87023B9BF0EE6B ]); +// @ts-ignore: decorator +@inline +export function isPowerOf2(value: T): bool { + return popcnt(value) == 1; +} + // Count number of decimals for u32 values // In our case input value always non-zero so we can simplify some parts export function decimalCount32(value: u32): u32 { @@ -159,7 +165,7 @@ export function decimalCount64High(value: u64): u32 { } function ulog_base(num: u64, base: i32): u32 { - if ((base & (base - 1)) == 0) { // if base is pow of two + if (isPowerOf2(base)) { return (63 - clz(num)) / (31 - clz(base)) + 1; } var b64 = u64(base), b = b64, e: u32 = 1; diff --git a/tests/compiler/number.untouched.wat b/tests/compiler/number.untouched.wat index 72f1cf224d..65f30e910c 100644 --- a/tests/compiler/number.untouched.wat +++ b/tests/compiler/number.untouched.wat @@ -418,16 +418,15 @@ end ) (func $~lib/util/number/ulog_base (param $0 i64) (param $1 i32) (result i32) - (local $2 i64) + (local $2 i32) (local $3 i64) - (local $4 i32) + (local $4 i64) (local $5 i32) local.get $1 - local.get $1 + local.set $2 + local.get $2 + i32.popcnt i32.const 1 - i32.sub - i32.and - i32.const 0 i32.eq if i32.const 63 @@ -446,30 +445,30 @@ end local.get $1 i64.extend_i32_s - local.set $2 - local.get $2 local.set $3 - i32.const 1 + local.get $3 local.set $4 + i32.const 1 + local.set $5 loop $while-continue|0 local.get $0 - local.get $3 + local.get $4 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $3 + local.get $4 i64.div_u local.set $0 - local.get $3 - local.get $3 - i64.mul - local.set $3 local.get $4 + local.get $4 + i64.mul + local.set $4 + local.get $5 i32.const 1 i32.shl - local.set $4 + local.set $5 br $while-continue|0 end end @@ -477,21 +476,21 @@ local.get $0 i64.const 1 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $2 + local.get $3 i64.div_u local.set $0 - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $while-continue|1 end end - local.get $4 + local.get $5 i32.const 1 i32.sub ) @@ -613,7 +612,7 @@ if i32.const 32 i32.const 160 - i32.const 367 + i32.const 373 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/resolve-access.untouched.wat b/tests/compiler/resolve-access.untouched.wat index 1bbcca6d7c..5380fd4154 100644 --- a/tests/compiler/resolve-access.untouched.wat +++ b/tests/compiler/resolve-access.untouched.wat @@ -1909,16 +1909,15 @@ end ) (func $~lib/util/number/ulog_base (param $0 i64) (param $1 i32) (result i32) - (local $2 i64) + (local $2 i32) (local $3 i64) - (local $4 i32) + (local $4 i64) (local $5 i32) local.get $1 - local.get $1 + local.set $2 + local.get $2 + i32.popcnt i32.const 1 - i32.sub - i32.and - i32.const 0 i32.eq if i32.const 63 @@ -1937,30 +1936,30 @@ end local.get $1 i64.extend_i32_s - local.set $2 - local.get $2 local.set $3 - i32.const 1 + local.get $3 local.set $4 + i32.const 1 + local.set $5 loop $while-continue|0 local.get $0 - local.get $3 + local.get $4 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $3 + local.get $4 i64.div_u local.set $0 - local.get $3 - local.get $3 - i64.mul - local.set $3 local.get $4 + local.get $4 + i64.mul + local.set $4 + local.get $5 i32.const 1 i32.shl - local.set $4 + local.set $5 br $while-continue|0 end end @@ -1968,21 +1967,21 @@ local.get $0 i64.const 1 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $2 + local.get $3 i64.div_u local.set $0 - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $while-continue|1 end end - local.get $4 + local.get $5 i32.const 1 i32.sub ) @@ -2102,7 +2101,7 @@ if i32.const 176 i32.const 304 - i32.const 395 + i32.const 401 i32.const 5 call $~lib/builtins/abort unreachable @@ -2318,7 +2317,7 @@ if i32.const 176 i32.const 304 - i32.const 344 + i32.const 350 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/resolve-binary.untouched.wat b/tests/compiler/resolve-binary.untouched.wat index aab348e14b..60a3172749 100644 --- a/tests/compiler/resolve-binary.untouched.wat +++ b/tests/compiler/resolve-binary.untouched.wat @@ -651,16 +651,15 @@ end ) (func $~lib/util/number/ulog_base (param $0 i64) (param $1 i32) (result i32) - (local $2 i64) + (local $2 i32) (local $3 i64) - (local $4 i32) + (local $4 i64) (local $5 i32) local.get $1 - local.get $1 + local.set $2 + local.get $2 + i32.popcnt i32.const 1 - i32.sub - i32.and - i32.const 0 i32.eq if i32.const 63 @@ -679,30 +678,30 @@ end local.get $1 i64.extend_i32_s - local.set $2 - local.get $2 local.set $3 - i32.const 1 + local.get $3 local.set $4 + i32.const 1 + local.set $5 loop $while-continue|0 local.get $0 - local.get $3 + local.get $4 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $3 + local.get $4 i64.div_u local.set $0 - local.get $3 - local.get $3 - i64.mul - local.set $3 local.get $4 + local.get $4 + i64.mul + local.set $4 + local.get $5 i32.const 1 i32.shl - local.set $4 + local.set $5 br $while-continue|0 end end @@ -710,21 +709,21 @@ local.get $0 i64.const 1 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $2 + local.get $3 i64.div_u local.set $0 - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $while-continue|1 end end - local.get $4 + local.get $5 i32.const 1 i32.sub ) @@ -843,7 +842,7 @@ if i32.const 192 i32.const 320 - i32.const 367 + i32.const 373 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/resolve-elementaccess.untouched.wat b/tests/compiler/resolve-elementaccess.untouched.wat index 7ff88b8e09..3faf9ef489 100644 --- a/tests/compiler/resolve-elementaccess.untouched.wat +++ b/tests/compiler/resolve-elementaccess.untouched.wat @@ -3780,16 +3780,15 @@ end ) (func $~lib/util/number/ulog_base (param $0 i64) (param $1 i32) (result i32) - (local $2 i64) + (local $2 i32) (local $3 i64) - (local $4 i32) + (local $4 i64) (local $5 i32) local.get $1 - local.get $1 + local.set $2 + local.get $2 + i32.popcnt i32.const 1 - i32.sub - i32.and - i32.const 0 i32.eq if i32.const 63 @@ -3808,30 +3807,30 @@ end local.get $1 i64.extend_i32_s - local.set $2 - local.get $2 local.set $3 - i32.const 1 + local.get $3 local.set $4 + i32.const 1 + local.set $5 loop $while-continue|0 local.get $0 - local.get $3 + local.get $4 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $3 + local.get $4 i64.div_u local.set $0 - local.get $3 - local.get $3 - i64.mul - local.set $3 local.get $4 + local.get $4 + i64.mul + local.set $4 + local.get $5 i32.const 1 i32.shl - local.set $4 + local.set $5 br $while-continue|0 end end @@ -3839,21 +3838,21 @@ local.get $0 i64.const 1 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $2 + local.get $3 i64.div_u local.set $0 - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $while-continue|1 end end - local.get $4 + local.get $5 i32.const 1 i32.sub ) @@ -3971,7 +3970,7 @@ if i32.const 1952 i32.const 2080 - i32.const 344 + i32.const 350 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/resolve-function-expression.untouched.wat b/tests/compiler/resolve-function-expression.untouched.wat index b6ccdcc3e0..f8b5441bbc 100644 --- a/tests/compiler/resolve-function-expression.untouched.wat +++ b/tests/compiler/resolve-function-expression.untouched.wat @@ -398,16 +398,15 @@ end ) (func $~lib/util/number/ulog_base (param $0 i64) (param $1 i32) (result i32) - (local $2 i64) + (local $2 i32) (local $3 i64) - (local $4 i32) + (local $4 i64) (local $5 i32) local.get $1 - local.get $1 + local.set $2 + local.get $2 + i32.popcnt i32.const 1 - i32.sub - i32.and - i32.const 0 i32.eq if i32.const 63 @@ -426,30 +425,30 @@ end local.get $1 i64.extend_i32_s - local.set $2 - local.get $2 local.set $3 - i32.const 1 + local.get $3 local.set $4 + i32.const 1 + local.set $5 loop $while-continue|0 local.get $0 - local.get $3 + local.get $4 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $3 + local.get $4 i64.div_u local.set $0 - local.get $3 - local.get $3 - i64.mul - local.set $3 local.get $4 + local.get $4 + i64.mul + local.set $4 + local.get $5 i32.const 1 i32.shl - local.set $4 + local.set $5 br $while-continue|0 end end @@ -457,21 +456,21 @@ local.get $0 i64.const 1 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $2 + local.get $3 i64.div_u local.set $0 - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $while-continue|1 end end - local.get $4 + local.get $5 i32.const 1 i32.sub ) @@ -593,7 +592,7 @@ if i32.const 112 i32.const 240 - i32.const 367 + i32.const 373 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/resolve-propertyaccess.untouched.wat b/tests/compiler/resolve-propertyaccess.untouched.wat index 6961004ca8..857ac723a0 100644 --- a/tests/compiler/resolve-propertyaccess.untouched.wat +++ b/tests/compiler/resolve-propertyaccess.untouched.wat @@ -402,16 +402,15 @@ end ) (func $~lib/util/number/ulog_base (param $0 i64) (param $1 i32) (result i32) - (local $2 i64) + (local $2 i32) (local $3 i64) - (local $4 i32) + (local $4 i64) (local $5 i32) local.get $1 - local.get $1 + local.set $2 + local.get $2 + i32.popcnt i32.const 1 - i32.sub - i32.and - i32.const 0 i32.eq if i32.const 63 @@ -430,30 +429,30 @@ end local.get $1 i64.extend_i32_s - local.set $2 - local.get $2 local.set $3 - i32.const 1 + local.get $3 local.set $4 + i32.const 1 + local.set $5 loop $while-continue|0 local.get $0 - local.get $3 + local.get $4 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $3 + local.get $4 i64.div_u local.set $0 - local.get $3 - local.get $3 - i64.mul - local.set $3 local.get $4 + local.get $4 + i64.mul + local.set $4 + local.get $5 i32.const 1 i32.shl - local.set $4 + local.set $5 br $while-continue|0 end end @@ -461,21 +460,21 @@ local.get $0 i64.const 1 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $2 + local.get $3 i64.div_u local.set $0 - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $while-continue|1 end end - local.get $4 + local.get $5 i32.const 1 i32.sub ) @@ -597,7 +596,7 @@ if i32.const 32 i32.const 160 - i32.const 367 + i32.const 373 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/resolve-ternary.untouched.wat b/tests/compiler/resolve-ternary.untouched.wat index b2feb10b03..8cd8c575d3 100644 --- a/tests/compiler/resolve-ternary.untouched.wat +++ b/tests/compiler/resolve-ternary.untouched.wat @@ -1811,16 +1811,15 @@ end ) (func $~lib/util/number/ulog_base (param $0 i64) (param $1 i32) (result i32) - (local $2 i64) + (local $2 i32) (local $3 i64) - (local $4 i32) + (local $4 i64) (local $5 i32) local.get $1 - local.get $1 + local.set $2 + local.get $2 + i32.popcnt i32.const 1 - i32.sub - i32.and - i32.const 0 i32.eq if i32.const 63 @@ -1839,30 +1838,30 @@ end local.get $1 i64.extend_i32_s - local.set $2 - local.get $2 local.set $3 - i32.const 1 + local.get $3 local.set $4 + i32.const 1 + local.set $5 loop $while-continue|0 local.get $0 - local.get $3 + local.get $4 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $3 + local.get $4 i64.div_u local.set $0 - local.get $3 - local.get $3 - i64.mul - local.set $3 local.get $4 + local.get $4 + i64.mul + local.set $4 + local.get $5 i32.const 1 i32.shl - local.set $4 + local.set $5 br $while-continue|0 end end @@ -1870,21 +1869,21 @@ local.get $0 i64.const 1 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $2 + local.get $3 i64.div_u local.set $0 - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $while-continue|1 end end - local.get $4 + local.get $5 i32.const 1 i32.sub ) @@ -2003,7 +2002,7 @@ if i32.const 192 i32.const 320 - i32.const 367 + i32.const 373 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/resolve-unary.untouched.wat b/tests/compiler/resolve-unary.untouched.wat index f4cae8cd46..43466944f9 100644 --- a/tests/compiler/resolve-unary.untouched.wat +++ b/tests/compiler/resolve-unary.untouched.wat @@ -398,16 +398,15 @@ end ) (func $~lib/util/number/ulog_base (param $0 i64) (param $1 i32) (result i32) - (local $2 i64) + (local $2 i32) (local $3 i64) - (local $4 i32) + (local $4 i64) (local $5 i32) local.get $1 - local.get $1 + local.set $2 + local.get $2 + i32.popcnt i32.const 1 - i32.sub - i32.and - i32.const 0 i32.eq if i32.const 63 @@ -426,30 +425,30 @@ end local.get $1 i64.extend_i32_s - local.set $2 - local.get $2 local.set $3 - i32.const 1 + local.get $3 local.set $4 + i32.const 1 + local.set $5 loop $while-continue|0 local.get $0 - local.get $3 + local.get $4 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $3 + local.get $4 i64.div_u local.set $0 - local.get $3 - local.get $3 - i64.mul - local.set $3 local.get $4 + local.get $4 + i64.mul + local.set $4 + local.get $5 i32.const 1 i32.shl - local.set $4 + local.set $5 br $while-continue|0 end end @@ -457,21 +456,21 @@ local.get $0 i64.const 1 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $2 + local.get $3 i64.div_u local.set $0 - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $while-continue|1 end end - local.get $4 + local.get $5 i32.const 1 i32.sub ) @@ -593,7 +592,7 @@ if i32.const 32 i32.const 160 - i32.const 367 + i32.const 373 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index 78b9155739..68fe3d86d1 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -12904,16 +12904,15 @@ end ) (func $~lib/util/number/ulog_base (param $0 i64) (param $1 i32) (result i32) - (local $2 i64) + (local $2 i32) (local $3 i64) - (local $4 i32) + (local $4 i64) (local $5 i32) local.get $1 - local.get $1 + local.set $2 + local.get $2 + i32.popcnt i32.const 1 - i32.sub - i32.and - i32.const 0 i32.eq if i32.const 63 @@ -12932,30 +12931,30 @@ end local.get $1 i64.extend_i32_s - local.set $2 - local.get $2 local.set $3 - i32.const 1 + local.get $3 local.set $4 + i32.const 1 + local.set $5 loop $while-continue|0 local.get $0 - local.get $3 + local.get $4 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $3 + local.get $4 i64.div_u local.set $0 - local.get $3 - local.get $3 - i64.mul - local.set $3 local.get $4 + local.get $4 + i64.mul + local.set $4 + local.get $5 i32.const 1 i32.shl - local.set $4 + local.set $5 br $while-continue|0 end end @@ -12963,21 +12962,21 @@ local.get $0 i64.const 1 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $2 + local.get $3 i64.div_u local.set $0 - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $while-continue|1 end end - local.get $4 + local.get $5 i32.const 1 i32.sub ) @@ -13096,7 +13095,7 @@ if i32.const 5408 i32.const 5536 - i32.const 367 + i32.const 373 i32.const 5 call $~lib/builtins/abort unreachable @@ -13503,7 +13502,7 @@ if i32.const 5408 i32.const 5536 - i32.const 344 + i32.const 350 i32.const 5 call $~lib/builtins/abort unreachable @@ -16919,7 +16918,7 @@ if i32.const 5408 i32.const 5536 - i32.const 395 + i32.const 401 i32.const 5 call $~lib/builtins/abort unreachable @@ -17349,7 +17348,7 @@ if i32.const 5408 i32.const 5536 - i32.const 425 + i32.const 431 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/string-casemapping.untouched.wat b/tests/compiler/std/string-casemapping.untouched.wat index 23f9f1172d..575348de6b 100644 --- a/tests/compiler/std/string-casemapping.untouched.wat +++ b/tests/compiler/std/string-casemapping.untouched.wat @@ -5076,16 +5076,15 @@ end ) (func $~lib/util/number/ulog_base (param $0 i64) (param $1 i32) (result i32) - (local $2 i64) + (local $2 i32) (local $3 i64) - (local $4 i32) + (local $4 i64) (local $5 i32) local.get $1 - local.get $1 + local.set $2 + local.get $2 + i32.popcnt i32.const 1 - i32.sub - i32.and - i32.const 0 i32.eq if i32.const 63 @@ -5104,30 +5103,30 @@ end local.get $1 i64.extend_i32_s - local.set $2 - local.get $2 local.set $3 - i32.const 1 + local.get $3 local.set $4 + i32.const 1 + local.set $5 loop $while-continue|0 local.get $0 - local.get $3 + local.get $4 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $3 + local.get $4 i64.div_u local.set $0 - local.get $3 - local.get $3 - i64.mul - local.set $3 local.get $4 + local.get $4 + i64.mul + local.set $4 + local.get $5 i32.const 1 i32.shl - local.set $4 + local.set $5 br $while-continue|0 end end @@ -5135,21 +5134,21 @@ local.get $0 i64.const 1 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $2 + local.get $3 i64.div_u local.set $0 - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $while-continue|1 end end - local.get $4 + local.get $5 i32.const 1 i32.sub ) @@ -5269,7 +5268,7 @@ if i32.const 17552 i32.const 17680 - i32.const 395 + i32.const 401 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index bd68a690ad..b234ec54c2 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -5895,11 +5895,9 @@ (local $2 i64) (local $3 i64) local.get $1 - local.get $1 + i32.popcnt i32.const 1 - i32.sub - i32.and - i32.eqz + i32.eq if i32.const 63 local.get $0 @@ -6057,7 +6055,7 @@ if i32.const 13552 i32.const 13680 - i32.const 367 + i32.const 373 i32.const 5 call $~lib/builtins/abort unreachable @@ -6162,7 +6160,7 @@ if i32.const 13552 i32.const 13680 - i32.const 344 + i32.const 350 i32.const 5 call $~lib/builtins/abort unreachable @@ -6355,7 +6353,7 @@ if i32.const 13552 i32.const 13680 - i32.const 395 + i32.const 401 i32.const 5 call $~lib/builtins/abort unreachable @@ -6457,7 +6455,7 @@ if i32.const 13552 i32.const 13680 - i32.const 425 + i32.const 431 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat index dd051f2a7c..1743981329 100644 --- a/tests/compiler/std/string.untouched.wat +++ b/tests/compiler/std/string.untouched.wat @@ -9081,16 +9081,15 @@ end ) (func $~lib/util/number/ulog_base (param $0 i64) (param $1 i32) (result i32) - (local $2 i64) + (local $2 i32) (local $3 i64) - (local $4 i32) + (local $4 i64) (local $5 i32) local.get $1 - local.get $1 + local.set $2 + local.get $2 + i32.popcnt i32.const 1 - i32.sub - i32.and - i32.const 0 i32.eq if i32.const 63 @@ -9109,30 +9108,30 @@ end local.get $1 i64.extend_i32_s - local.set $2 - local.get $2 local.set $3 - i32.const 1 + local.get $3 local.set $4 + i32.const 1 + local.set $5 loop $while-continue|0 local.get $0 - local.get $3 + local.get $4 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $3 + local.get $4 i64.div_u local.set $0 - local.get $3 - local.get $3 - i64.mul - local.set $3 local.get $4 + local.get $4 + i64.mul + local.set $4 + local.get $5 i32.const 1 i32.shl - local.set $4 + local.set $5 br $while-continue|0 end end @@ -9140,21 +9139,21 @@ local.get $0 i64.const 1 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $2 + local.get $3 i64.div_u local.set $0 - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $while-continue|1 end end - local.get $4 + local.get $5 i32.const 1 i32.sub ) @@ -9273,7 +9272,7 @@ if i32.const 12544 i32.const 12672 - i32.const 367 + i32.const 373 i32.const 5 call $~lib/builtins/abort unreachable @@ -9415,7 +9414,7 @@ if i32.const 12544 i32.const 12672 - i32.const 344 + i32.const 350 i32.const 5 call $~lib/builtins/abort unreachable @@ -9716,7 +9715,7 @@ if i32.const 12544 i32.const 12672 - i32.const 395 + i32.const 401 i32.const 5 call $~lib/builtins/abort unreachable @@ -9869,7 +9868,7 @@ if i32.const 12544 i32.const 12672 - i32.const 425 + i32.const 431 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/typedarray.untouched.wat b/tests/compiler/std/typedarray.untouched.wat index b15df481b0..ebfbe0e0a8 100644 --- a/tests/compiler/std/typedarray.untouched.wat +++ b/tests/compiler/std/typedarray.untouched.wat @@ -32073,16 +32073,15 @@ end ) (func $~lib/util/number/ulog_base (param $0 i64) (param $1 i32) (result i32) - (local $2 i64) + (local $2 i32) (local $3 i64) - (local $4 i32) + (local $4 i64) (local $5 i32) local.get $1 - local.get $1 + local.set $2 + local.get $2 + i32.popcnt i32.const 1 - i32.sub - i32.and - i32.const 0 i32.eq if i32.const 63 @@ -32101,30 +32100,30 @@ end local.get $1 i64.extend_i32_s - local.set $2 - local.get $2 local.set $3 - i32.const 1 + local.get $3 local.set $4 + i32.const 1 + local.set $5 loop $while-continue|0 local.get $0 - local.get $3 + local.get $4 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $3 + local.get $4 i64.div_u local.set $0 - local.get $3 - local.get $3 - i64.mul - local.set $3 local.get $4 + local.get $4 + i64.mul + local.set $4 + local.get $5 i32.const 1 i32.shl - local.set $4 + local.set $5 br $while-continue|0 end end @@ -32132,21 +32131,21 @@ local.get $0 i64.const 1 i64.ge_u - local.set $5 - local.get $5 + local.set $2 + local.get $2 if local.get $0 - local.get $2 + local.get $3 i64.div_u local.set $0 - local.get $4 + local.get $5 i32.const 1 i32.add - local.set $4 + local.set $5 br $while-continue|1 end end - local.get $4 + local.get $5 i32.const 1 i32.sub ) @@ -32265,7 +32264,7 @@ if i32.const 1936 i32.const 2064 - i32.const 367 + i32.const 373 i32.const 5 call $~lib/builtins/abort unreachable @@ -33071,7 +33070,7 @@ if i32.const 1936 i32.const 2064 - i32.const 344 + i32.const 350 i32.const 5 call $~lib/builtins/abort unreachable @@ -35079,7 +35078,7 @@ if i32.const 1936 i32.const 2064 - i32.const 425 + i32.const 431 i32.const 5 call $~lib/builtins/abort unreachable @@ -35620,7 +35619,7 @@ if i32.const 1936 i32.const 2064 - i32.const 395 + i32.const 401 i32.const 5 call $~lib/builtins/abort unreachable