mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-06-18 09:21:35 +00:00
use more useful defaults for -O, fix an utoa issue
This commit is contained in:
@ -107,28 +107,19 @@ const FRC_POWERS: u64[] = [
|
||||
// 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 {
|
||||
if (ASC_SHRINK_LEVEL >= 1) {
|
||||
let l: u32 = 32 - clz<u32>(value); // log2
|
||||
let t = l * 1233 >>> 12; // log10
|
||||
|
||||
let power = unchecked(POWERS10[t]);
|
||||
t -= u32(value < power);
|
||||
return t + 1;
|
||||
} else {
|
||||
if (value < 100000) {
|
||||
if (value < 100) {
|
||||
return select<u32>(1, 2, value < 10);
|
||||
} else {
|
||||
let m = select<u32>(4, 5, value < 10000);
|
||||
return select<u32>(3, m, value < 1000);
|
||||
}
|
||||
if (value < 100000) {
|
||||
if (value < 100) {
|
||||
return select<u32>(1, 2, value < 10);
|
||||
} else {
|
||||
if (value < 10000000) {
|
||||
return select<u32>(6, 7, value < 1000000);
|
||||
} else {
|
||||
let m = select<u32>(9, 10, value < 1000000000);
|
||||
return select<u32>(8, m, value < 100000000);
|
||||
}
|
||||
let m = select<u32>(4, 5, value < 10000);
|
||||
return select<u32>(3, m, value < 1000);
|
||||
}
|
||||
} else {
|
||||
if (value < 10000000) {
|
||||
return select<u32>(6, 7, value < 1000000);
|
||||
} else {
|
||||
let m = select<u32>(9, 10, value < 1000000000);
|
||||
return select<u32>(8, m, value < 100000000);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -136,28 +127,19 @@ export function decimalCount32(value: u32): u32 {
|
||||
// Count number of decimals for u64 values
|
||||
// In our case input value always greater than 2^32-1 so we can skip some parts
|
||||
export function decimalCount64(value: u64): u32 {
|
||||
if (ASC_SHRINK_LEVEL >= 1) {
|
||||
let l: u32 = 64 - <u32>clz<u64>(value); // log2
|
||||
let t = l * 1233 >>> 12; // log10
|
||||
|
||||
let power = unchecked(<u64>POWERS10[t]);
|
||||
t -= u32(value < 10000000000 * power);
|
||||
return t + 1;
|
||||
} else {
|
||||
if (value < 1000000000000000) {
|
||||
if (value < 1000000000000) {
|
||||
return select<u32>(11, 12, value < 100000000000);
|
||||
} else {
|
||||
let m = select<u32>(14, 15, value < 100000000000000);
|
||||
return select<u32>(13, m, value < 10000000000000);
|
||||
}
|
||||
if (value < 1000000000000000) {
|
||||
if (value < 1000000000000) {
|
||||
return select<u32>(11, 12, value < 100000000000);
|
||||
} else {
|
||||
if (value < 100000000000000000) {
|
||||
return select<u32>(16, 17, value < 10000000000000000);
|
||||
} else {
|
||||
let m = select<u32>(19, 20, value < 10000000000000000000);
|
||||
return select<u32>(18, m, value < 1000000000000000000);
|
||||
}
|
||||
let m = select<u32>(14, 15, value < 100000000000000);
|
||||
return select<u32>(13, m, value < 10000000000000);
|
||||
}
|
||||
} else {
|
||||
if (value < 100000000000000000) {
|
||||
return select<u32>(16, 17, value < 10000000000000000);
|
||||
} else {
|
||||
let m = select<u32>(19, 20, value < 10000000000000000000);
|
||||
return select<u32>(18, m, value < 1000000000000000000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user