diff --git a/std/assembly/util/number.ts b/std/assembly/util/number.ts index 986f7f1480..99d624de02 100644 --- a/std/assembly/util/number.ts +++ b/std/assembly/util/number.ts @@ -290,7 +290,7 @@ export function utoa32_dec_core(buffer: usize, num: u32, offset: usize): void { // @ts-ignore: decorator @inline -export function utoa32_hex_core(buffer: usize, num: u32, offset: usize): void { +function utoa32_hex_core(buffer: usize, num: u32, offset: usize): void { if (ASC_SHRINK_LEVEL >= 1) { utoa_hex_simple(buffer, num, offset); } else { @@ -300,7 +300,7 @@ export function utoa32_hex_core(buffer: usize, num: u32, offset: usize): void { // @ts-ignore: decorator @inline -export function utoa64_dec_core(buffer: usize, num: u64, offset: usize): void { +function utoa64_dec_core(buffer: usize, num: u64, offset: usize): void { if (ASC_SHRINK_LEVEL >= 1) { utoa_dec_simple(buffer, num, offset); } else { @@ -310,7 +310,7 @@ export function utoa64_dec_core(buffer: usize, num: u64, offset: usize): void { // @ts-ignore: decorator @inline -export function utoa64_hex_core(buffer: usize, num: u64, offset: usize): void { +function utoa64_hex_core(buffer: usize, num: u64, offset: usize): void { if (ASC_SHRINK_LEVEL >= 1) { utoa_hex_simple(buffer, num, offset); } else { @@ -318,7 +318,7 @@ export function utoa64_hex_core(buffer: usize, num: u64, offset: usize): void { } } -export function utoa64_any_core(buffer: usize, num: u64, offset: usize, radix: i32): void { +function utoa64_any_core(buffer: usize, num: u64, offset: usize, radix: i32): void { const lut = changetype(ANY_DIGITS); var base = u64(radix); if ((radix & (radix - 1)) == 0) { // for radix which pow of two @@ -710,7 +710,7 @@ function prettify(buffer: usize, length: i32, k: i32): i32 { } } -export function dtoa_core(buffer: usize, value: f64): i32 { +function dtoa_core(buffer: usize, value: f64): i32 { var sign = i32(value < 0); if (sign) { value = -value; @@ -736,8 +736,7 @@ export function dtoa(value: f64): String { return result; } -export function itoa_stream(buffer: usize, offset: usize, value: T): u32 { - buffer += offset << 1; +export function itoa_buffered(buffer: usize, value: T): u32 { var sign: u32 = 0; if (isSigned()) { sign = u32(value < 0); @@ -783,8 +782,7 @@ export function itoa_stream(buffer: usize, offset: usize, valu return decimals; } -export function dtoa_stream(buffer: usize, offset: usize, value: f64): u32 { - buffer += offset << 1; +export function dtoa_buffered(buffer: usize, value: f64): u32 { if (value == 0) { store(buffer, CharCode._0); store(buffer, CharCode.DOT, 2); diff --git a/std/assembly/util/string.ts b/std/assembly/util/string.ts index 98568cd714..a19d526f23 100644 --- a/std/assembly/util/string.ts +++ b/std/assembly/util/string.ts @@ -1,4 +1,4 @@ -import { itoa32, utoa32, itoa64, utoa64, dtoa, itoa_stream, dtoa_stream, MAX_DOUBLE_LENGTH } from "./number"; +import { itoa32, utoa32, itoa64, utoa64, dtoa, itoa_buffered, dtoa_buffered, MAX_DOUBLE_LENGTH } from "./number"; import { ipow32 } from "../math"; // All tables are stored as two staged lookup tables (static tries) @@ -889,7 +889,7 @@ export function joinIntegerArray(dataStart: usize, length: i32, separator: st for (let i = 0; i < lastIndex; ++i) { value = load(dataStart + (i << alignof())); // @ts-ignore: type - offset += itoa_stream(changetype(result), offset, value); + offset += itoa_buffered(changetype(result) + (offset << 1), value); if (sepLen) { memory.copy( changetype(result) + (offset << 1), @@ -901,7 +901,7 @@ export function joinIntegerArray(dataStart: usize, length: i32, separator: st } value = load(dataStart + (lastIndex << alignof())); // @ts-ignore: type - offset += itoa_stream(changetype(result), offset, value); + offset += itoa_buffered(changetype(result) + (offset << 1), value); if (estLen > offset) return result.substring(0, offset); return result; } @@ -924,10 +924,8 @@ export function joinFloatArray(dataStart: usize, length: i32, separator: stri var value: T; for (let i = 0; i < lastIndex; ++i) { value = load(dataStart + (i << alignof())); - offset += dtoa_stream(changetype(result), offset, - // @ts-ignore: type - value - ); + // @ts-ignore: type + offset += dtoa_buffered(changetype(result) + (offset << 1), value); if (sepLen) { memory.copy( changetype(result) + (offset << 1), @@ -938,10 +936,8 @@ export function joinFloatArray(dataStart: usize, length: i32, separator: stri } } value = load(dataStart + (lastIndex << alignof())); - offset += dtoa_stream(changetype(result), offset, - // @ts-ignore: type - value - ); + // @ts-ignore: type + offset += dtoa_buffered(changetype(result) + (offset << 1), value); if (estLen > offset) return result.substring(0, offset); return result; } diff --git a/std/assembly/wasi/index.ts b/std/assembly/wasi/index.ts index ac91ab370e..7bc8cfb6f3 100644 --- a/std/assembly/wasi/index.ts +++ b/std/assembly/wasi/index.ts @@ -8,7 +8,7 @@ import { import { MAX_DOUBLE_LENGTH, decimalCount32, - dtoa_stream + dtoa_buffered } from "util/number"; // @ts-ignore: decorator @@ -81,19 +81,19 @@ function trace( // eslint-disable-line @typescript-eslint/no-unused-vars fd_write(2, iovPtr, 1, lenPtr); if (n) { store(bufPtr++, 0x20); // space - changetype(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_stream(bufPtr, 0, a0), bufPtr); + changetype(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_buffered(bufPtr, a0), bufPtr); fd_write(2, iovPtr, 1, lenPtr); if (n > 1) { - changetype(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_stream(bufPtr, 0, a1), bufPtr); + changetype(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_buffered(bufPtr, a1), bufPtr); fd_write(2, iovPtr, 1, lenPtr); if (n > 2) { - changetype(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_stream(bufPtr, 0, a2), bufPtr); + changetype(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_buffered(bufPtr, a2), bufPtr); fd_write(2, iovPtr, 1, lenPtr); if (n > 3) { - changetype(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_stream(bufPtr, 0, a3), bufPtr); + changetype(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_buffered(bufPtr, a3), bufPtr); fd_write(2, iovPtr, 1, lenPtr); if (n > 4) { - changetype(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_stream(bufPtr, 0, a4), bufPtr); + changetype(iovPtr).buf_len = 1 + String.UTF8.encodeUnsafe(bufPtr, dtoa_buffered(bufPtr, a4), bufPtr); fd_write(2, iovPtr, 1, lenPtr); } } diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index d5bd65715a..9499664b74 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -9,13 +9,12 @@ (type $none_=>_i32 (func (result i32))) (type $none_=>_f64 (func (result f64))) (type $none_=>_none (func)) - (type $i32_i32_i64_=>_i32 (func (param i32 i32 i64) (result i32))) + (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) + (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $i64_=>_none (func (param i64))) - (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32))) (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) - (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $f32_f32_=>_i32 (func (param f32 f32) (result i32))) (type $f64_f64_=>_i32 (func (param f64 f64) (result i32))) @@ -6391,49 +6390,44 @@ local.get $2 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $0 + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 i32.const 0 i32.lt_s - local.tee $1 + local.tee $2 if local.get $0 i32.const 45 i32.store16 i32.const 0 - local.get $2 + local.get $1 i32.sub - local.set $2 + local.set $1 end - local.get $2 + local.get $1 i32.const 10 i32.lt_u if local.get $0 - local.get $1 + local.get $2 i32.const 1 i32.shl i32.add - local.get $2 + local.get $1 i32.const 48 i32.or i32.store16 - local.get $1 + local.get $2 i32.const 1 i32.add return end local.get $0 - local.get $2 - local.get $2 - call $~lib/util/number/decimalCount32 local.get $1 + local.get $1 + call $~lib/util/number/decimalCount32 + local.get $2 i32.add local.tee $0 call $~lib/util/number/utoa_dec_simple @@ -6493,13 +6487,16 @@ if local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $6 i32.const 2 i32.shl i32.add i32.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.set $3 @@ -6530,13 +6527,16 @@ local.get $7 local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.const 2 i32.shl i32.add i32.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.tee $0 @@ -6591,19 +6591,13 @@ local.get $2 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $0 + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 i32.const 10 i32.lt_u if local.get $0 - local.get $2 + local.get $1 i32.const 48 i32.or i32.store16 @@ -6611,8 +6605,8 @@ return end local.get $0 - local.get $2 - local.get $2 + local.get $1 + local.get $1 call $~lib/util/number/decimalCount32 local.tee $0 call $~lib/util/number/utoa_dec_simple @@ -6672,13 +6666,16 @@ if local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $6 i32.const 2 i32.shl i32.add i32.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.set $3 @@ -6709,13 +6706,16 @@ local.get $7 local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.const 2 i32.shl i32.add i32.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.tee $0 @@ -7674,14 +7674,9 @@ local.get $8 i32.add ) - (func $~lib/util/number/dtoa_stream (param $0 i32) (param $1 i32) (param $2 f64) (result i32) - local.get $0 + (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 f64.const 0 f64.eq if @@ -7697,14 +7692,14 @@ i32.const 3 return end - local.get $2 - local.get $2 + local.get $1 + local.get $1 f64.sub f64.const 0 f64.ne if - local.get $2 - local.get $2 + local.get $1 + local.get $1 f64.ne if local.get $0 @@ -7719,10 +7714,10 @@ i32.const 3 return else - local.get $2 + local.get $1 f64.const 0 f64.lt - local.tee $1 + local.tee $2 if local.get $0 i32.const 45 @@ -7738,7 +7733,7 @@ local.get $0 i64.const 34058970405077102 i64.store offset=8 - local.get $1 + local.get $2 i32.const 8 i32.add return @@ -7746,7 +7741,7 @@ unreachable end local.get $0 - local.get $2 + local.get $1 call $~lib/util/number/dtoa_core ) (func $~lib/util/string/joinFloatArray (param $0 i32) (param $1 i32) (result i32) @@ -7862,13 +7857,16 @@ if local.get $1 local.get $2 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $7 i32.const 3 i32.shl i32.add f64.load - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $2 i32.add local.set $2 @@ -7899,13 +7897,16 @@ local.get $8 local.get $1 local.get $2 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $5 i32.const 3 i32.shl i32.add f64.load - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $2 i32.add local.tee $0 @@ -8285,31 +8286,26 @@ i32.const 6304 call $~lib/rt/pure/__release ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $0 + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 i32.const 24 i32.shl i32.const 24 i32.shr_s i32.const 0 i32.lt_s - local.tee $1 + local.tee $2 if local.get $0 i32.const 45 i32.store16 i32.const 0 - local.get $2 + local.get $1 i32.sub - local.set $2 + local.set $1 end - local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -8318,11 +8314,11 @@ i32.lt_u if local.get $0 - local.get $1 + local.get $2 i32.const 1 i32.shl i32.add - local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -8330,19 +8326,19 @@ i32.const 48 i32.or i32.store16 - local.get $1 + local.get $2 i32.const 1 i32.add return end local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s local.tee $2 call $~lib/util/number/decimalCount32 - local.get $1 i32.add local.set $1 local.get $0 @@ -8406,11 +8402,14 @@ if local.get $1 local.get $2 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $6 i32.add i32.load8_s - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $2 i32.add local.set $2 @@ -8441,11 +8440,14 @@ local.get $7 local.get $1 local.get $2 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.add i32.load8_s - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $2 i32.add local.tee $0 @@ -8464,21 +8466,16 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $0 + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 i32.const 65535 i32.and i32.const 10 i32.lt_u if local.get $0 - local.get $2 + local.get $1 i32.const 65535 i32.and i32.const 48 @@ -8487,7 +8484,7 @@ i32.const 1 return end - local.get $2 + local.get $1 i32.const 65535 i32.and local.tee $2 @@ -8554,13 +8551,16 @@ if local.get $1 local.get $2 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $6 i32.const 1 i32.shl i32.add i32.load16_u - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $2 i32.add local.set $2 @@ -8591,13 +8591,16 @@ local.get $7 local.get $1 local.get $2 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.const 1 i32.shl i32.add i32.load16_u - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $2 i32.add local.tee $0 @@ -8692,48 +8695,43 @@ br_if $do-continue|0 end ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) (local $3 i32) local.get $1 - i32.const 1 - i32.shl - local.get $0 - i32.add - local.set $0 - local.get $2 i64.const 10 i64.lt_u if local.get $0 - local.get $2 + local.get $1 i64.const 48 i64.or i64.store16 i32.const 1 return end - local.get $2 + local.get $1 i64.const 4294967295 i64.le_u if - local.get $2 + local.get $1 i32.wrap_i64 local.tee $3 call $~lib/util/number/decimalCount32 - local.set $1 + local.set $2 local.get $0 local.get $3 - local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple else local.get $0 - local.get $2 - local.get $2 + local.get $1 + local.get $1 call $~lib/util/number/decimalCount64High - local.tee $1 + local.tee $2 call $~lib/util/number/utoa_dec_simple end - local.get $1 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -8829,13 +8827,16 @@ if local.get $1 local.get $2 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $7 i32.const 3 i32.shl i32.add i64.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $2 i32.add local.set $2 @@ -8866,13 +8867,16 @@ local.get $8 local.get $1 local.get $2 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.const 3 i32.shl i32.add i64.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $2 i32.add local.tee $0 @@ -8891,71 +8895,66 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) (local $3 i32) local.get $1 - i32.const 1 - i32.shl - local.get $0 - i32.add - local.set $1 - local.get $2 i64.const 0 i64.lt_s - local.tee $0 + local.tee $2 if - local.get $1 + local.get $0 i32.const 45 i32.store16 i64.const 0 - local.get $2 + local.get $1 i64.sub - local.set $2 + local.set $1 end - local.get $2 + local.get $1 i64.const 10 i64.lt_u if - local.get $0 + local.get $2 i32.const 1 i32.shl - local.get $1 + local.get $0 i32.add - local.get $2 + local.get $1 i64.const 48 i64.or i64.store16 - local.get $0 + local.get $2 i32.const 1 i32.add return end - local.get $2 + local.get $1 i64.const 4294967295 i64.le_u if local.get $2 + local.get $1 i32.wrap_i64 - local.tee $3 + local.tee $2 call $~lib/util/number/decimalCount32 - local.get $0 i32.add - local.set $0 - local.get $1 - local.get $3 + local.set $3 local.get $0 + local.get $2 + local.get $3 call $~lib/util/number/utoa_dec_simple else + local.get $0 + local.get $1 local.get $1 - local.get $2 - local.get $2 call $~lib/util/number/decimalCount64High - local.get $0 + local.get $2 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple end - local.get $0 + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -9074,13 +9073,16 @@ if local.get $1 local.get $2 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $7 i32.const 3 i32.shl i32.add i64.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $2 i32.add local.set $2 @@ -9111,13 +9113,16 @@ local.get $8 local.get $1 local.get $2 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $5 i32.const 3 i32.shl i32.add i64.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $2 i32.add local.tee $0 @@ -9313,21 +9318,16 @@ call $~lib/rt/pure/__release local.get $1 ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $0 + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 i32.const 255 i32.and i32.const 10 i32.lt_u if local.get $0 - local.get $2 + local.get $1 i32.const 255 i32.and i32.const 48 @@ -9336,7 +9336,7 @@ i32.const 1 return end - local.get $2 + local.get $1 i32.const 255 i32.and local.tee $2 @@ -9402,11 +9402,14 @@ if local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $6 i32.add i32.load8_u - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.set $3 @@ -9437,11 +9440,14 @@ local.get $7 local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.add i32.load8_u - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.tee $0 diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index 3b5bda504b..78b9155739 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -12,8 +12,9 @@ (type $i64_i32_=>_i32 (func (param i64 i32) (result i32))) (type $none_=>_f64 (func (result f64))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) - (type $i32_i32_i64_=>_i32 (func (param i32 i32 i64) (result i32))) + (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32))) + (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_i32_=>_f32 (func (param i32 i32 i32) (result f32))) @@ -23,9 +24,7 @@ (type $i64_=>_none (func (param i64))) (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) - (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32))) (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) - (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $f64_=>_i32 (func (param f64) (result i32))) (type $i64_=>_i64 (func (param i64) (result i64))) @@ -13220,32 +13219,26 @@ local.get $3 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 i32.const 0 - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 0 i32.lt_s - local.set $3 - local.get $3 + local.set $2 + local.get $2 if i32.const 0 - local.get $2 + local.get $1 i32.sub - local.set $2 + local.set $1 local.get $0 i32.const 45 i32.store16 @@ -13260,50 +13253,50 @@ i32.const 4 i32.le_u drop - local.get $2 + local.get $1 i32.const 10 i32.lt_u if local.get $0 - local.get $3 + local.get $2 i32.const 1 i32.shl i32.add - local.get $2 + local.get $1 i32.const 48 i32.or i32.store16 i32.const 1 - local.get $3 + local.get $2 i32.add return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 4 i32.const 4 i32.le_u drop - local.get $4 - local.get $2 + local.get $3 + local.get $1 call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 local.set $6 - local.get $4 + local.get $1 local.set $5 + local.get $3 + local.set $4 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 local.get $6 local.get $5 - call $~lib/util/number/utoa32_dec_lut local.get $4 + call $~lib/util/number/utoa32_dec_lut + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -13394,8 +13387,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -13432,8 +13428,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 @@ -13602,20 +13601,14 @@ local.get $2 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 i32.const 0 - local.set $3 + local.set $2 i32.const 0 drop i32.const 0 @@ -13624,44 +13617,44 @@ drop i32.const 0 drop - local.get $2 + local.get $1 i32.const 10 i32.lt_u if local.get $0 - local.get $2 + local.get $1 i32.const 48 i32.or i32.store16 i32.const 1 return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 4 i32.const 4 i32.le_u drop - local.get $4 - local.get $2 + local.get $3 + local.get $1 call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 local.set $6 - local.get $4 + local.get $1 local.set $5 + local.get $3 + local.set $4 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 local.get $6 local.get $5 - call $~lib/util/number/utoa32_dec_lut local.get $4 + call $~lib/util/number/utoa32_dec_lut + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -13752,8 +13745,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -13790,8 +13786,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 @@ -15155,15 +15154,9 @@ call $~lib/rt/tlsf/__free local.get $3 ) - (func $~lib/util/number/dtoa_stream (param $0 i32) (param $1 i32) (param $2 f64) (result i32) - (local $3 i32) - local.get $0 + (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 f64.const 0 f64.eq if @@ -15179,15 +15172,15 @@ i32.const 3 return end - local.get $2 - local.get $2 + local.get $1 + local.get $1 f64.sub f64.const 0 f64.eq i32.eqz if - local.get $2 - local.get $2 + local.get $1 + local.get $1 f64.ne if local.get $0 @@ -15202,11 +15195,11 @@ i32.const 3 return else - local.get $2 + local.get $1 f64.const 0 f64.lt - local.set $3 - local.get $3 + local.set $2 + local.get $2 if local.get $0 i32.const 45 @@ -15223,14 +15216,14 @@ i64.const 34058970405077102 i64.store offset=8 i32.const 8 - local.get $3 + local.get $2 i32.add return end unreachable end local.get $0 - local.get $2 + local.get $1 call $~lib/util/number/dtoa_core ) (func $~lib/util/string/joinFloatArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -15312,8 +15305,11 @@ local.get $9 local.get $8 local.get $9 + i32.const 1 + i32.shl + i32.add local.get $10 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered i32.add local.set $9 local.get $6 @@ -15350,8 +15346,11 @@ local.get $9 local.get $8 local.get $9 + i32.const 1 + i32.shl + i32.add local.get $10 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered i32.add local.set $9 local.get $7 @@ -16173,36 +16172,30 @@ i32.const 5296 call $~lib/array/Array#join ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 i32.const 0 - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s i32.const 0 i32.lt_s - local.set $3 - local.get $3 + local.set $2 + local.get $2 if i32.const 0 - local.get $2 + local.get $1 i32.sub - local.set $2 + local.set $1 local.get $0 i32.const 45 i32.store16 @@ -16217,7 +16210,7 @@ i32.const 4 i32.le_u drop - local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -16226,11 +16219,11 @@ i32.lt_u if local.get $0 - local.get $3 + local.get $2 i32.const 1 i32.shl i32.add - local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -16239,44 +16232,44 @@ i32.or i32.store16 i32.const 1 - local.get $3 + local.get $2 i32.add return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 1 i32.const 4 i32.le_u drop - local.get $4 - local.get $2 + local.get $3 + local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 + local.set $6 + local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s - local.set $6 - local.get $4 local.set $5 + local.get $3 + local.set $4 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 local.get $6 local.get $5 - call $~lib/util/number/utoa32_dec_lut local.get $4 + call $~lib/util/number/utoa32_dec_lut + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -16367,8 +16360,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -16405,8 +16401,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 @@ -16463,20 +16462,14 @@ i32.const 5296 call $~lib/array/Array#join ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 i32.const 0 - local.set $3 + local.set $2 i32.const 0 drop i32.const 0 @@ -16485,14 +16478,14 @@ drop i32.const 0 drop - local.get $2 + local.get $1 i32.const 65535 i32.and i32.const 10 i32.lt_u if local.get $0 - local.get $2 + local.get $1 i32.const 65535 i32.and i32.const 48 @@ -16501,36 +16494,36 @@ i32.const 1 return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 2 i32.const 4 i32.le_u drop - local.get $4 - local.get $2 + local.get $3 + local.get $1 i32.const 65535 i32.and call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 + local.set $6 + local.get $1 i32.const 65535 i32.and - local.set $6 - local.get $4 local.set $5 + local.get $3 + local.set $4 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 local.get $6 local.get $5 - call $~lib/util/number/utoa32_dec_lut local.get $4 + call $~lib/util/number/utoa32_dec_lut + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -16621,8 +16614,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -16659,8 +16655,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 @@ -17051,22 +17050,16 @@ local.get $2 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i64) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 + (local $8 i64) i32.const 0 - local.set $3 + local.set $2 i32.const 0 drop i32.const 0 @@ -17075,73 +17068,73 @@ drop i32.const 0 drop - local.get $2 + local.get $1 i64.const 10 i64.lt_u if local.get $0 - local.get $2 + local.get $1 i64.const 48 i64.or i64.store16 i32.const 1 return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 8 i32.const 4 i32.le_u drop - local.get $2 + local.get $1 global.get $~lib/builtins/u32.MAX_VALUE i64.extend_i32_u i64.le_u if - local.get $2 + local.get $1 i32.wrap_i64 - local.set $5 + local.set $4 + local.get $3 local.get $4 - local.get $5 call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $8 - local.get $5 local.set $7 local.get $4 local.set $6 + local.get $3 + local.set $5 i32.const 0 i32.const 1 i32.ge_s drop - local.get $8 local.get $7 local.get $6 + local.get $5 call $~lib/util/number/utoa32_dec_lut else - local.get $4 - local.get $2 + local.get $3 + local.get $1 call $~lib/util/number/decimalCount64High i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 - local.set $9 - local.get $4 local.set $6 + local.get $1 + local.set $8 + local.get $3 + local.set $5 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 - local.get $9 local.get $6 + local.get $8 + local.get $5 call $~lib/util/number/utoa64_dec_lut end - local.get $4 + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -17232,8 +17225,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -17270,8 +17266,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 @@ -17507,34 +17506,28 @@ local.get $3 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i64) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 + (local $8 i64) i32.const 0 - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i64.const 0 i64.lt_s - local.set $3 - local.get $3 + local.set $2 + local.get $2 if i64.const 0 - local.get $2 + local.get $1 i64.sub - local.set $2 + local.set $1 local.get $0 i32.const 45 i32.store16 @@ -17549,79 +17542,79 @@ i32.const 4 i32.le_u drop - local.get $2 + local.get $1 i64.const 10 i64.lt_u if local.get $0 - local.get $3 + local.get $2 i32.const 1 i32.shl i32.add - local.get $2 + local.get $1 i64.const 48 i64.or i64.store16 i32.const 1 - local.get $3 + local.get $2 i32.add return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 8 i32.const 4 i32.le_u drop - local.get $2 + local.get $1 global.get $~lib/builtins/u32.MAX_VALUE i64.extend_i32_u i64.le_u if - local.get $2 + local.get $1 i32.wrap_i64 - local.set $5 + local.set $4 + local.get $3 local.get $4 - local.get $5 call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $8 - local.get $5 local.set $7 local.get $4 local.set $6 + local.get $3 + local.set $5 i32.const 0 i32.const 1 i32.ge_s drop - local.get $8 local.get $7 local.get $6 + local.get $5 call $~lib/util/number/utoa32_dec_lut else - local.get $4 - local.get $2 + local.get $3 + local.get $1 call $~lib/util/number/decimalCount64High i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 - local.set $9 - local.get $4 local.set $6 + local.get $1 + local.set $8 + local.get $3 + local.set $5 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 - local.get $9 local.get $6 + local.get $8 + local.get $5 call $~lib/util/number/utoa64_dec_lut end - local.get $4 + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -17714,8 +17707,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -17752,8 +17748,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 @@ -18068,20 +18067,14 @@ i32.const 5296 call $~lib/array/Array<~lib/array/Array>#join ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 i32.const 0 - local.set $3 + local.set $2 i32.const 0 drop i32.const 0 @@ -18090,14 +18083,14 @@ drop i32.const 0 drop - local.get $2 + local.get $1 i32.const 255 i32.and i32.const 10 i32.lt_u if local.get $0 - local.get $2 + local.get $1 i32.const 255 i32.and i32.const 48 @@ -18106,36 +18099,36 @@ i32.const 1 return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 1 i32.const 4 i32.le_u drop - local.get $4 - local.get $2 + local.get $3 + local.get $1 i32.const 255 i32.and call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 + local.set $6 + local.get $1 i32.const 255 i32.and - local.set $6 - local.get $4 local.set $5 + local.get $3 + local.set $4 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 local.get $6 local.get $5 - call $~lib/util/number/utoa32_dec_lut local.get $4 + call $~lib/util/number/utoa32_dec_lut + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -18226,8 +18219,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -18264,8 +18260,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat index cf419ee73f..6b517d95f5 100644 --- a/tests/compiler/std/typedarray.optimized.wat +++ b/tests/compiler/std/typedarray.optimized.wat @@ -1,6 +1,6 @@ (module - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) @@ -11,13 +11,13 @@ (type $f32_i32_i32_=>_i32 (func (param f32 i32 i32) (result i32))) (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32))) (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) + (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) + (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (type $i64_i64_i32_i32_=>_i64 (func (param i64 i64 i32 i32) (result i64))) (type $i32_i32_i64_=>_none (func (param i32 i32 i64))) (type $i64_i32_i32_=>_none (func (param i64 i32 i32))) - (type $i32_i32_i64_=>_i32 (func (param i32 i32 i64) (result i32))) (type $i32_i64_i32_=>_i32 (func (param i32 i64 i32) (result i32))) (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32))) - (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32))) (type $i32_i32_=>_f32 (func (param i32 i32) (result f32))) (type $i32_i32_=>_f64 (func (param i32 i32) (result f64))) @@ -29,8 +29,6 @@ (type $f32_i32_i32_=>_none (func (param f32 i32 i32))) (type $f64_i32_i32_=>_none (func (param f64 i32 i32))) (type $none_=>_i32 (func (result i32))) - (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32))) - (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) (type $i32_f32_=>_i32 (func (param i32 f32) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) @@ -17706,31 +17704,26 @@ i32.const 1 i32.shr_u ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $0 + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 i32.const 24 i32.shl i32.const 24 i32.shr_s i32.const 0 i32.lt_s - local.tee $1 + local.tee $2 if local.get $0 i32.const 45 i32.store16 i32.const 0 - local.get $2 + local.get $1 i32.sub - local.set $2 + local.set $1 end - local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -17739,11 +17732,11 @@ i32.lt_u if local.get $0 - local.get $1 + local.get $2 i32.const 1 i32.shl i32.add - local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -17751,19 +17744,19 @@ i32.const 48 i32.or i32.store16 - local.get $1 + local.get $2 i32.const 1 i32.add return end local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s local.tee $2 call $~lib/util/number/decimalCount32 - local.get $1 i32.add local.set $1 local.get $0 @@ -17900,11 +17893,14 @@ if local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $6 i32.add i32.load8_s - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.set $3 @@ -17935,11 +17931,14 @@ local.get $7 local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.add i32.load8_s - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.tee $0 @@ -18131,21 +18130,16 @@ local.get $2 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $0 + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 i32.const 255 i32.and i32.const 10 i32.lt_u if local.get $0 - local.get $2 + local.get $1 i32.const 255 i32.and i32.const 48 @@ -18154,7 +18148,7 @@ i32.const 1 return end - local.get $2 + local.get $1 i32.const 255 i32.and local.tee $2 @@ -18220,11 +18214,14 @@ if local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $6 i32.add i32.load8_u - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.set $3 @@ -18255,11 +18252,14 @@ local.get $7 local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.add i32.load8_u - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.tee $0 @@ -18288,31 +18288,26 @@ i32.const 3264 call $~lib/rt/pure/__release ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $0 + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 i32.const 16 i32.shl i32.const 16 i32.shr_s i32.const 0 i32.lt_s - local.tee $1 + local.tee $2 if local.get $0 i32.const 45 i32.store16 i32.const 0 - local.get $2 + local.get $1 i32.sub - local.set $2 + local.set $1 end - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 @@ -18321,11 +18316,11 @@ i32.lt_u if local.get $0 - local.get $1 + local.get $2 i32.const 1 i32.shl i32.add - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 @@ -18333,19 +18328,19 @@ i32.const 48 i32.or i32.store16 - local.get $1 + local.get $2 i32.const 1 i32.add return end local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.shr_s local.tee $2 call $~lib/util/number/decimalCount32 - local.get $1 i32.add local.set $1 local.get $0 @@ -18408,13 +18403,16 @@ if local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $6 i32.const 1 i32.shl i32.add i32.load16_s - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.set $3 @@ -18445,13 +18443,16 @@ local.get $7 local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.const 1 i32.shl i32.add i32.load16_s - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.tee $0 @@ -18482,21 +18483,16 @@ i32.const 3264 call $~lib/rt/pure/__release ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $0 + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 i32.const 65535 i32.and i32.const 10 i32.lt_u if local.get $0 - local.get $2 + local.get $1 i32.const 65535 i32.and i32.const 48 @@ -18505,7 +18501,7 @@ i32.const 1 return end - local.get $2 + local.get $1 i32.const 65535 i32.and local.tee $2 @@ -18571,13 +18567,16 @@ if local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $6 i32.const 1 i32.shl i32.add i32.load16_u - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.set $3 @@ -18608,13 +18607,16 @@ local.get $7 local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.const 1 i32.shl i32.add i32.load16_u - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.tee $0 @@ -18645,49 +18647,44 @@ i32.const 3264 call $~lib/rt/pure/__release ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $0 + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 i32.const 0 i32.lt_s - local.tee $1 + local.tee $2 if local.get $0 i32.const 45 i32.store16 i32.const 0 - local.get $2 + local.get $1 i32.sub - local.set $2 + local.set $1 end - local.get $2 + local.get $1 i32.const 10 i32.lt_u if local.get $0 - local.get $1 + local.get $2 i32.const 1 i32.shl i32.add - local.get $2 + local.get $1 i32.const 48 i32.or i32.store16 - local.get $1 + local.get $2 i32.const 1 i32.add return end local.get $0 - local.get $2 - local.get $2 - call $~lib/util/number/decimalCount32 local.get $1 + local.get $1 + call $~lib/util/number/decimalCount32 + local.get $2 i32.add local.tee $0 call $~lib/util/number/utoa_dec_simple @@ -18747,13 +18744,16 @@ if local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $6 i32.const 2 i32.shl i32.add i32.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.set $3 @@ -18784,13 +18784,16 @@ local.get $7 local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.const 2 i32.shl i32.add i32.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.tee $0 @@ -18821,19 +18824,13 @@ i32.const 3264 call $~lib/rt/pure/__release ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $0 + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 i32.const 10 i32.lt_u if local.get $0 - local.get $2 + local.get $1 i32.const 48 i32.or i32.store16 @@ -18841,8 +18838,8 @@ return end local.get $0 - local.get $2 - local.get $2 + local.get $1 + local.get $1 call $~lib/util/number/decimalCount32 local.tee $0 call $~lib/util/number/utoa_dec_simple @@ -18902,13 +18899,16 @@ if local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $6 i32.const 2 i32.shl i32.add i32.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.set $3 @@ -18939,13 +18939,16 @@ local.get $7 local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.const 2 i32.shl i32.add i32.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.tee $0 @@ -19052,71 +19055,66 @@ br_if $do-continue|0 end ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) (local $3 i32) local.get $1 - i32.const 1 - i32.shl - local.get $0 - i32.add - local.set $1 - local.get $2 i64.const 0 i64.lt_s - local.tee $0 + local.tee $2 if - local.get $1 + local.get $0 i32.const 45 i32.store16 i64.const 0 - local.get $2 + local.get $1 i64.sub - local.set $2 + local.set $1 end - local.get $2 + local.get $1 i64.const 10 i64.lt_u if - local.get $0 + local.get $2 i32.const 1 i32.shl - local.get $1 + local.get $0 i32.add - local.get $2 + local.get $1 i64.const 48 i64.or i64.store16 - local.get $0 + local.get $2 i32.const 1 i32.add return end - local.get $2 + local.get $1 i64.const 4294967295 i64.le_u if local.get $2 + local.get $1 i32.wrap_i64 - local.tee $3 + local.tee $2 call $~lib/util/number/decimalCount32 - local.get $0 i32.add - local.set $0 - local.get $1 - local.get $3 + local.set $3 local.get $0 + local.get $2 + local.get $3 call $~lib/util/number/utoa_dec_simple else + local.get $0 + local.get $1 local.get $1 - local.get $2 - local.get $2 call $~lib/util/number/decimalCount64High - local.get $0 + local.get $2 i32.add - local.tee $0 + local.tee $3 call $~lib/util/number/utoa_dec_simple end - local.get $0 + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -19234,13 +19232,16 @@ if local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $7 i32.const 3 i32.shl i32.add i64.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.set $3 @@ -19271,13 +19272,16 @@ local.get $8 local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $5 i32.const 3 i32.shl i32.add i64.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.tee $0 @@ -19308,48 +19312,43 @@ i32.const 3264 call $~lib/rt/pure/__release ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) (local $3 i32) local.get $1 - i32.const 1 - i32.shl - local.get $0 - i32.add - local.set $0 - local.get $2 i64.const 10 i64.lt_u if local.get $0 - local.get $2 + local.get $1 i64.const 48 i64.or i64.store16 i32.const 1 return end - local.get $2 + local.get $1 i64.const 4294967295 i64.le_u if - local.get $2 + local.get $1 i32.wrap_i64 local.tee $3 call $~lib/util/number/decimalCount32 - local.set $1 + local.set $2 local.get $0 local.get $3 - local.get $1 + local.get $2 call $~lib/util/number/utoa_dec_simple else local.get $0 - local.get $2 - local.get $2 + local.get $1 + local.get $1 call $~lib/util/number/decimalCount64High - local.tee $1 + local.tee $2 call $~lib/util/number/utoa_dec_simple end - local.get $1 + local.get $2 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -19444,13 +19443,16 @@ if local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $7 i32.const 3 i32.shl i32.add i64.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.set $3 @@ -19481,13 +19483,16 @@ local.get $8 local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.const 3 i32.shl i32.add i64.load - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered local.get $3 i32.add local.tee $0 @@ -20499,14 +20504,9 @@ call $~lib/rt/tlsf/checkUsedBlock call $~lib/rt/tlsf/freeBlock ) - (func $~lib/util/number/dtoa_stream (param $0 i32) (param $1 i32) (param $2 f64) (result i32) - local.get $0 + (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 f64.const 0 f64.eq if @@ -20522,14 +20522,14 @@ i32.const 3 return end - local.get $2 - local.get $2 + local.get $1 + local.get $1 f64.sub f64.const 0 f64.ne if - local.get $2 - local.get $2 + local.get $1 + local.get $1 f64.ne if local.get $0 @@ -20544,10 +20544,10 @@ i32.const 3 return else - local.get $2 + local.get $1 f64.const 0 f64.lt - local.tee $1 + local.tee $2 if local.get $0 i32.const 45 @@ -20563,7 +20563,7 @@ local.get $0 i64.const 34058970405077102 i64.store offset=8 - local.get $1 + local.get $2 i32.const 8 i32.add return @@ -20571,7 +20571,7 @@ unreachable end local.get $0 - local.get $2 + local.get $1 call $~lib/util/number/dtoa_core ) (func $~lib/util/string/joinFloatArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -20629,6 +20629,9 @@ if local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $6 i32.const 2 @@ -20636,7 +20639,7 @@ i32.add f32.load f64.promote_f32 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $3 i32.add local.set $3 @@ -20667,6 +20670,9 @@ local.get $7 local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.const 2 @@ -20674,7 +20680,7 @@ i32.add f32.load f64.promote_f32 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $3 i32.add local.tee $0 @@ -20759,13 +20765,16 @@ if local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $6 i32.const 3 i32.shl i32.add f64.load - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $3 i32.add local.set $3 @@ -20796,13 +20805,16 @@ local.get $7 local.get $1 local.get $3 + i32.const 1 + i32.shl + i32.add local.get $0 local.get $4 i32.const 3 i32.shl i32.add f64.load - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $3 i32.add local.tee $0 diff --git a/tests/compiler/std/typedarray.untouched.wat b/tests/compiler/std/typedarray.untouched.wat index beca1da76b..b15df481b0 100644 --- a/tests/compiler/std/typedarray.untouched.wat +++ b/tests/compiler/std/typedarray.untouched.wat @@ -28,7 +28,8 @@ (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $f32_i32_i32_=>_none (func (param f32 i32 i32))) (type $f64_i32_i32_=>_none (func (param f64 i32 i32))) - (type $i32_i32_i64_=>_i32 (func (param i32 i32 i64) (result i32))) + (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) + (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (type $i32_i32_f32_=>_f32 (func (param i32 i32 f32) (result f32))) (type $f32_i32_i32_=>_f32 (func (param f32 i32 i32) (result f32))) (type $i32_i32_f64_=>_f64 (func (param i32 i32 f64) (result f64))) @@ -40,9 +41,7 @@ (type $i32_i64_i32_i32_=>_none (func (param i32 i64 i32 i32))) (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) - (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32))) (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) - (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $f64_=>_i32 (func (param f64) (result i32))) (type $f32_f32_=>_f32 (func (param f32 f32) (result f32))) @@ -32397,36 +32396,30 @@ i32.const 1 i32.shr_u ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 i32.const 0 - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s i32.const 0 i32.lt_s - local.set $3 - local.get $3 + local.set $2 + local.get $2 if i32.const 0 - local.get $2 + local.get $1 i32.sub - local.set $2 + local.set $1 local.get $0 i32.const 45 i32.store16 @@ -32441,7 +32434,7 @@ i32.const 4 i32.le_u drop - local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -32450,11 +32443,11 @@ i32.lt_u if local.get $0 - local.get $3 + local.get $2 i32.const 1 i32.shl i32.add - local.get $2 + local.get $1 i32.const 24 i32.shl i32.const 24 @@ -32463,44 +32456,44 @@ i32.or i32.store16 i32.const 1 - local.get $3 + local.get $2 i32.add return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 1 i32.const 4 i32.le_u drop - local.get $4 - local.get $2 + local.get $3 + local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 + local.set $6 + local.get $1 i32.const 24 i32.shl i32.const 24 i32.shr_s - local.set $6 - local.get $4 local.set $5 + local.get $3 + local.set $4 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 local.get $6 local.get $5 - call $~lib/util/number/utoa32_dec_lut local.get $4 + call $~lib/util/number/utoa32_dec_lut + local.get $3 ) (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -32698,8 +32691,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -32736,8 +32732,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 @@ -33170,20 +33169,14 @@ local.get $2 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 i32.const 0 - local.set $3 + local.set $2 i32.const 0 drop i32.const 0 @@ -33192,14 +33185,14 @@ drop i32.const 0 drop - local.get $2 + local.get $1 i32.const 255 i32.and i32.const 10 i32.lt_u if local.get $0 - local.get $2 + local.get $1 i32.const 255 i32.and i32.const 48 @@ -33208,36 +33201,36 @@ i32.const 1 return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 1 i32.const 4 i32.le_u drop - local.get $4 - local.get $2 + local.get $3 + local.get $1 i32.const 255 i32.and call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 + local.set $6 + local.get $1 i32.const 255 i32.and - local.set $6 - local.get $4 local.set $5 + local.get $3 + local.set $4 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 local.get $6 local.get $5 - call $~lib/util/number/utoa32_dec_lut local.get $4 + call $~lib/util/number/utoa32_dec_lut + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -33328,8 +33321,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -33366,8 +33362,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 @@ -33576,36 +33575,30 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 i32.const 0 - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.shr_s i32.const 0 i32.lt_s - local.set $3 - local.get $3 + local.set $2 + local.get $2 if i32.const 0 - local.get $2 + local.get $1 i32.sub - local.set $2 + local.set $1 local.get $0 i32.const 45 i32.store16 @@ -33620,7 +33613,7 @@ i32.const 4 i32.le_u drop - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 @@ -33629,11 +33622,11 @@ i32.lt_u if local.get $0 - local.get $3 + local.get $2 i32.const 1 i32.shl i32.add - local.get $2 + local.get $1 i32.const 16 i32.shl i32.const 16 @@ -33642,44 +33635,44 @@ i32.or i32.store16 i32.const 1 - local.get $3 + local.get $2 i32.add return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 2 i32.const 4 i32.le_u drop - local.get $4 - local.get $2 + local.get $3 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.shr_s call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 + local.set $6 + local.get $1 i32.const 16 i32.shl i32.const 16 i32.shr_s - local.set $6 - local.get $4 local.set $5 + local.get $3 + local.set $4 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 local.get $6 local.get $5 - call $~lib/util/number/utoa32_dec_lut local.get $4 + call $~lib/util/number/utoa32_dec_lut + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -33770,8 +33763,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -33808,8 +33804,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 @@ -33926,20 +33925,14 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 i32.const 0 - local.set $3 + local.set $2 i32.const 0 drop i32.const 0 @@ -33948,14 +33941,14 @@ drop i32.const 0 drop - local.get $2 + local.get $1 i32.const 65535 i32.and i32.const 10 i32.lt_u if local.get $0 - local.get $2 + local.get $1 i32.const 65535 i32.and i32.const 48 @@ -33964,36 +33957,36 @@ i32.const 1 return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 2 i32.const 4 i32.le_u drop - local.get $4 - local.get $2 + local.get $3 + local.get $1 i32.const 65535 i32.and call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 + local.set $6 + local.get $1 i32.const 65535 i32.and - local.set $6 - local.get $4 local.set $5 + local.get $3 + local.set $4 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 local.get $6 local.get $5 - call $~lib/util/number/utoa32_dec_lut local.get $4 + call $~lib/util/number/utoa32_dec_lut + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -34084,8 +34077,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -34122,8 +34118,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 @@ -34240,32 +34239,26 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 i32.const 0 - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i32.const 0 i32.lt_s - local.set $3 - local.get $3 + local.set $2 + local.get $2 if i32.const 0 - local.get $2 + local.get $1 i32.sub - local.set $2 + local.set $1 local.get $0 i32.const 45 i32.store16 @@ -34280,50 +34273,50 @@ i32.const 4 i32.le_u drop - local.get $2 + local.get $1 i32.const 10 i32.lt_u if local.get $0 - local.get $3 + local.get $2 i32.const 1 i32.shl i32.add - local.get $2 + local.get $1 i32.const 48 i32.or i32.store16 i32.const 1 - local.get $3 + local.get $2 i32.add return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 4 i32.const 4 i32.le_u drop - local.get $4 - local.get $2 + local.get $3 + local.get $1 call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 local.set $6 - local.get $4 + local.get $1 local.set $5 + local.get $3 + local.set $4 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 local.get $6 local.get $5 - call $~lib/util/number/utoa32_dec_lut local.get $4 + call $~lib/util/number/utoa32_dec_lut + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -34414,8 +34407,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -34452,8 +34448,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 @@ -34570,20 +34569,14 @@ local.get $1 call $~lib/rt/pure/__release ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 i32.const 0 - local.set $3 + local.set $2 i32.const 0 drop i32.const 0 @@ -34592,44 +34585,44 @@ drop i32.const 0 drop - local.get $2 + local.get $1 i32.const 10 i32.lt_u if local.get $0 - local.get $2 + local.get $1 i32.const 48 i32.or i32.store16 i32.const 1 return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 4 i32.const 4 i32.le_u drop - local.get $4 - local.get $2 + local.get $3 + local.get $1 call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 local.set $6 - local.get $4 + local.get $1 local.set $5 + local.get $3 + local.set $4 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 local.get $6 local.get $5 - call $~lib/util/number/utoa32_dec_lut local.get $4 + call $~lib/util/number/utoa32_dec_lut + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -34720,8 +34713,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -34758,8 +34754,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 @@ -35237,34 +35236,28 @@ local.get $3 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i64) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 + (local $8 i64) i32.const 0 - local.set $3 + local.set $2 i32.const 1 drop - local.get $2 + local.get $1 i64.const 0 i64.lt_s - local.set $3 - local.get $3 + local.set $2 + local.get $2 if i64.const 0 - local.get $2 + local.get $1 i64.sub - local.set $2 + local.set $1 local.get $0 i32.const 45 i32.store16 @@ -35279,79 +35272,79 @@ i32.const 4 i32.le_u drop - local.get $2 + local.get $1 i64.const 10 i64.lt_u if local.get $0 - local.get $3 + local.get $2 i32.const 1 i32.shl i32.add - local.get $2 + local.get $1 i64.const 48 i64.or i64.store16 i32.const 1 - local.get $3 + local.get $2 i32.add return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 8 i32.const 4 i32.le_u drop - local.get $2 + local.get $1 global.get $~lib/builtins/u32.MAX_VALUE i64.extend_i32_u i64.le_u if - local.get $2 + local.get $1 i32.wrap_i64 - local.set $5 + local.set $4 + local.get $3 local.get $4 - local.get $5 call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $8 - local.get $5 local.set $7 local.get $4 local.set $6 + local.get $3 + local.set $5 i32.const 0 i32.const 1 i32.ge_s drop - local.get $8 local.get $7 local.get $6 + local.get $5 call $~lib/util/number/utoa32_dec_lut else - local.get $4 - local.get $2 + local.get $3 + local.get $1 call $~lib/util/number/decimalCount64High i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 - local.set $9 - local.get $4 local.set $6 + local.get $1 + local.set $8 + local.get $3 + local.set $5 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 - local.get $9 local.get $6 + local.get $8 + local.get $5 call $~lib/util/number/utoa64_dec_lut end - local.get $4 + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -35444,8 +35437,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -35482,8 +35478,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 @@ -35752,22 +35751,16 @@ local.get $2 call $~lib/rt/pure/__retain ) - (func $~lib/util/number/itoa_stream (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (func $~lib/util/number/itoa_buffered (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i64) - local.get $0 - local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 + (local $8 i64) i32.const 0 - local.set $3 + local.set $2 i32.const 0 drop i32.const 0 @@ -35776,73 +35769,73 @@ drop i32.const 0 drop - local.get $2 + local.get $1 i64.const 10 i64.lt_u if local.get $0 - local.get $2 + local.get $1 i64.const 48 i64.or i64.store16 i32.const 1 return end - local.get $3 - local.set $4 + local.get $2 + local.set $3 i32.const 8 i32.const 4 i32.le_u drop - local.get $2 + local.get $1 global.get $~lib/builtins/u32.MAX_VALUE i64.extend_i32_u i64.le_u if - local.get $2 + local.get $1 i32.wrap_i64 - local.set $5 + local.set $4 + local.get $3 local.get $4 - local.get $5 call $~lib/util/number/decimalCount32 i32.add - local.set $4 + local.set $3 local.get $0 - local.set $8 - local.get $5 local.set $7 local.get $4 local.set $6 + local.get $3 + local.set $5 i32.const 0 i32.const 1 i32.ge_s drop - local.get $8 local.get $7 local.get $6 + local.get $5 call $~lib/util/number/utoa32_dec_lut else - local.get $4 - local.get $2 + local.get $3 + local.get $1 call $~lib/util/number/decimalCount64High i32.add - local.set $4 + local.set $3 local.get $0 - local.set $7 - local.get $2 - local.set $9 - local.get $4 local.set $6 + local.get $1 + local.set $8 + local.get $3 + local.set $5 i32.const 0 i32.const 1 i32.ge_s drop - local.get $7 - local.get $9 local.get $6 + local.get $8 + local.get $5 call $~lib/util/number/utoa64_dec_lut end - local.get $4 + local.get $3 ) (func $~lib/util/string/joinIntegerArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -35933,8 +35926,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $7 @@ -35971,8 +35967,11 @@ local.get $10 local.get $9 local.get $10 + i32.const 1 + i32.shl + i32.add local.get $11 - call $~lib/util/number/itoa_stream + call $~lib/util/number/itoa_buffered i32.add local.set $10 local.get $8 @@ -37401,15 +37400,9 @@ call $~lib/rt/tlsf/__free local.get $3 ) - (func $~lib/util/number/dtoa_stream (param $0 i32) (param $1 i32) (param $2 f64) (result i32) - (local $3 i32) - local.get $0 + (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 f64.const 0 f64.eq if @@ -37425,15 +37418,15 @@ i32.const 3 return end - local.get $2 - local.get $2 + local.get $1 + local.get $1 f64.sub f64.const 0 f64.eq i32.eqz if - local.get $2 - local.get $2 + local.get $1 + local.get $1 f64.ne if local.get $0 @@ -37448,11 +37441,11 @@ i32.const 3 return else - local.get $2 + local.get $1 f64.const 0 f64.lt - local.set $3 - local.get $3 + local.set $2 + local.get $2 if local.get $0 i32.const 45 @@ -37469,14 +37462,14 @@ i64.const 34058970405077102 i64.store offset=8 i32.const 8 - local.get $3 + local.get $2 i32.add return end unreachable end local.get $0 - local.get $2 + local.get $1 call $~lib/util/number/dtoa_core ) (func $~lib/util/string/joinFloatArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -37559,9 +37552,12 @@ local.get $9 local.get $8 local.get $9 + i32.const 1 + i32.shl + i32.add local.get $10 f64.promote_f32 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered i32.add local.set $9 local.get $6 @@ -37598,9 +37594,12 @@ local.get $9 local.get $8 local.get $9 + i32.const 1 + i32.shl + i32.add local.get $10 f64.promote_f32 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered i32.add local.set $9 local.get $7 @@ -37796,8 +37795,11 @@ local.get $9 local.get $8 local.get $9 + i32.const 1 + i32.shl + i32.add local.get $10 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered i32.add local.set $9 local.get $6 @@ -37834,8 +37836,11 @@ local.get $9 local.get $8 local.get $9 + i32.const 1 + i32.shl + i32.add local.get $10 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered i32.add local.set $9 local.get $7 diff --git a/tests/compiler/wasi/trace.optimized.wat b/tests/compiler/wasi/trace.optimized.wat index 37dd3b71e2..52c13126ca 100644 --- a/tests/compiler/wasi/trace.optimized.wat +++ b/tests/compiler/wasi/trace.optimized.wat @@ -1542,7 +1542,7 @@ local.get $8 i32.add ) - (func $~lib/util/number/dtoa_stream (param $0 i32) (param $1 f64) (result i32) + (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) (local $2 i32) local.get $1 f64.const 0 @@ -1773,7 +1773,7 @@ i32.add local.tee $6 local.get $1 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.set $9 local.get $7 local.get $6 @@ -1797,7 +1797,7 @@ local.get $6 local.get $6 local.get $2 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $6 call $~lib/string/String.UTF8.encodeUnsafe i32.const 1 @@ -1817,7 +1817,7 @@ local.get $6 local.get $6 local.get $3 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $6 call $~lib/string/String.UTF8.encodeUnsafe i32.const 1 @@ -1837,7 +1837,7 @@ local.get $6 local.get $6 local.get $4 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $6 call $~lib/string/String.UTF8.encodeUnsafe i32.const 1 @@ -1857,7 +1857,7 @@ local.get $6 local.get $6 local.get $5 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $6 call $~lib/string/String.UTF8.encodeUnsafe i32.const 1 diff --git a/tests/compiler/wasi/trace.untouched.wat b/tests/compiler/wasi/trace.untouched.wat index 1942f96e70..3491b560ec 100644 --- a/tests/compiler/wasi/trace.untouched.wat +++ b/tests/compiler/wasi/trace.untouched.wat @@ -5,12 +5,11 @@ (type $none_=>_none (func)) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) + (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32))) (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) - (type $i32_f64_=>_i32 (func (param i32 f64) (result i32))) (import "wasi_snapshot_preview1" "fd_write" (func $~lib/bindings/wasi_snapshot_preview1/fd_write (param i32 i32 i32 i32) (result i32))) (import "wasi_snapshot_preview1" "proc_exit" (func $~lib/bindings/wasi_snapshot_preview1/proc_exit (param i32))) (memory $0 1) @@ -3186,15 +3185,9 @@ local.get $2 i32.add ) - (func $~lib/util/number/dtoa_stream (param $0 i32) (param $1 i32) (param $2 f64) (result i32) - (local $3 i32) - local.get $0 + (func $~lib/util/number/dtoa_buffered (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) local.get $1 - i32.const 1 - i32.shl - i32.add - local.set $0 - local.get $2 f64.const 0 f64.eq if @@ -3210,15 +3203,15 @@ i32.const 3 return end - local.get $2 - local.get $2 + local.get $1 + local.get $1 f64.sub f64.const 0 f64.eq i32.eqz if - local.get $2 - local.get $2 + local.get $1 + local.get $1 f64.ne if local.get $0 @@ -3233,11 +3226,11 @@ i32.const 3 return else - local.get $2 + local.get $1 f64.const 0 f64.lt - local.set $3 - local.get $3 + local.set $2 + local.get $2 if local.get $0 i32.const 45 @@ -3254,14 +3247,14 @@ i64.const 34058970405077102 i64.store offset=8 i32.const 8 - local.get $3 + local.get $2 i32.add return end unreachable end local.get $0 - local.get $2 + local.get $1 call $~lib/util/number/dtoa_core ) (func $~lib/wasi/index/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) @@ -3563,9 +3556,8 @@ i32.const 1 local.get $11 local.get $11 - i32.const 0 local.get $2 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $11 i32.const 0 call $~lib/string/String.UTF8.encodeUnsafe @@ -3585,9 +3577,8 @@ i32.const 1 local.get $11 local.get $11 - i32.const 0 local.get $3 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $11 i32.const 0 call $~lib/string/String.UTF8.encodeUnsafe @@ -3607,9 +3598,8 @@ i32.const 1 local.get $11 local.get $11 - i32.const 0 local.get $4 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $11 i32.const 0 call $~lib/string/String.UTF8.encodeUnsafe @@ -3629,9 +3619,8 @@ i32.const 1 local.get $11 local.get $11 - i32.const 0 local.get $5 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $11 i32.const 0 call $~lib/string/String.UTF8.encodeUnsafe @@ -3651,9 +3640,8 @@ i32.const 1 local.get $11 local.get $11 - i32.const 0 local.get $6 - call $~lib/util/number/dtoa_stream + call $~lib/util/number/dtoa_buffered local.get $11 i32.const 0 call $~lib/string/String.UTF8.encodeUnsafe